diff --git a/src/router/global.rs b/src/router/global.rs index 937b296..975344f 100644 --- a/src/router/global.rs +++ b/src/router/global.rs @@ -115,3 +115,23 @@ pub fn gift_item(item: &JsonValue, user: &mut JsonValue) { }; user["home"]["gift_list"].push(to_push).unwrap(); } +pub fn get_user_rank_data(exp: i64) -> JsonValue { + let ranks = json::parse(include_str!("userdata/user_rank.json")).unwrap(); + + for (i, rank) in ranks.members().enumerate() { + if exp < rank["exp"].as_i64().unwrap() { + return ranks[i - 1].clone(); + } + } + return ranks[ranks.len() - 1].clone(); +} + +pub fn give_exp(amount: i32, user: &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"] = timestamp().into(); + } +} diff --git a/src/router/live.rs b/src/router/live.rs index 8a1437a..8bccaff 100644 --- a/src/router/live.rs +++ b/src/router/live.rs @@ -119,7 +119,7 @@ pub fn end(req: HttpRequest, body: String) -> HttpResponse { } user["stamina"]["last_updated_time"] = global::timestamp().into(); - user["user"]["exp"] = (user["user"]["exp"].as_i32().unwrap() + body["use_lp"].as_i32().unwrap()).into(); + global::give_exp(body["use_lp"].as_i32().unwrap(), &mut user); let live = update_live_data(&mut user, &body); diff --git a/src/router/userdata/mod.rs b/src/router/userdata/mod.rs index 9e39fb6..97e957e 100644 --- a/src/router/userdata/mod.rs +++ b/src/router/userdata/mod.rs @@ -3,7 +3,6 @@ use std::sync::{Mutex, MutexGuard}; use lazy_static::lazy_static; use json::{JsonValue, object}; use crate::router::global; -use math::round; use rand::Rng; lazy_static! { @@ -180,16 +179,6 @@ fn get_login_token(uid: i64) -> String { } data.unwrap() } -pub fn get_user_rank_data(exp: i64) -> JsonValue { - let ranks = json::parse(include_str!("user_rank.json")).unwrap(); - - for (i, rank) in ranks.members().enumerate() { - if exp < rank["exp"].as_i64().unwrap() { - return ranks[i - 1].clone(); - } - } - return ranks[ranks.len() - 1].clone(); -} fn get_data(auth_key: &str, row: &str) -> JsonValue { let key = get_key(&auth_key); @@ -203,7 +192,7 @@ pub fn get_acc(auth_key: &str) -> JsonValue { let mut user = get_data(auth_key, "userdata"); user["gem"]["total"] = (user["gem"]["charge"].as_i64().unwrap() + user["gem"]["free"].as_i64().unwrap()).into(); - let max = get_user_rank_data(user["user"]["exp"].as_i64().unwrap())["maxLp"].as_u64().unwrap(); + let max = global::get_user_rank_data(user["user"]["exp"].as_i64().unwrap())["maxLp"].as_u64().unwrap(); let speed = 285; //4 mins, 45 sec let since_last = global::timestamp() - user["stamina"]["last_updated_time"].as_u64().unwrap(); @@ -211,7 +200,7 @@ pub fn get_acc(auth_key: &str) -> JsonValue { let restored = (since_last - diff) / speed; user["stamina"]["last_updated_time"] = (global::timestamp() - diff).into(); - let mut stamina = user["stamina"]["stamina"].as_i64().unwrap(); + let mut stamina = user["stamina"]["stamina"].as_u64().unwrap(); if stamina < max { stamina += restored; if stamina > max { @@ -298,7 +287,7 @@ pub fn get_name_and_rank(uid: i64) -> JsonValue { return object!{ user_name: data["user"]["name"].clone(), - user_rank: get_user_rank_data(data["user"]["exp"].as_i64().unwrap())["rank"].clone() //todo + user_rank: global::get_user_rank_data(data["user"]["exp"].as_i64().unwrap())["rank"].clone() //todo } }