mirror of
https://github.com/yoncodes/BD2PS.git
synced 2026-08-05 06:12:14 +02:00
pushing
This commit is contained in:
76
gameserver/src/logic/game/pass_info.rs
Normal file
76
gameserver/src/logic/game/pass_info.rs
Normal file
@@ -0,0 +1,76 @@
|
||||
use bd2::prost::Message;
|
||||
use bd2::proto::proto_net::{
|
||||
Notify, PassDbInfo, PassInfoRequest, PassInfoResponse, PassRewardDbInfo,
|
||||
};
|
||||
use common::packet_code::PacketCodeType;
|
||||
use crypto::network::GameResponse;
|
||||
use serde_json::Value;
|
||||
use tracing::info;
|
||||
|
||||
pub async fn handle(_pool: &sqlx::SqlitePool, _uid: i64, _req: PassInfoRequest) -> GameResponse {
|
||||
info!("Handling PassInfoRequest");
|
||||
|
||||
// Load and parse JSON file
|
||||
let data: Value = serde_json::from_str(include_str!("../../../../data/starter/pass_info.json"))
|
||||
.expect("Failed to parse pass_info.json");
|
||||
|
||||
// --- Parse passInfo array ---
|
||||
let passes = data
|
||||
.get("passInfo")
|
||||
.and_then(|v| v.as_array())
|
||||
.cloned()
|
||||
.unwrap_or_default();
|
||||
|
||||
let mut pass_info = Vec::new();
|
||||
|
||||
for p in passes {
|
||||
pass_info.push(PassDbInfo {
|
||||
id: p.get("id").and_then(|v| v.as_i64()).map(|v| v as i32),
|
||||
exp: p.get("exp").and_then(|v| v.as_i64()).map(|v| v as i32),
|
||||
active_premium_1: p.get("activePremium_1").and_then(|v| v.as_bool()),
|
||||
..Default::default()
|
||||
});
|
||||
}
|
||||
|
||||
let rewards = data
|
||||
.get("passRewardInfo")
|
||||
.and_then(|v| v.as_array())
|
||||
.cloned()
|
||||
.unwrap_or_default();
|
||||
|
||||
let mut pass_reward_info = Vec::new();
|
||||
|
||||
for r in rewards {
|
||||
pass_reward_info.push(PassRewardDbInfo {
|
||||
pass_id: r.get("passId").and_then(|v| v.as_i64()).map(|v| v as i32),
|
||||
id: r.get("id").and_then(|v| v.as_i64()).map(|v| v as i32),
|
||||
basic: r.get("basic").and_then(|v| v.as_bool()),
|
||||
premium_1: r.get("premium_1").and_then(|v| v.as_bool()),
|
||||
..Default::default()
|
||||
});
|
||||
}
|
||||
|
||||
let response = PassInfoResponse {
|
||||
pass_info,
|
||||
pass_reward_info,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let resp_bytes = response.encode_to_vec();
|
||||
|
||||
let notify = Notify {
|
||||
achievement_update_info: vec![],
|
||||
mission_update_info: vec![],
|
||||
event_mission_update_info: vec![],
|
||||
active_login_event: vec![1, 2, 625, 626, 627],
|
||||
active_contents_info: vec![],
|
||||
ll_type: Some("".to_string()),
|
||||
is_purchasing_disabled: Some(false),
|
||||
maintenance_start_date: Some(1688646600000),
|
||||
notice_last_seq: Some(8818),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let (route, code) = PacketCodeType::PassInfo.info();
|
||||
GameResponse::success(route, &resp_bytes, code).with_notify(¬ify)
|
||||
}
|
||||
Reference in New Issue
Block a user