Beispiel #1
0
        /// <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);
            }
        }