[WIP] Fixed "Auto-sort infinite loop/game hang #29573" #32876
Closed
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.
Summary
SUMMARY: Bugfixes "Auto-sort infinite loop/game hang #29573"
Purpose of change
Fixes #29573
Describe the solution
The sorting loop was still reproducible even after this fix "Zone Sorting Loop #31895".
I have tried to rewrite
activity_on_turn_move_loot
with the idea of different sorting stages:Note that this algorithm relies completely on the activity instance and does not require any cache from
zone_manager
.So in theory now it could be safely applied to multiple NPC & player in parallel.
TODO:
Help would be really appreciated here, thanks.
Describe alternatives you've considered
I have tried to keep the original code intact as much as possible. But it would probably be better to use separate activities instead of stages for the same activity?
Additional context
It will still halt if NPC is blocking the auto move route (with specific message). Quite sure it was the same before the change.
It is completely safe to step away and redo the sort after it.
Also this fix should improve performance of the sorting process.
Not sure why I have to replace player activity after
p.set_destination
and set it back only after the auto move is finished. Or it is not required?Tested on the save provided in #29573.