Repository navigation
fix(poison): stop the per-fight latch from re-granting a guaranteed poison - #4097
Merged
Merged
Conversation
…oison Гарантированное наложение яда с оружия висело на боевой защелке kEafFirstPoison, а battle_affects чистятся и при входе в бой, и при выходе из него. Поэтому каждый новый бой был для цели "первым": отбежать, вернуться и ударить -- снова гарантированный прок, и так до предельного стака, хотя сам яд держится еще минуты. Стоя в бою повторные наложения идут с шансом 25%, то есть беготня была выгоднее честного боя. Теперь гарантия проверяет, висит ли на цели этот же яд: у аконита это и так работало через узел kPoisoned, остальные три яда носят свои флаги, так что добавлено опознание кластера по типу яда. Защелка больше не нужна и убрана. 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.
Жалоба
Игрок заметил: бьешь моба оружием с беленой — первое наложение проходит гарантированно, как и задумано. Но если отбежать и вернуться, следующий удар снова кладет яд со стопроцентной вероятностью, хотя прежний еще держится. «Стоя в бою накладываются с мелким шансом, а если бегать — друг за другом».
Причина
Гарантированное наложение в
PerformPoisonedWeapomвисело на боевой защелке:kEafFirstPoisonлежит вbattle_affects, а они обнуляются и при входе в бой (fight.cpp:233), и при выходе из него (fight.cpp:306). То есть каждый новый бой для цели — «первый», и первый удар опять дает гарантию. При этомpoison_affect_joinстакает модификатор до трех раз и каждый раз ставит полную длительность, а сам яд помеченkAfSameTimeи на мобе держится около семи минут. Выходило, что беготня туда-сюда набивает полный стак быстрее честного боя, где повторные наложения идут с шансом 25%.Аконита это не касалось: один из его узлов имеет тип
kPoisoned, поэтомуAFF_FLAGGED(vict, kPoisoned)блокировал вторую половину условия. У белены, скополии и дурмана типы свои (kBelenaPoisonи прочие), и вся защита держалась только на защелке.Правка
Гарантия теперь проверяет не «первый раз за бой», а «этого яда на цели еще нет» — по опознавательному аффекту кластера:
Проверка
!AFF_FLAGGED(vict, kPoisoned)оставлена как была, так что для аконита поведение не меняется вовсе. ЗащелкаkEafFirstPoisonстала не нужна и убрана изEExtraAttackFlag— в коде на нее больше нет ни одной ссылки.Что меняется в игре: первое наложение каждого яда по-прежнему гарантировано, повторные внутри действия яда — честные 25% за удар, и выбегание из боя этого больше не обнуляет.
Проверка
Сборка
release+build_tests=trueчистая, без предупреждений; юнит-тесты 796 прошли, 3 отключены.🤖 Generated with Claude Code