move block_selected
This commit is contained in:
parent
0b04701156
commit
07403fe815
@ -7,6 +7,35 @@ use crate::ship::character::{CharacterBytesBuilder, FullCharacterBytesBuilder};
|
|||||||
use crate::ship::location::{ClientLocation, LobbyId, RoomId, RoomLobby, MAX_ROOMS};
|
use crate::ship::location::{ClientLocation, LobbyId, RoomId, RoomLobby, MAX_ROOMS};
|
||||||
use libpso::character::character;
|
use libpso::character::character;
|
||||||
|
|
||||||
|
// this function needs a better home
|
||||||
|
pub fn block_selected(id: ClientId,
|
||||||
|
pkt: &MenuSelect,
|
||||||
|
clients: &mut HashMap<ClientId, ClientState>,
|
||||||
|
level_table: &CharacterLevelTable)
|
||||||
|
-> Result<Vec<SendShipPacket>, ShipError> {
|
||||||
|
let client = clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id))?;
|
||||||
|
client.block = pkt.item as u32;
|
||||||
|
|
||||||
|
let (level, stats) = level_table.get_stats_from_exp(client.character.char_class, client.character.exp);
|
||||||
|
|
||||||
|
let fc = FullCharacterBytesBuilder::new()
|
||||||
|
.character(&client.character)
|
||||||
|
.stats(&stats)
|
||||||
|
.level(level)
|
||||||
|
.inventory(&client.inventory)
|
||||||
|
.key_config(&client.settings.settings.key_config)
|
||||||
|
.joystick_config(&client.settings.settings.joystick_config)
|
||||||
|
.symbol_chat(&client.settings.settings.symbol_chats)
|
||||||
|
.tech_menu(&client.character.tech_menu.as_bytes())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Ok(vec![
|
||||||
|
SendShipPacket::FullCharacter(FullCharacter {
|
||||||
|
character: fc,
|
||||||
|
}),
|
||||||
|
SendShipPacket::CharDataRequest(CharDataRequest {}),
|
||||||
|
])
|
||||||
|
}
|
||||||
|
|
||||||
pub fn send_player_to_lobby(id: ClientId,
|
pub fn send_player_to_lobby(id: ClientId,
|
||||||
_pkt: &CharData,
|
_pkt: &CharData,
|
||||||
|
@ -136,13 +136,13 @@ impl SendServerPacket for SendShipPacket {
|
|||||||
|
|
||||||
pub struct ClientState {
|
pub struct ClientState {
|
||||||
pub user: UserAccountEntity,
|
pub user: UserAccountEntity,
|
||||||
settings: UserSettingsEntity,
|
pub settings: UserSettingsEntity,
|
||||||
pub character: CharacterEntity,
|
pub character: CharacterEntity,
|
||||||
session: Session,
|
session: Session,
|
||||||
//guildcard: GuildCard,
|
//guildcard: GuildCard,
|
||||||
inventory: items::ActiveInventory,
|
pub inventory: items::ActiveInventory,
|
||||||
//bank: Bank,
|
//bank: Bank,
|
||||||
block: u32,
|
pub block: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ClientState {
|
impl ClientState {
|
||||||
@ -183,31 +183,6 @@ impl<EG: EntityGateway> ShipServerState<EG> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn block_selected(&mut self, id: ClientId, pkt: &MenuSelect) -> Result<Vec<SendShipPacket>, ShipError> {
|
|
||||||
let client = self.clients.get_mut(&id).ok_or(ShipError::ClientNotFound(id))?;
|
|
||||||
client.block = pkt.item as u32;
|
|
||||||
|
|
||||||
let (level, stats) = self.level_table.get_stats_from_exp(client.character.char_class, client.character.exp);
|
|
||||||
|
|
||||||
let fc = FullCharacterBytesBuilder::new()
|
|
||||||
.character(&client.character)
|
|
||||||
.stats(&stats)
|
|
||||||
.level(level)
|
|
||||||
.inventory(&client.inventory)
|
|
||||||
.key_config(&client.settings.settings.key_config)
|
|
||||||
.joystick_config(&client.settings.settings.joystick_config)
|
|
||||||
.symbol_chat(&client.settings.settings.symbol_chats)
|
|
||||||
.tech_menu(&client.character.tech_menu.as_bytes())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Ok(vec![
|
|
||||||
SendShipPacket::FullCharacter(FullCharacter {
|
|
||||||
character: fc,
|
|
||||||
}),
|
|
||||||
SendShipPacket::CharDataRequest(CharDataRequest {}),
|
|
||||||
])
|
|
||||||
}
|
|
||||||
|
|
||||||
fn message(&mut self, id: ClientId, msg: &Message) -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
|
fn message(&mut self, id: ClientId, msg: &Message) -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
|
||||||
match &msg.msg {
|
match &msg.msg {
|
||||||
GameMessage::RequestExp(request_exp) => {
|
GameMessage::RequestExp(request_exp) => {
|
||||||
@ -268,7 +243,7 @@ impl<EG: EntityGateway> ServerState for ShipServerState<EG> {
|
|||||||
},
|
},
|
||||||
RecvShipPacket::MenuSelect(menuselect) => {
|
RecvShipPacket::MenuSelect(menuselect) => {
|
||||||
match menuselect.menu {
|
match menuselect.menu {
|
||||||
BLOCK_MENU_ID => Box::new(self.block_selected(id, menuselect)?.into_iter().map(move |pkt| (id, pkt))),
|
BLOCK_MENU_ID => Box::new(handler::lobby::block_selected(id, menuselect, &mut self.clients, &self.level_table)?.into_iter().map(move |pkt| (id, pkt))),
|
||||||
ROOM_MENU_ID => Box::new(handler::room::join_room(id, menuselect, &mut self.client_location, &mut self.clients, &self.level_table, &mut self.rooms)?.into_iter()),
|
ROOM_MENU_ID => Box::new(handler::room::join_room(id, menuselect, &mut self.client_location, &mut self.clients, &self.level_table, &mut self.rooms)?.into_iter()),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user