mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
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:
@ -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(
|
||||||
|
Reference in New Issue
Block a user