mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'xvar/fix-character-switch-persistence' into 'master'
Fixed character data not being persisted on character switch See merge request veloren/veloren!1515
This commit is contained in:
commit
2c2e4813fd
@ -8,6 +8,7 @@ use common::{
|
|||||||
comp::{group, Player},
|
comp::{group, Player},
|
||||||
msg::{PlayerListUpdate, PresenceKind, ServerGeneral},
|
msg::{PlayerListUpdate, PresenceKind, ServerGeneral},
|
||||||
span,
|
span,
|
||||||
|
state::State,
|
||||||
sync::{Uid, UidAllocator},
|
sync::{Uid, UidAllocator},
|
||||||
};
|
};
|
||||||
use futures_executor::block_on;
|
use futures_executor::block_on;
|
||||||
@ -82,6 +83,10 @@ pub fn handle_exit_ingame(server: &mut Server, entity: EcsEntity) {
|
|||||||
}
|
}
|
||||||
// Erase group component to avoid group restructure when deleting the entity
|
// Erase group component to avoid group restructure when deleting the entity
|
||||||
state.ecs().write_storage::<group::Group>().remove(entity);
|
state.ecs().write_storage::<group::Group>().remove(entity);
|
||||||
|
|
||||||
|
// Sync the player's character data to the database
|
||||||
|
let entity = persist_entity(state, entity);
|
||||||
|
|
||||||
// Delete old entity
|
// Delete old entity
|
||||||
if let Err(e) = state.delete_entity_recorded(entity) {
|
if let Err(e) = state.delete_entity_recorded(entity) {
|
||||||
error!(
|
error!(
|
||||||
@ -146,6 +151,17 @@ pub fn handle_client_disconnect(server: &mut Server, entity: EcsEntity) -> Event
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sync the player's character data to the database
|
// Sync the player's character data to the database
|
||||||
|
let entity = persist_entity(state, entity);
|
||||||
|
|
||||||
|
// Delete client entity
|
||||||
|
if let Err(e) = state.delete_entity_recorded(entity) {
|
||||||
|
error!(?e, ?entity, "Failed to delete disconnected client");
|
||||||
|
}
|
||||||
|
|
||||||
|
Event::ClientDisconnected { entity }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn persist_entity(state: &mut State, entity: EcsEntity) -> EcsEntity {
|
||||||
if let (Some(presences), Some(stats), Some(inventory), Some(loadout), updater) = (
|
if let (Some(presences), Some(stats), Some(inventory), Some(loadout), updater) = (
|
||||||
state.read_storage::<Presence>().get(entity),
|
state.read_storage::<Presence>().get(entity),
|
||||||
state.read_storage::<comp::Stats>().get(entity),
|
state.read_storage::<comp::Stats>().get(entity),
|
||||||
@ -162,10 +178,5 @@ pub fn handle_client_disconnect(server: &mut Server, entity: EcsEntity) -> Event
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete client entity
|
entity
|
||||||
if let Err(e) = state.delete_entity_recorded(entity) {
|
|
||||||
error!(?e, ?entity, "Failed to delete disconnected client");
|
|
||||||
}
|
|
||||||
|
|
||||||
Event::ClientDisconnected { entity }
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user