mirror of
https://github.com/RustySamovar/RustySamovar.git
synced 2024-11-24 19:27:35 +00:00
Enable TP point unlocking
This commit is contained in:
parent
a62fbbdaa8
commit
8a3ac5e8d3
@ -5,6 +5,9 @@ edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[features]
|
||||
raw_packet_dump = []
|
||||
|
||||
[dependencies]
|
||||
kcp = { path = "../kcp" }
|
||||
mhycrypt = { path = "../mhycrypt" }
|
||||
|
@ -73,6 +73,9 @@ use super::reliquary_prop::Entity as ReliquaryPropEntity;
|
||||
pub use super::furniture_info::Model as FurnitureInfo;
|
||||
use super::furniture_info::Entity as FurnitureInfoEntity;
|
||||
|
||||
pub use super::trans_point::Model as TransPoint;
|
||||
use super::trans_point::Entity as TransPointEntity;
|
||||
|
||||
/*
|
||||
This is used to convert async operations into sync ones
|
||||
*/
|
||||
@ -1050,6 +1053,32 @@ impl DatabaseManager {
|
||||
// No assert here
|
||||
}
|
||||
|
||||
pub fn get_scene_trans_points(&self, user_id: u32, scene_id: u32) -> Vec<u32> {
|
||||
let points = match TransPointEntity::find()
|
||||
.filter(
|
||||
Condition::all()
|
||||
.add(super::trans_point::Column::Uid.eq(user_id))
|
||||
.add(super::trans_point::Column::SceneId.eq(scene_id))
|
||||
)
|
||||
.all(&self.db).wait()
|
||||
{
|
||||
Err(_) => { panic!("DB ERROR!") },
|
||||
Ok(points) => points.iter().map(|x| x.point_id).collect(),
|
||||
};
|
||||
|
||||
return points;
|
||||
}
|
||||
|
||||
pub fn add_scene_trans_point(&self, user_id: u32, scene_id: u32, point_id: u32) {
|
||||
let point = super::trans_point::ActiveModel {
|
||||
uid: ActiveValue::Set(user_id),
|
||||
scene_id: ActiveValue::Set(scene_id),
|
||||
point_id: ActiveValue::Set(point_id),
|
||||
};
|
||||
|
||||
let point: TransPoint = point.put(&self.db).unwrap();
|
||||
}
|
||||
|
||||
pub const SPOOFED_AVATAR_ID: u32 = 1;
|
||||
pub const SPOOFED_WEAPON_ID: u32 = 2;
|
||||
const SPOOFED_SCENE_ID: u32 = 3; // TODO: that's a different kind of ID!
|
||||
|
@ -20,4 +20,5 @@ mod equip_info;
|
||||
mod item_info;
|
||||
mod weapon_affix_info;
|
||||
mod reliquary_prop;
|
||||
mod furniture_info;
|
||||
mod furniture_info;
|
||||
mod trans_point;
|
26
src/dbmanager/trans_point.rs
Normal file
26
src/dbmanager/trans_point.rs
Normal file
@ -0,0 +1,26 @@
|
||||
// Database Manager
|
||||
|
||||
use sea_orm::entity::prelude::*;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
|
||||
#[sea_orm(table_name = "trans_point")]
|
||||
pub struct Model {
|
||||
#[sea_orm(primary_key, autoincrement = false)]
|
||||
pub uid: u32,
|
||||
pub scene_id: u32,
|
||||
pub point_id: u32,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, EnumIter)]
|
||||
pub enum Relation {
|
||||
}
|
||||
|
||||
impl RelationTrait for Relation {
|
||||
fn def(&self) -> RelationDef {
|
||||
match self {
|
||||
_ => panic!("Unknown relation type!"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ActiveModelBehavior for ActiveModel {}
|
@ -23,13 +23,15 @@ GetScenePointReq,
|
||||
)]
|
||||
pub struct SceneSubsystem {
|
||||
packets_to_send_tx: Sender<IpcMessage>,
|
||||
db: Arc<DatabaseManager>,
|
||||
}
|
||||
|
||||
impl SceneSubsystem {
|
||||
pub fn new(packets_to_send_tx: Sender<IpcMessage>) -> Self {
|
||||
pub fn new(db: Arc<DatabaseManager>, packets_to_send_tx: Sender<IpcMessage>) -> Self {
|
||||
let mut scs = Self {
|
||||
packets_to_send_tx: packets_to_send_tx,
|
||||
packet_callbacks: HashMap::new(),
|
||||
db: db,
|
||||
};
|
||||
|
||||
scs.register();
|
||||
@ -49,10 +51,16 @@ impl SceneSubsystem {
|
||||
}
|
||||
|
||||
fn process_get_scene_point(&self, user_id: u32, metadata: &proto::PacketHead, req: &proto::GetScenePointReq, rsp: &mut proto::GetScenePointRsp) {
|
||||
rsp.scene_id = req.scene_id;
|
||||
let scene_id = req.scene_id;
|
||||
|
||||
rsp.scene_id = scene_id;
|
||||
|
||||
// TODO: implemented but for the sake of debugging we hardcode it for now
|
||||
rsp.unlocked_point_list = (1..300).collect();
|
||||
//rsp.unlocked_point_list = self.db.get_scene_trans_points(user_id, scene_id);
|
||||
|
||||
// TODO: hardcoded data!
|
||||
rsp.unlocked_point_list = (1..250).collect();
|
||||
rsp.unlock_area_list = (1..11).collect();
|
||||
rsp.unlock_area_list = (1..20).collect();
|
||||
//locked_point_list=vec![];
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,7 @@ use crate::utils::{IdManager, TimeManager};
|
||||
|
||||
#[packet_processor(
|
||||
SceneTransToPointReq,
|
||||
UnlockTransPointReq,
|
||||
)]
|
||||
pub struct TeleportSubsystem {
|
||||
packets_to_send_tx: Sender<IpcMessage>,
|
||||
@ -75,4 +76,18 @@ impl TeleportSubsystem {
|
||||
|
||||
self.em.player_teleported(user_id, pos, s_id, scene_info.scene_token, &proto::EnterType::EnterGoto);
|
||||
}
|
||||
|
||||
pub fn process_unlock_trans_point(&self, user_id: u32, metadata: &proto::PacketHead, req: &proto::UnlockTransPointReq, rsp: &mut proto::UnlockTransPointRsp) {
|
||||
let scene_id = req.scene_id;
|
||||
let point_id = req.point_id;
|
||||
|
||||
self.db.add_scene_trans_point(user_id, scene_id, point_id);
|
||||
|
||||
// TODO: for unknown points we can just use player's position and add them to our collection
|
||||
|
||||
build_and_send!(self, user_id, metadata, ScenePointUnlockNotify {
|
||||
scene_id: scene_id,
|
||||
point_list: vec![point_id],
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user