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); }
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; }