fix(dg): stop HitPrcnt shake-off log spam + guard re-entry by pending wait (#3658) - #3668
Merged
Merged
Conversation
bylins
force-pushed
the
fix/hitprcnt-shakeoff-spam-3658
branch
from
July 31, 2026 13:21
7e4a650 to
192c7da
Compare
…3658) Триггер #97132 ("зовём младенцев", HitPercent) при 30% HP делает echo -> wait 5 -> while(2-5){ load mob; echo }. При ударах от группы он грузил младенцев многократно и спамил лог shake-off. Причина: hitprcnt_mtrigger на КАЖДЫЙ удар зовёт script_driver(TRIG_NEW). Это не копия, а ПЕРЕЗАПУСК того же триггера с начала. Пока он висит на wait 5, новый удар стартует его заново -- в очереди событий копится по орфанному trig_wait_event на каждый удар, и каждое потом отдельно возобновляет цикл (отсюда лишние загрузки и покомандный shake-off/лог). Гард: не (пере)запускаем, если триггер висит на wait -- `GET_TRIG_WAIT(t).time_remaining`. Это и есть кэш "у триггера в очереди событий висит trig_wait_event" (проверять event_list вручную -- то же самое, но O(n)). depth не годится: TRIG_NEW сам ставит его в 1. Условие shake-off (dg_mobcmd) НЕ трогаем: get_wait там нужен (моб мог сам применить умение и быть в лаге), а спам лечится именно гардом. Патч VERSION 0.1.21 -> 0.1.22. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bylins
force-pushed
the
fix/hitprcnt-shakeoff-spam-3658
branch
from
July 31, 2026 13:29
192c7da to
93b901d
Compare
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.
Продолжение #3658. Триггер #97132 «зовём младенцев» (HitPercent) при 30% HP:
echo → wait 5 → while(2-5){ load mob; echo }. В сислоге лог shake-off «моб отжил из лага/стана» сыпался на каждой команде цикла (строки 10/16/22/26…) в один миллисекунд.Причина 1 — спам лога
Условие shake-off содержало
|| ch->get_wait() > 0. Моб в бою приkFightпостоянно имеет боевой лаг → на каждой команде цикла условие истинно → shake-off + лог. При этом боевой лаг сам триггер не стопает (стан-блокget_waitне проверяет) — значит в условии он лишний.Фикс:
get_wait() > 0→ch->GetPosition() < EPosition::kFight. Стряхиваем, когда моб реально сбит/оглушён/сидит, а не просто лагает в бою. Боец приkFightбольше не стряхивается → лога нет.Причина 2 — копии от группы
Гард в
hitprcnt_mtriggerпоGET_TRIG_DEPTHне сработал (TRIG_NEWсам ставитdepth=1). Переключено на пендинг-waitGET_TRIG_WAIT(t).time_remaining— пока триггер висит наwait 5, хит от следующего игрока группы не запускает копию.Патч VERSION
0.1.21→0.1.22. Собирается/линкуется чисто.Заметка на ревью
При мерже #3659 из master, похоже, потерялись две правки:
ошеломитьсноваkIncap(неkStun), из-за чего ошеломлённый (pos < kStun) не проходит внешний гейт shake-off. Если нужно, вернуkStunотдельным патчем.