public virtual void RemoveCreature(Creature creature)
{
_creaturesRWLS.EnterWriteLock();
try
{
_creatures.Remove(creature.EntityId);
}
finally
{
_creaturesRWLS.ExitWriteLock();
}
// TODO: Technically not required? Handled by LookAround.
Send.EntityDisappears(creature);
if (creature.IsPlayer)
{
ChannelServer.Instance.Events.OnPlayerLeavesRegion(creature);
this.PlayerLeaves.Raise(creature);
}
// Update visible entities before leaving the region, so the client
// gets and up-to-date list.
var playerCreature = creature as PlayerCreature;
if (playerCreature != null)
playerCreature.LookAround();
creature.Region = Region.Limbo;
if (creature.Client.Controlling == creature)
lock (_clients)
_clients.Remove(creature.Client);
}