cleanup and fix errors. still need to get room player counts
This commit is contained in:
parent
7f95f7e793
commit
eef2178df8
@ -140,32 +140,34 @@ impl RoomState {
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
pub fn get_flags(mode: &RoomMode, password: [u16; 16]) -> u8 {
|
pub fn get_flags_for_room_list(&self) -> u8 {
|
||||||
let mut flags = 0u8;
|
let mut flags = 0u8;
|
||||||
|
|
||||||
match mode {
|
match self.mode {
|
||||||
RoomMode::Single {..} => {flags += 0x04}
|
RoomMode::Single {..} => {flags += 0x04}
|
||||||
RoomMode::Battle {..} => {flags += 0x10},
|
RoomMode::Battle {..} => {flags += 0x10},
|
||||||
RoomMode::Challenge {..} => {flags += 0x20},
|
RoomMode::Challenge {..} => {flags += 0x20},
|
||||||
_ => {flags += 0x40},
|
_ => {flags += 0x40},
|
||||||
};
|
};
|
||||||
|
|
||||||
if password[0] > 0 {
|
if self.password[0] > 0 {
|
||||||
flags += 0x02;
|
flags += 0x02;
|
||||||
}
|
}
|
||||||
flags
|
flags
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_episode(mode: &RoomMode) -> u8 {
|
pub fn get_episode_for_room_list(&self) -> u8 {
|
||||||
let mut episode = 0u8;
|
let episode: u8 = self.mode.episode().into();
|
||||||
|
|
||||||
episode = mode.episode().into();
|
match self.mode {
|
||||||
|
RoomMode::Single {..} => episode + 0x10,
|
||||||
match mode {
|
_ => episode + 0x40,
|
||||||
RoomMode::Single {..} => {episode += 0x10},
|
|
||||||
_ => {episode += 0x40},
|
|
||||||
}
|
}
|
||||||
episode
|
}
|
||||||
|
|
||||||
|
pub fn get_difficulty_for_room_list(&self) -> u8 {
|
||||||
|
let difficulty: u8 = self.mode.difficulty().into();
|
||||||
|
difficulty + 0x22
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_create_room(create_room: &libpso::packet::ship::CreateRoom) -> Result<RoomState, RoomCreationError> {
|
pub fn from_create_room(create_room: &libpso::packet::ship::CreateRoom) -> Result<RoomState, RoomCreationError> {
|
||||||
@ -203,10 +205,6 @@ impl RoomState {
|
|||||||
password: create_room.password,
|
password: create_room.password,
|
||||||
//maps: [0; 0x20],
|
//maps: [0; 0x20],
|
||||||
maps: Maps::new(room_mode.episode()),
|
maps: Maps::new(room_mode.episode()),
|
||||||
difficulty: create_room.difficulty + 0x22,
|
|
||||||
players: 0,
|
|
||||||
episode: RoomState::get_episode(&room_mode),
|
|
||||||
flags: RoomState::get_flags(&room_mode, create_room.password),
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,7 +438,7 @@ impl<EG: EntityGateway> ShipServerState<EG> {
|
|||||||
Box::new(None.into_iter())
|
Box::new(None.into_iter())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn request_room_list(&mut self, id: ClientId, request_roomlist: &RoomListRequest) -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
|
fn request_room_list(&mut self, id: ClientId) -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
|
||||||
let active_room_list = self.rooms.iter()
|
let active_room_list = self.rooms.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter_map(|(i, r)| {
|
.filter_map(|(i, r)| {
|
||||||
@ -446,19 +446,22 @@ impl<EG: EntityGateway> ShipServerState<EG> {
|
|||||||
RoomList {
|
RoomList {
|
||||||
menu_id: ROOM_MENU_ID,
|
menu_id: ROOM_MENU_ID,
|
||||||
item_id: i as u32,
|
item_id: i as u32,
|
||||||
difficulty: room.difficulty,
|
difficulty: room.get_difficulty_for_room_list(),
|
||||||
players: room.players,
|
players: 0, // TODO
|
||||||
name: libpso::utf8_to_utf16_array!(room.name, 16),
|
name: libpso::utf8_to_utf16_array!(room.name, 16),
|
||||||
episode: room.episode,
|
episode: room.get_episode_for_room_list(),
|
||||||
flags: room.flags,
|
flags: room.get_flags_for_room_list(),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
let baseroom: BaseRoom = BaseRoom {
|
let baseroom: RoomList = RoomList {
|
||||||
menu_id: ROOM_MENU_ID,
|
menu_id: ROOM_MENU_ID,
|
||||||
title_id: ROOM_MENU_ID,
|
item_id: ROOM_MENU_ID,
|
||||||
zero: 0x0000,
|
difficulty: 0x00,
|
||||||
menu_title: libpso::utf8_to_utf16_array!("Room list menu", 17),
|
players: 0x00,
|
||||||
|
name: libpso::utf8_to_utf16_array!("Room list menu", 16),
|
||||||
|
episode: 0,
|
||||||
|
flags: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
Box::new(vec![(id, SendShipPacket::RoomListResponse(RoomListResponse {
|
Box::new(vec![(id, SendShipPacket::RoomListResponse(RoomListResponse {
|
||||||
@ -530,8 +533,8 @@ impl<EG: EntityGateway> ServerState for ShipServerState<EG> {
|
|||||||
self.write_infoboard(id, pkt)
|
self.write_infoboard(id, pkt)
|
||||||
},
|
},
|
||||||
|
|
||||||
RecvShipPacket::RoomListRequest(pkt) => {
|
RecvShipPacket::RoomListRequest(_req) => {
|
||||||
self.request_room_list(id, pkt)
|
self.request_room_list(id)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user