keyboard-controller-buttons #104
@ -2,8 +2,8 @@ use std::convert::{From, Into};
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use serde::{Serialize, Deserialize};
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
use libpso::packet::ship::{UpdateConfig, WriteInfoboard};
|
use libpso::packet::ship::{UpdateConfig, WriteInfoboard, KeyboardConfig};
|
||||||
use libpso::character::character::{DEFAULT_PALETTE_CONFIG, DEFAULT_TECH_MENU};
|
use libpso::character::character::{DEFAULT_PALETTE_CONFIG, DEFAULT_TECH_MENU, DEFAULT_KEYBOARD_CONFIG1};
|
||||||
use crate::entity::item::tech::Technique;
|
use crate::entity::item::tech::Technique;
|
||||||
use crate::entity::account::UserAccountId;
|
use crate::entity::account::UserAccountId;
|
||||||
|
|
||||||
@ -264,6 +264,28 @@ pub struct CharacterMaterials {
|
|||||||
pub tp: u32,
|
pub tp: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct CharacterKeyboardConfig {
|
||||||
|
pub keyboard: [u8; 0x16C],
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CharacterKeyboardConfig {
|
||||||
|
fn new() -> CharacterKeyboardConfig {
|
||||||
|
CharacterKeyboardConfig {
|
||||||
|
keyboard: DEFAULT_KEYBOARD_CONFIG1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn update(&mut self, new_config: &KeyboardConfig) {
|
||||||
|
self.keyboard = new_config.keyboard_config;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn as_bytes(&self) -> [u8; 0x16C] {
|
||||||
|
self.keyboard
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, Default, derive_more::Display)]
|
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, Default, derive_more::Display)]
|
||||||
pub struct CharacterEntityId(pub u32);
|
pub struct CharacterEntityId(pub u32);
|
||||||
|
|
||||||
|
@ -19,9 +19,20 @@ pub async fn save_options<EG: EntityGateway>(id: ClientId,
|
|||||||
clients: &mut Clients,
|
clients: &mut Clients,
|
||||||
entity_gateway: &mut EG)
|
entity_gateway: &mut EG)
|
||||||
-> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
|
-> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
|
||||||
// // TODO: don't unwrap?
|
// TODO: don't unwrap?
|
||||||
let client = clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id)).unwrap();
|
let client = clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id)).unwrap();
|
||||||
client.character.option_flags = save_options.options;
|
client.character.option_flags = save_options.options;
|
||||||
entity_gateway.save_character(&client.character).await.unwrap();
|
entity_gateway.save_character(&client.character).await.unwrap();
|
||||||
Box::new(None.into_iter())
|
Box::new(None.into_iter())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pub async fn keyboard_config<EG: EntityGateway>(id: ClientId,
|
||||||
|
// keyboard_config: &KeyboardConfig,
|
||||||
|
// clients: &mut Clients,
|
||||||
|
// entity_gateway: &mut EG)
|
||||||
|
// -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
|
||||||
|
// let client = clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id)).unwrap();
|
||||||
|
// client.character.option_flags = save_options.options;
|
||||||
|
// entity_gateway.save_character(&client.character).await.unwrap();
|
||||||
|
// Box::new(None.into_iter())
|
||||||
|
// }
|
@ -115,6 +115,7 @@ pub enum RecvShipPacket {
|
|||||||
RequestShipBlockList(RequestShipBlockList),
|
RequestShipBlockList(RequestShipBlockList),
|
||||||
ItemsToTrade(ItemsToTrade),
|
ItemsToTrade(ItemsToTrade),
|
||||||
TradeConfirmed(TradeConfirmed),
|
TradeConfirmed(TradeConfirmed),
|
||||||
|
KeyboardConfig(KeyboardConfig),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RecvServerPacket for RecvShipPacket {
|
impl RecvServerPacket for RecvShipPacket {
|
||||||
@ -156,6 +157,7 @@ impl RecvServerPacket for RecvShipPacket {
|
|||||||
0xD2 => Ok(RecvShipPacket::TradeConfirmed(TradeConfirmed::from_bytes(data)?)),
|
0xD2 => Ok(RecvShipPacket::TradeConfirmed(TradeConfirmed::from_bytes(data)?)),
|
||||||
0xE7 => Ok(RecvShipPacket::FullCharacterData(Box::new(FullCharacterData::from_bytes(data)?))),
|
0xE7 => Ok(RecvShipPacket::FullCharacterData(Box::new(FullCharacterData::from_bytes(data)?))),
|
||||||
0x1ED => Ok(RecvShipPacket::SaveOptions(SaveOptions::from_bytes(data)?)),
|
0x1ED => Ok(RecvShipPacket::SaveOptions(SaveOptions::from_bytes(data)?)),
|
||||||
|
0x4ED => Ok(RecvShipPacket::KeyboardConfig(KeyboardConfig::from_bytes(data)?)),
|
||||||
_ => Err(PacketParseError::WrongPacketForServerType(u16::from_le_bytes([data[2], data[3]]), data.to_vec()))
|
_ => Err(PacketParseError::WrongPacketForServerType(u16::from_le_bytes([data[2], data[3]]), data.to_vec()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user