Beispiel #1
0
        public virtual List <L2Player> GetKnownPlayers(bool excludeSelf = true)
        {
            L2WorldRegion region = Region;

            if (region == null)
            {
                return(new List <L2Player>());
            }

            List <L2Player> result = new List <L2Player>();

            if (excludeSelf)
            {
                region.GetSurroundingRegions().ForEach(reg => result.AddRange(L2World.Instance.GetPlayers().Where(obj => obj != this)));
            }
            else
            {
                region.GetSurroundingRegions().ForEach(reg => result.AddRange(L2World.Instance.GetPlayers()));
            }
            return(result);
        }
Beispiel #2
0
        public virtual void SetRegion(L2WorldRegion newRegion)
        {
            List <L2WorldRegion> oldAreas = new List <L2WorldRegion>();

            if (Region != null)
            {
                Region.RemoveVisibleObject(this);
                oldAreas = Region.GetSurroundingRegions();
            }

            List <L2WorldRegion> newAreas = new List <L2WorldRegion>();

            if (newRegion != null)
            {
                newRegion.AddVisibleObject(this);
                newAreas = newRegion.GetSurroundingRegions();
            }

            foreach (L2WorldRegion region in oldAreas.Where(region => !newAreas.Contains(region)))
            {
                foreach (L2Object obj in region.GetObjects().Where(obj => obj != this))
                {
                    obj.RemoveKnownObject(this);
                    RemoveKnownObject(obj);
                }

                if (this is L2Player && region.IsEmptyNeighborhood())
                {
                    region.SetActive(false);
                }
            }

            foreach (L2WorldRegion region in newAreas.Where(region => !oldAreas.Contains(region)))
            {
                // Update all objects.
                foreach (L2Object obj in region.GetObjects().Where(obj => obj != this))
                {
                    obj.AddKnownObject(this);
                    AddKnownObject(obj);
                }

                // Activate the new neighbor region.
                if (this is L2Player)
                {
                    region.SetActive(true);
                }
            }

            Region = newRegion;
        }