diff --git a/Source/ACE.Server/Entity/LandblockGroup.cs b/Source/ACE.Server/Entity/LandblockGroup.cs index 5adf2c723c..a1adb70c54 100644 --- a/Source/ACE.Server/Entity/LandblockGroup.cs +++ b/Source/ACE.Server/Entity/LandblockGroup.cs @@ -201,7 +201,7 @@ private LandblockGroup DoTrySplit() for (int i = remainingLandblocks.Count - 1; i >= 0; i--) { - if (landblockGroupSplitHelper.BoundaryDistance(remainingLandblocks[i]) < LandblockGroupMinSpacing) + if (landblockGroupSplitHelper.ClosestLandblock(remainingLandblocks[i]) < LandblockGroupMinSpacing) { landblockGroupSplitHelper.Add(remainingLandblocks[i]); remainingLandblocks.RemoveAt(i); @@ -283,6 +283,23 @@ public List TryThrottledSplit() } + public int ClosestLandblock(Landblock landblock) + { + int closest = int.MaxValue; + + foreach (var value in landblocks) + { + var distance = Math.Max( + Math.Abs(value.Id.LandblockX - landblock.Id.LandblockX), + Math.Abs(value.Id.LandblockY - landblock.Id.LandblockY)); + + if (distance < closest) + closest = distance; + } + + return closest; + } + /// /// This will calculate the distance from the landblock group boarder. /// -X = Inside the bounds, where -1 is the outer perimeter diff --git a/Source/ACE.Server/Entity/LandblockGroupSplitHelper.cs b/Source/ACE.Server/Entity/LandblockGroupSplitHelper.cs index 31b17425c8..baba1dd6e5 100644 --- a/Source/ACE.Server/Entity/LandblockGroupSplitHelper.cs +++ b/Source/ACE.Server/Entity/LandblockGroupSplitHelper.cs @@ -49,6 +49,23 @@ IEnumerator IEnumerable.GetEnumerator() } + public int ClosestLandblock(Landblock landblock) + { + int closest = int.MaxValue; + + foreach (var value in landblocks) + { + var distance = Math.Max( + Math.Abs(value.Id.LandblockX - landblock.Id.LandblockX), + Math.Abs(value.Id.LandblockY - landblock.Id.LandblockY)); + + if (distance < closest) + closest = distance; + } + + return closest; + } + /// /// This will calculate the distance from the landblock group boarder. /// -X = Inside the bounds, where -1 is the outer perimeter diff --git a/Source/ACE.Server/Managers/LandblockManager.cs b/Source/ACE.Server/Managers/LandblockManager.cs index 9d913a0f01..c244d37590 100644 --- a/Source/ACE.Server/Managers/LandblockManager.cs +++ b/Source/ACE.Server/Managers/LandblockManager.cs @@ -200,7 +200,7 @@ private static void ProcessPendingLandblockGroupAdditions() if (landblockGroups[j].IsDungeon) continue; - var distance = landblockGroups[j].BoundaryDistance(landblockGroupPendingAdditions[i]); + var distance = landblockGroups[j].ClosestLandblock(landblockGroupPendingAdditions[i]); if (distance < LandblockGroup.LandblockGroupMinSpacing) landblockGroupsIndexMatchesByDistance.Add(j);