* Logging a warning when deleting the entity and it is not in any
Region.
* Searching every single region for an entity that is in none of them.
Also:
* Add workaround for bug in specs where deleting any entity clears the
components before checking that the generation is correct (surprised
that we haven't encounted bugs from this yet).
* Properly update `tracked_entities` inside `RegionMap` when deleting
an entity. Previously, we just relied on this being updated in
`RegionMap::tick` by the absence of the `Pos` component at that index.
However, this means if a new entity is created at that index after
deletion and before calling `RegionMap::tick`, then this can be
interpreted as an entity moving between regions rather than one being
deleted and another created. It seems like this could lead to
synchronization bugs like not creating the new entity on the client
(although I haven't noticed this before, I think maybe we use newly
inserted `Uid`s to detect new entities rather than the region system?).
I think it could at least lead to sending redundant messages to
synchronize the new entity.
return to the character screeen. And other related improvements.
* Uid now optional when removing an entity from IdMaps since that Uid
may have been transferred to the new entity created when the client
exits "in-game".
* Added notes about making sure to update the CharacterId mapping when
changing the `kind` field of `Presence`.
* Add a parameter to `delete_entity_recorded` that indicates whether it
is being called from `handle_exit_ingame` and that provides the `Uid`
that was removed from the entity so that we can more explicitly and
correctly handle that case.
* We now add the Uid of the client to the deleted entities list when it
exits "ingame". (still need to rework code so that the client doesn't
delete its own entity).
* Improved integration of possession code with ForceUpdate logic.
* Don't remove `Presence` component from old entity in possession so
that deleting that entity will properly handle updating the
CharacterId unmapping (if the old entity isn't going to be deleted we
still remove the `Presence` component so that it doesn't keep terrain
loaded).
* Added a couple TODOs on existing tangential things I noticed.
types.
* Add new `IdMaps` type that contains mappings to Entity from Uid, CharacterId, and
RtsimEntity.
* Add PresenceKind::LoadingCharacter variant for when the CharacterId
has not actually been confirmed to exist and belong to the logged in
client. Switches to the regular PresenceKind::Character once the
character is loaded from the database and that is used to update the
entity.
* Start refactoring `delete_entity_recorded` to check for CharacterId
and RtsimEntity values that may need to be removed from the map (just
very start, not near complete).
* Other misc tweaks.
* Pets now teleport to their owner when they are too far away from them
* Limited the animals that can be tamed to `QuadrupedLow` and `QuadrupedSmall` to prevent players taming overly powerful creatures before the pet feature is further developed
* Added `Pet` component used to store pet information about an entity - currently only used to store the pet's database ID
* Added `pet` database table which stores a pet's `body_id` and `name`, alongside the `character_id` that it belongs to
* Replaced `HomeChunk` component with more flexible `Anchor` component which supports anchoring entities to other entities as well as chunks.
* Added "migration of migrations" to transfer the data from the __diesel_schema_migrations table to the refinery_schema_history table
* Removed all down migrations as refinery does not support down migrations
* Changed all diesel up migrations to refinery naming format
* Added --sql-log-mode parameter to veloren-server-cli to allow SQL tracing and profiling
* Added /disconnect_all_players admin command
* Added disconnectall CLI command
* Fixes for several potential persistence-related race conditions
- now last digit version is compatible 0.6.0 will connect to 0.6.1
- the TCP DATA Frames no longer contain START field, as it's not needed
- the TCP OPENSTREAM Frames will now contain the BANDWIDTH field
- MID is not Protocol internal
Update network
- update API with Bandwidth
Update veloren
- introduce better runtime and `async` things that are IO bound.
- Remove `uvth` and instead use `tokio::runtime::Runtime::spawn_blocking`
- remove futures_execute from client and server use tokio::runtime::Runtime instead
- give threads a Name
In order to keep the performance we made it Internal Mutability and use a `Mutex` per Stream, till `Stream.send` is no longer `&mut self`.
The old solution didn't rely on this, but needed multiple Components instead which zest didn't liked