initial room creation logic
This commit is contained in:
		
							parent
							
								
									c2ceb034d8
								
							
						
					
					
						commit
						3fd89664d7
					
				| @ -1,3 +1,4 @@ | |||||||
| pub mod ship; | pub mod ship; | ||||||
| pub mod location; | pub mod location; | ||||||
| pub mod character; | pub mod character; | ||||||
|  | pub mod room; | ||||||
|  | |||||||
| @ -21,6 +21,7 @@ use crate::entity::item::ItemLocation; | |||||||
| use crate::login::login::get_login_status; | use crate::login::login::get_login_status; | ||||||
| use crate::ship::location::{ClientLocation, LobbyId, RoomId}; | use crate::ship::location::{ClientLocation, LobbyId, RoomId}; | ||||||
| use crate::ship::character::{CharacterBuilder, FullCharacterBuilder}; | use crate::ship::character::{CharacterBuilder, FullCharacterBuilder}; | ||||||
|  | use crate::ship::room; | ||||||
| 
 | 
 | ||||||
| pub const SHIP_PORT: u16 = 23423; | pub const SHIP_PORT: u16 = 23423; | ||||||
| 
 | 
 | ||||||
| @ -39,6 +40,7 @@ pub enum RecvShipPacket { | |||||||
|     Message(Message), |     Message(Message), | ||||||
|     DirectMessage(DirectMessage), |     DirectMessage(DirectMessage), | ||||||
|     PlayerChat(PlayerChat), |     PlayerChat(PlayerChat), | ||||||
|  |     CreateRoom(CreateRoom), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl RecvServerPacket for RecvShipPacket { | impl RecvServerPacket for RecvShipPacket { | ||||||
| @ -50,6 +52,7 @@ impl RecvServerPacket for RecvShipPacket { | |||||||
|             0x60 => Ok(RecvShipPacket::Message(Message::from_bytes(data)?)), |             0x60 => Ok(RecvShipPacket::Message(Message::from_bytes(data)?)), | ||||||
|             0x62 => Ok(RecvShipPacket::DirectMessage(DirectMessage::from_bytes(data)?)), |             0x62 => Ok(RecvShipPacket::DirectMessage(DirectMessage::from_bytes(data)?)), | ||||||
|             0x06 => Ok(RecvShipPacket::PlayerChat(PlayerChat::from_bytes(data)?)), |             0x06 => Ok(RecvShipPacket::PlayerChat(PlayerChat::from_bytes(data)?)), | ||||||
|  |             0xC1 => Ok(RecvShipPacket::CreateRoom(CreateRoom::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())) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -67,6 +70,9 @@ pub enum SendShipPacket { | |||||||
|     Message(Message), |     Message(Message), | ||||||
|     DirectMessage(DirectMessage), |     DirectMessage(DirectMessage), | ||||||
|     PlayerChat(PlayerChat), |     PlayerChat(PlayerChat), | ||||||
|  |     SmallDialog(SmallDialog), | ||||||
|  |     JoinRoom(JoinRoom), | ||||||
|  |     AddToRoom(AddToRoom), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl SendServerPacket for SendShipPacket { | impl SendServerPacket for SendShipPacket { | ||||||
| @ -82,6 +88,9 @@ impl SendServerPacket for SendShipPacket { | |||||||
|             SendShipPacket::Message(pkt) => pkt.as_bytes(), |             SendShipPacket::Message(pkt) => pkt.as_bytes(), | ||||||
|             SendShipPacket::DirectMessage(pkt) => pkt.as_bytes(), |             SendShipPacket::DirectMessage(pkt) => pkt.as_bytes(), | ||||||
|             SendShipPacket::PlayerChat(pkt) => pkt.as_bytes(), |             SendShipPacket::PlayerChat(pkt) => pkt.as_bytes(), | ||||||
|  |             SendShipPacket::SmallDialog(pkt) => pkt.as_bytes(), | ||||||
|  |             SendShipPacket::JoinRoom(pkt) => pkt.as_bytes(), | ||||||
|  |             SendShipPacket::AddToRoom(pkt) => pkt.as_bytes(), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -325,6 +334,47 @@ impl<EG: EntityGateway> ShipServerState<EG> { | |||||||
|                     (client.client_id, SendShipPacket::PlayerChat(cmsg.clone())) |                     (client.client_id, SendShipPacket::PlayerChat(cmsg.clone())) | ||||||
|                 }).collect::<Vec<_>>().into_iter())) |                 }).collect::<Vec<_>>().into_iter())) | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     fn create_room(&mut self, id: ClientId, create_room: &CreateRoom) -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)>> { | ||||||
|  |         let room_id = match self.client_location.new_room(id) { | ||||||
|  |             Ok(room_id) => room_id, | ||||||
|  |             Err(e) => return Box::new(vec![(id, SendShipPacket::SmallDialog(SmallDialog::new("could not create room".to_owned())))].into_iter()) | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         let room = room::RoomState::from_create_room(create_room).unwrap(); | ||||||
|  | 
 | ||||||
|  |         let client = self.clients.get_mut(&id).unwrap();//.ok_or(ShipError::ClientNotFound(id)).unwrap();
 | ||||||
|  |         let players = [PlayerHeader { | ||||||
|  |             tag: 0x00010000, | ||||||
|  |             guildcard: client.user.id, | ||||||
|  |             _unknown1: [0; 5], | ||||||
|  |             client_id: 0, | ||||||
|  |             name: client.character.character.name, | ||||||
|  |             _unknown2: 2, | ||||||
|  |         }, PlayerHeader::default(), PlayerHeader::default(), PlayerHeader::default()]; | ||||||
|  | 
 | ||||||
|  |         let join_room = JoinRoom { | ||||||
|  |             flag: 1, | ||||||
|  |             maps: room.maps, | ||||||
|  |             players: players, | ||||||
|  |             client_id: 0, | ||||||
|  |             leader_id: 0, | ||||||
|  |             one: 1, | ||||||
|  |             difficulty: create_room.difficulty, | ||||||
|  |             battle: create_room.battle, | ||||||
|  |             event: 0, | ||||||
|  |             section: 0, // TODO
 | ||||||
|  |             challenge: create_room.challenge, | ||||||
|  |             random_seed: 23, // TODO
 | ||||||
|  |             episode: create_room.episode, | ||||||
|  |             one2: 1, | ||||||
|  |             single_player: create_room.single_player, | ||||||
|  |             unknown: 0, | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         Box::new(vec![(id, SendShipPacket::JoinRoom(join_room))].into_iter()) | ||||||
|  |         //self.rooms.insert(room_id, room);
 | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -372,6 +422,9 @@ impl<EG: EntityGateway> ServerState for ShipServerState<EG> { | |||||||
|             RecvShipPacket::PlayerChat(msg) => { |             RecvShipPacket::PlayerChat(msg) => { | ||||||
|                 Box::new(self.player_chat(id, msg)?.into_iter()) |                 Box::new(self.player_chat(id, msg)?.into_iter()) | ||||||
|             }, |             }, | ||||||
|  |             RecvShipPacket::CreateRoom(create_room) => { | ||||||
|  |                 self.create_room(id, create_room) | ||||||
|  |             } | ||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user