From 4ee98b22718e095c3b8a60b57033c9ee25eedd98 Mon Sep 17 00:00:00 2001 From: Ethan O'Brien Date: Sun, 21 Jul 2024 23:23:43 -0500 Subject: [PATCH] Implement star event ranking table (ish?) --- src/router.rs | 1 + src/router/event.rs | 47 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/router.rs b/src/router.rs index 915aa3f..7ea70bd 100644 --- a/src/router.rs +++ b/src/router.rs @@ -26,6 +26,7 @@ pub mod exchange; pub mod items; pub mod databases; pub mod location; +pub mod event_ranking; use actix_web::{ HttpResponse, diff --git a/src/router/event.rs b/src/router/event.rs index 89eb028..89bd290 100644 --- a/src/router/event.rs +++ b/src/router/event.rs @@ -124,9 +124,15 @@ pub fn event(req: HttpRequest, body: String) -> Option { save_event_data(&key, body.master_event_id, event.clone()); } + + event["point_ranking"]["point"] = get_points(body.master_event_id, &user).into(); + event["point_ranking"]["rank"] = get_rank(body.master_event_id, user["user"]["id"].as_u64().unwrap()).into(); + if leveled { save_event_data(&key, body.master_event_id, event.clone()); event["star_event"]["is_star_event_update"] = 1.into(); + } else { + save_event_data(&key, body.master_event_id, event.clone()); } } @@ -195,9 +201,38 @@ pub fn set_member(req: HttpRequest, body: String) -> Option { }) } -pub fn ranking(_req: HttpRequest, _body: String) -> Option { +fn get_rank(event: u32, user_id: u64) -> u32 { + let scores = crate::router::event_ranking::get_raw_info(event); + + let mut i=1; + for score in scores.members() { + if score["user"] == user_id { + return i; + } + i += 1; + } + 0 +} + +pub fn ranking(_req: HttpRequest, body: String) -> Option { + let body = &encryption::decrypt_packet(&body).unwrap(); + let body: EventRankingGet = serde_json::from_str(body).unwrap(); + let scores = crate::router::event_ranking::get_scores_json()[body.master_event_id.to_string()].clone(); + let mut rv = array![]; + let mut i=1; + let start = if body.user_id == 0 { body.start_rank } else { get_rank(body.master_event_id, body.user_id) }; + for score in scores.members() { + if i >= start && start + body.count >= i { + rv.push(score.clone()).unwrap(); + i += 1; + } + if start + body.count >= i { + break; + } + } + Some(object!{ - ranking_detail_list: [] + ranking_detail_list: rv }) } @@ -285,6 +320,8 @@ pub fn event_live(req: HttpRequest, body: String, skipped: bool) -> Option Option