Skip to content

fix(magic): dispel снимает случайный снимаемый аффект (#3292)#3293

Merged
bylins merged 1 commit into
masterfrom
fix/dispel-random-removable-affect-3292
May 20, 2026
Merged

fix(magic): dispel снимает случайный снимаемый аффект (#3292)#3293
bylins merged 1 commit into
masterfrom
fix/dispel-random-removable-affect-3292

Conversation

@bylins
Copy link
Copy Markdown
Owner

@bylins bylins commented May 20, 2026

Summary

CastUnaffects для kDispellMagic (src/gameplay/magic/magic.cpp:3306) выбирал случайный аффект из всего victim->affected, а потом проверял CheckNodispel. Если жребий падал на неснимаемый (charm / quest / patronage / solobonus / eviless / битвектор kCharmed) — заклинание сразу фейлилось с NOEFFECT, хотя в списке могли быть снимаемые аффекты.

Теперь:

  1. считаем снимаемые (CheckNodispel(aff) == false);
  2. если их ноль — NOEFFECT;
  3. иначе выбираем number(1, dispellable) и снимаем именно его.

Два прохода по affected (список короткий), без аллокаций и новых include.

Closes #3292

Test plan

  • meson -Dyaml=builtin собирается
  • meson test -C build_yaml2 — зелёные
  • на проде: dispel на цели с charm + парой баффов снимает один из баффов, а не фейлится

🤖 Generated with Claude Code

CastUnaffects для kDispellMagic брал случайный аффект из всего списка
victim->affected. Если жребий падал на неснимаемый (charm, quest,
patronage, solobonus, eviless, kCharmed-битвектор) -- CheckNodispel
возвращал true и заклинание фейлилось с NOEFFECT, хотя рядом в списке
могли висеть вполне снимаемые аффекты.

Теперь сначала считаем снимаемые (CheckNodispel == false), и если их
ноль -- NOEFFECT; иначе выбираем случайный именно среди них. Два
прохода по списку affected (он короткий), без лишних аллокаций.

Closes #3292

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bylins bylins merged commit 4645b20 into master May 20, 2026
20 checks passed
@bylins bylins deleted the fix/dispel-random-removable-affect-3292 branch May 20, 2026 05:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

case ESpell::kDispellMagic:

1 participant