fix: infinite loop in Zone:randomPosition when no valid tile exist #3178
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This commit fixes an infinite loop issue in the
Zone:randomPosition
function. When no valid positions (walkable tiles) exist in the zone, the function would previously enter an infinite loop. The updated logic now filters all positions upfront to identify walkable tiles, and if none are found, the function returnsnil
with appropriate logging. This change ensures better error handling and prevents server freezes due to infinite loops.Behaviour
Actual
Calling
Zone:randomPosition
on a zone with no valid walkable positions causes an infinite loop, leading to a server hang.Expected
Calling
Zone:randomPosition
on a zone with no valid walkable positions returnsnil
without entering an infinite loop, and logs the issue for debugging.Type of change
How Has This Been Tested
The changes were tested by creating zones with:
Test cases:
nil
and logs an error.nil
and logs an error.Checklist