Fix chat messages

This commit is contained in:
illegitimate-egg 2025-02-25 20:54:42 +00:00
parent 91d321e012
commit de1fcc1035
2 changed files with 21 additions and 14 deletions

View File

@ -3,6 +3,6 @@ McRizzleDrizzle
mæk ˈrrɪzᵊl ˈdrɪzᵊl mæk ˈrrɪzᵊl ˈdrɪzᵊl
TODO: TODO:
- Fix error on disconnect - [x] ~~Fix error on disconnect~~
- Command support - [ ] Command support
- classicube extensions - [ ] classicube extensions

View File

@ -115,7 +115,9 @@ fn handle_client(
loop { loop {
let mut buffer = [0; 1]; let mut buffer = [0; 1];
let _ = stream.read(&mut buffer); if stream.read(&mut buffer).unwrap() == 0 {
break;
}
match buffer[0] { match buffer[0] {
0x00 => { 0x00 => {
@ -125,9 +127,9 @@ fn handle_client(
if payload_buffer[0] != 7 { if payload_buffer[0] != 7 {
// Shit pant // Shit pant
let _ = &mut stream.write(&client_disconnect( let _ = &mut stream.write(&client_disconnect(
"Something went wrong (CODE: PACKET_SKIPPED)", "Something went wrong (Type 0x00 expected ver 7, something else was received, contact server admin)",
)); ));
warn!("Something went wrong, packet 0x00 received but second byte was not 7"); warn!("Something went wrong, packet 0x00 received but second byte was not 0x07: received {:#04X} instead.", payload_buffer[0]);
break; break;
} }
@ -275,13 +277,15 @@ fn handle_client(
} }
let mut players = players_arc_clone.lock().unwrap(); let mut players = players_arc_clone.lock().unwrap();
let sender: u8 = players[client_number as usize].id;
let sender_name: String = players[client_number as usize].username.clone();
for i in 0..players.len() { for i in 0..players.len() {
if players[i].id != 255 && players[i].id != client_number { if players[i].id != 255 && players[i].id != client_number {
let sender: u8 = players[client_number as usize].id;
players[i] players[i]
.outgoing_data .outgoing_data
.extend_from_slice(&send_chat_message( .extend_from_slice(&send_chat_message(
sender, sender,
sender_name.clone(),
String::from_iter(message), String::from_iter(message),
)); ));
} }
@ -289,9 +293,10 @@ fn handle_client(
let _ = &mut stream.write(&send_chat_message( let _ = &mut stream.write(&send_chat_message(
SpecialPlayers::SelfPlayer as u8, SpecialPlayers::SelfPlayer as u8,
sender_name.clone(),
String::from_iter(message), String::from_iter(message),
)); ));
info!("{}", String::from_iter(message)); info!("[{}]: {}", sender_name, String::from_iter(message));
} }
_ => warn!("Packet {} not implemented!", buffer[0]), _ => warn!("Packet {} not implemented!", buffer[0]),
} }
@ -323,6 +328,7 @@ fn handle_client(
player_statuses[i] = PlayerStatus::Connected; player_statuses[i] = PlayerStatus::Connected;
let _ = stream.write(&send_chat_message( let _ = stream.write(&send_chat_message(
players[i].id, players[i].id,
"".to_string(),
format!("{} has joined the game!", &players[i].username), format!("{} has joined the game!", &players[i].username),
)); ));
} }
@ -331,6 +337,7 @@ fn handle_client(
let _ = stream.write(&despawn_player(i.try_into().unwrap())); let _ = stream.write(&despawn_player(i.try_into().unwrap()));
let _ = stream.write(&send_chat_message( let _ = stream.write(&send_chat_message(
i.try_into().unwrap(), i.try_into().unwrap(),
"".to_string(),
format!("{} has left the game!", &players[i].username), format!("{} has left the game!", &players[i].username),
)); ));
player_statuses[i] = PlayerStatus::Disconnected; player_statuses[i] = PlayerStatus::Disconnected;
@ -453,10 +460,13 @@ fn despawn_player(player_id: u8) -> Vec<u8> {
return [0x0C, player_id].to_vec(); return [0x0C, player_id].to_vec();
} }
fn send_chat_message(source_id: u8, message: String) -> Vec<u8> { fn send_chat_message(source_id: u8, mut source_username: String, mut message: String) -> Vec<u8> {
let mut ret_val: Vec<u8> = vec![]; let mut ret_val: Vec<u8> = vec![];
ret_val.push(0x0D); ret_val.push(0x0D);
source_username.push_str(": ");
message.insert_str(0, &source_username);
ret_val.push(source_id); ret_val.push(source_id);
ret_val.append(&mut to_mc_string(&message).to_vec()); ret_val.append(&mut to_mc_string(&message).to_vec());
@ -619,19 +629,16 @@ fn bomb_server_details(
world_arc_clone: &Arc<Mutex<World>>, world_arc_clone: &Arc<Mutex<World>>,
) { ) {
let mut compound_data: Vec<u8> = vec![]; let mut compound_data: Vec<u8> = vec![];
info!("Server IDENT");
compound_data.append(&mut server_identification(current_player.operator)); compound_data.append(&mut server_identification(current_player.operator));
info!("Intialize level");
compound_data.append(&mut init_level()); compound_data.append(&mut init_level());
info!("Send level data"); // info!("Send level data");
compound_data.append(&mut send_level_data(&world_arc_clone)); // Approaching Nirvana - Maw of the beast compound_data.append(&mut send_level_data(&world_arc_clone)); // Approaching Nirvana - Maw of the beast
info!("Finalize level");
compound_data.append(&mut finalize_level(&world_arc_clone)); compound_data.append(&mut finalize_level(&world_arc_clone));
info!("Spawning player"); info!("Spawning player: {}", &current_player.username);
compound_data.append(&mut spawn_player( compound_data.append(&mut spawn_player(
SpecialPlayers::SelfPlayer as u8, SpecialPlayers::SelfPlayer as u8,
&current_player.username, &current_player.username,