Merge branch 'zesterer/fix-pet-panic' into 'master'

Fixed potential panic when adding dead pet

See merge request veloren/veloren!4141
This commit is contained in:
Joshua Barretto
2023-10-16 10:30:35 +00:00

View File

@ -264,27 +264,35 @@ impl GroupManager {
uids: &Uids, uids: &Uids,
notifier: &mut impl FnMut(specs::Entity, ChangeNotification<specs::Entity>), notifier: &mut impl FnMut(specs::Entity, ChangeNotification<specs::Entity>),
) { ) {
let group = match groups.get(owner).copied() { if !entities.is_alive(owner) {
Some(group) => group, warn!("Tried to create new pet for non-existent owner {owner:?}");
None => { } else if !entities.is_alive(pet) {
let new_group = self.create_group(owner, 1); warn!("Tried to create new pet for non-existent pet {pet:?}");
groups.insert(owner, new_group).unwrap(); } else {
// Inform let group = match groups.get(owner).copied() {
notifier(owner, ChangeNotification::NewLeader(owner)); Some(group) => group,
new_group None => {
}, let new_group = self.create_group(owner, 1);
}; // Unwrap can't fail, we checked that `owner` is alive above
groups.insert(owner, new_group).unwrap();
// Inform
notifier(owner, ChangeNotification::NewLeader(owner));
new_group
},
};
// Inform // Inform
members(group, &*groups, entities, alignments, uids).for_each(|(e, role)| match role { members(group, &*groups, entities, alignments, uids).for_each(|(e, role)| match role {
Role::Member => { Role::Member => {
notifier(e, ChangeNotification::Added(pet, Role::Pet)); notifier(e, ChangeNotification::Added(pet, Role::Pet));
}, },
Role::Pet => {}, Role::Pet => {},
}); });
// Add // Add
groups.insert(pet, group).unwrap(); // Unwrap can't fail, we checked that `pet` is alive above
groups.insert(pet, group).unwrap();
}
} }
pub fn leave_group( pub fn leave_group(