/// <summary> /// Is called whenever an object leaves this Character's sight /// </summary> public void OnOutOfRange(WorldObject obj) { obj.AreaCharCount--; if (obj is Character && m_observers != null) { if (m_observers.Remove((Character)obj)) { // Character was observing: Now destroy items for him for (var i = (InventorySlot)0; i < InventorySlot.Bag1; i++) { var item = m_inventory[i]; if (item != null) { item.SendDestroyToPlayer((Character)obj); } } } } if (obj == DuelOpponent && !Duel.IsActive) { // opponent vanished before Duel started: Cancel duel Duel.Dispose(); } if (obj == m_target) { // unset current Target ClearTarget(); } if (obj == m_activePet) { ActivePet = null; } if (GossipConversation != null && obj == GossipConversation.Speaker && GossipConversation.Character == this) { // stop conversation with a vanished object GossipConversation.Dispose(); } if (!(obj is Transport)) { KnownObjects.Remove(obj); // send the destroy packet //obj.SendDestroyToPlayer(this); } }