Browse Source

some trap stuff

traps
andy 4 years ago
parent
commit
1adf933060
  1. 29
      src/entity/character.rs
  2. 26
      src/ship/packet/handler/message.rs

29
src/entity/character.rs

@ -264,6 +264,35 @@ pub struct CharacterMaterials {
pub tp: u32, pub tp: u32,
} }
#[derive(Debug)]
pub enum PlayerTraps {
FireTrap,
FreezeTrap,
SlowTrap,
ConfuseTrap,
}
impl PlayerTraps {
fn from(id: u16) -> PlayerTraps {
match id {
0 => PlayerTraps::FireTrap,
1 => PlayerTraps::FreezeTrap,
2 => PlayerTraps::SlowTrap,
3 => PlayerTraps::ConfuseTrap,
_ => panic!(),
}
}
fn into(self) -> u16 {
match self {
PlayerTraps::FireTrap => 0,
PlayerTraps::FreezeTrap => 1,
PlayerTraps::SlowTrap => 2,
PlayerTraps::ConfuseTrap => 3,
}
}
}
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
pub struct CharacterEntityId(pub u32); pub struct CharacterEntityId(pub u32);

26
src/ship/packet/handler/message.rs

@ -8,6 +8,7 @@ use crate::ship::ship::{SendShipPacket, ShipError, Rooms, Clients, ItemDropLocat
use crate::ship::location::{ClientLocation, ClientLocationError}; use crate::ship::location::{ClientLocation, ClientLocationError};
use crate::ship::items::{ItemManager, ClientItemId, InventoryItem}; use crate::ship::items::{ItemManager, ClientItemId, InventoryItem};
use crate::ship::packet::builder; use crate::ship::packet::builder;
use crate::entity::character::{PlayerTraps};
pub async fn request_exp<EG: EntityGateway>(id: ClientId, pub async fn request_exp<EG: EntityGateway>(id: ClientId,
request_exp: &RequestExp, request_exp: &RequestExp,
@ -364,3 +365,28 @@ where
item_manager.player_sorts_items(entity_gateway, &client.character, pkt.item_ids).await?; item_manager.player_sorts_items(entity_gateway, &client.character, pkt.item_ids).await?;
Ok(Box::new(None.into_iter())) // Do clients care about the order of other clients items? Ok(Box::new(None.into_iter())) // Do clients care about the order of other clients items?
} }
/*
// 0 - dt
// 1 - ft
// 3 - ct
// TODO: 2 - st? (requires bmode?)
// TODO: do we need to do anything with this packet other than log it and fwd it?
// TODO: do we need to track trap counts in EG?
pub fn player_trap_set(id: ClientId,
pkt: &PlayerTrapSet,
clients: &Clients)
-> Result<Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send>, anyhow::Error>
{
let client = clients.get(&id).ok_or(ShipError::ClientNotFound(id))?;
match PlayerTraps::from(pkt.trap_type) {
PlayerTraps::FireTrap => {},
PlayerTraps::FreezeTrap => {},
PlayerTraps::SlowTrap => {},
PlayerTraps::ConfuseTrap {},
_ => {}, // uhoh
}
}
*/
Loading…
Cancel
Save