Repository navigation
fix(mount): stop following the horse before mounting it - #4087
Merged
Merged
Conversation
Всадник мог сам следовать за будущим скакуном: команда "следовать" ищет цель через FindCharInRoom и на NPC не проверяет, так что "след гончая" работает. Дальше "оседлать гончая" звало MakeHorse -> AddFollower, а тот замыкал кольцо в цепочке лидеров: скакун становился бы хозяином всадника и наоборот. set_master такое отклоняет, и седловка проходила наполовину -- сообщение "Вы оседлали ..." выведено, аффект kHorse выставлен, а подчинения нет. Именно так и начиналось зависание из #4083: 19:18 "след гон", 19:22 "оседлать гон", кольцо, гончая в свите без хозяина, 19:25 постой и вечный цикл в DieFollower. MakeHorse теперь сперва снимает всадника со следования за этим мобом. Правка в MakeHorse, а не в do_horsetake, чтобы накрыть и передачу скакуна (do_givehorse): принимающий точно так же мог за ним следовать. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Хвост из #4083, третья и последняя часть. #4086 убирает причину порчи списка, #4084 страхует цикл, а здесь закрывается сама ситуация, из которой всё выросло.
Что не так
Команда «следовать» ищет цель через
FindCharInRoomи на NPC не проверяет — за мобом следовать можно. АMakeHorseделает скакуна последователем всадника:Если всадник в этот момент сам следует за этим мобом, выходит кольцо:
set_masterего отклоняет, и седловка проходит наполовину — сообщение «Вы оседлали ...» уже выведено, аффектkHorseвыставлен, а подчинения нет.Так и начиналось зависание из issue:
Гончая — мир-моб #5902 из зоны 59 с флагом
kMounting, её описание прямо предлагает оседлать; хозяина у неё на тот момент не было.Правка
MakeHorseсперва снимает всадника со следования за этим мобом, и только потом седлает.Правка в
MakeHorse, а не вdo_horsetake, чтобы накрыть и передачу скакуна (do_givehorse→MakeHorse(horse, victim)): принимающий точно так же мог за ним следовать.StopFollowerдля всадника-игрока вернутьtrueне может — извлечение там только в ветке для NPC сkCorpse, — поэтому результат не проверяется.Проверка
Сборка
-Dbuild_profile=release -Dbuild_tests=trueбез предупреждений,./tests/tests— 796 passed, 3 skipped (те же, что и до правки).🤖 Generated with Claude Code