diff --git a/server/src/events/interaction.rs b/server/src/events/interaction.rs index 44aa88feaa..b6862f7130 100755 --- a/server/src/events/interaction.rs +++ b/server/src/events/interaction.rs @@ -132,7 +132,13 @@ pub fn handle_mount(server: &mut Server, rider: EcsEntity, mount: EcsEntity) { is_mountable(mount_body, state.ecs().read_storage().get(rider)) }); - if (is_pet_of(mount, rider_uid) || is_pet_of(rider, mount_uid)) && can_ride { + let is_stay = state + .ecs() + .read_storage::() + .get(mount) + .and_then(|x| x.stay_pos).is_some(); + + if (is_pet_of(mount, rider_uid) || is_pet_of(rider, mount_uid)) && can_ride && !is_stay { drop(uids); let _ = state.link(Mounting { mount: mount_uid, diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index e19ecb34c9..b44a3d266d 100755 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -2426,23 +2426,23 @@ impl Hud { )); if !client.is_riding() && is_mountable(body, bodies.get(client.entity())) + && pet_state.get(entity).and_then(|st| st.stay_pos).is_none() { options.push(( GameInput::Mount, i18n.get_msg("hud-mount").to_string(), )); } - let pet_stay = - pet_state.get(entity).and_then(|st| st.stay_pos).is_some(); - match pet_stay { - false => options.push(( - GameInput::StayFollow, - i18n.get_msg("hud-stay").to_string(), - )), - true => options.push(( + if pet_state.get(entity).and_then(|st| st.stay_pos).is_some() { + options.push(( GameInput::StayFollow, i18n.get_msg("hud-follow").to_string(), - )), + )); + } else { + options.push(( + GameInput::StayFollow, + i18n.get_msg("hud-stay").to_string(), + )); } } options diff --git a/voxygen/src/session/mod.rs b/voxygen/src/session/mod.rs index 71cdc9074b..2a0f656c51 100644 --- a/voxygen/src/session/mod.rs +++ b/voxygen/src/session/mod.rs @@ -949,17 +949,14 @@ impl PlayState for SessionState { let mut close_pet = None; if let Some(player_pos) = player_pos { - let alignment = - client.state().ecs().read_storage::(); - let spatial_grid = - client.state().ecs().read_resource::(); - close_pet = spatial_grid.0 + close_pet = client.state().ecs().read_resource::().0 .in_circle_aabr(player_pos.0.xy(), MAX_MOUNT_RANGE) .filter(|e| *e != client.entity() ) .filter(|e| - matches!(alignment.get(*e), Some(comp::Alignment::Owned(owner)) if Some(*owner) == client.uid()) + matches!(client.state().ecs().read_storage::().get(*e), + Some(comp::Alignment::Owned(owner)) if Some(*owner) == client.uid()) ) .min_by_key(|e| { OrderedFloat(client