show dialog when trying to join room with a bursting player
This commit is contained in:
		
							parent
							
								
									c208443d97
								
							
						
					
					
						commit
						28b7d89b42
					
				| @ -129,6 +129,7 @@ pub struct RoomState { | |||||||
|     pub drop_table: Box<DropTable<rand_chacha::ChaCha20Rng>>, |     pub drop_table: Box<DropTable<rand_chacha::ChaCha20Rng>>, | ||||||
|     pub section_id: SectionID, |     pub section_id: SectionID, | ||||||
|     pub random_seed: u32, |     pub random_seed: u32, | ||||||
|  |     pub bursting: bool, | ||||||
|     // items on ground
 |     // items on ground
 | ||||||
|     // enemy info
 |     // enemy info
 | ||||||
| } | } | ||||||
| @ -207,6 +208,7 @@ impl RoomState { | |||||||
|             maps: Maps::new(room_mode.episode()), |             maps: Maps::new(room_mode.episode()), | ||||||
|             section_id: section_id, |             section_id: section_id, | ||||||
|             drop_table: Box::new(DropTable::new(room_mode.episode(), room_mode.difficulty(), section_id)), |             drop_table: Box::new(DropTable::new(room_mode.episode(), room_mode.difficulty(), section_id)), | ||||||
|  |             bursting: false, | ||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -236,6 +236,9 @@ impl<EG: EntityGateway> ShipServerState<EG> { | |||||||
|         let room = self.rooms.get(pkt.item as usize) |         let room = self.rooms.get(pkt.item as usize) | ||||||
|             .ok_or_else(|| ShipError::InvalidRoom(pkt.item))?.as_ref() |             .ok_or_else(|| ShipError::InvalidRoom(pkt.item))?.as_ref() | ||||||
|             .ok_or_else(|| ShipError::InvalidRoom(pkt.item))?; |             .ok_or_else(|| ShipError::InvalidRoom(pkt.item))?; | ||||||
|  |         if room.bursting { | ||||||
|  |             return Ok(vec![(id, SendShipPacket::SmallDialog(SmallDialog::new("player is bursting\nplease wait".into())))]) | ||||||
|  |         } | ||||||
|         let room_id = RoomId(pkt.item as usize); |         let room_id = RoomId(pkt.item as usize); | ||||||
|         let original_room_clients = self.client_location.get_clients_in_room(room_id).map_err(|err| ShipError::ClientError(format!("{:?}", err)))?; |         let original_room_clients = self.client_location.get_clients_in_room(room_id).map_err(|err| ShipError::ClientError(format!("{:?}", err)))?; | ||||||
|         self.client_location.add_client_to_room(id, room_id).unwrap(); // TODO: show room full error or whatever
 |         self.client_location.add_client_to_room(id, room_id).unwrap(); // TODO: show room full error or whatever
 | ||||||
| @ -320,6 +323,8 @@ impl<EG: EntityGateway> ShipServerState<EG> { | |||||||
|                   .map(|c| (c.client, SendShipPacket::AddToRoom(add_to.clone()))) |                   .map(|c| (c.client, SendShipPacket::AddToRoom(add_to.clone()))) | ||||||
|            ); |            ); | ||||||
| 
 | 
 | ||||||
|  |         let room = self.rooms.get_mut(room_id.0).unwrap().as_mut().unwrap(); | ||||||
|  |         room.bursting = true; | ||||||
|         if let Ok(leader) = self.client_location.get_area_leader(original_area) { |         if let Ok(leader) = self.client_location.get_area_leader(original_area) { | ||||||
|             let leave_lobby = SendShipPacket::LeaveLobby(LeaveLobby::new(area_client.local_client.id(), leader.local_client.id())); |             let leave_lobby = SendShipPacket::LeaveLobby(LeaveLobby::new(area_client.local_client.id(), leader.local_client.id())); | ||||||
|             Ok(result.chain(original_neighbors.into_iter() |             Ok(result.chain(original_neighbors.into_iter() | ||||||
| @ -419,6 +424,11 @@ impl<EG: EntityGateway> ShipServerState<EG> { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn done_bursting(&mut self, id: ClientId) -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> { |     fn done_bursting(&mut self, id: ClientId) -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> { | ||||||
|  |         let area = self.client_location.get_area(id).unwrap(); | ||||||
|  |         if let RoomLobby::Room(room_id) = area { | ||||||
|  |             let room = self.rooms.get_mut(room_id.0).unwrap().as_mut().unwrap(); | ||||||
|  |             room.bursting = false; | ||||||
|  |         } | ||||||
|         Box::new(self.client_location.get_client_neighbors(id).unwrap().into_iter() |         Box::new(self.client_location.get_client_neighbors(id).unwrap().into_iter() | ||||||
|                  .map(move |client| { |                  .map(move |client| { | ||||||
|                      vec![ |                      vec![ | ||||||
| @ -525,7 +535,8 @@ impl<EG: EntityGateway> ShipServerState<EG> { | |||||||
|         let room_id = self.client_location.create_new_room(id).unwrap(); |         let room_id = self.client_location.create_new_room(id).unwrap(); | ||||||
| 
 | 
 | ||||||
|         let client = self.clients.get_mut(&id).unwrap();//.ok_or(ShipError::ClientNotFound(id)).unwrap();
 |         let client = self.clients.get_mut(&id).unwrap();//.ok_or(ShipError::ClientNotFound(id)).unwrap();
 | ||||||
|         let room = room::RoomState::from_create_room(create_room, client.character.section_id).unwrap(); |         let mut room = room::RoomState::from_create_room(create_room, client.character.section_id).unwrap(); | ||||||
|  |         room.bursting = true; | ||||||
| 
 | 
 | ||||||
|         let players = [PlayerHeader { |         let players = [PlayerHeader { | ||||||
|             tag: 0x10000, |             tag: 0x10000, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user