Skip to content

fix(magic-items): read wand/potion spell from extra_values, not raw val#3636

Merged
bylins merged 1 commit into
masterfrom
fix/magic-items-spell-slot-reads
Jul 22, 2026
Merged

fix(magic-items): read wand/potion spell from extra_values, not raw val#3636
bylins merged 1 commit into
masterfrom
fix/magic-items-spell-slot-reads

Conversation

@bylins

@bylins bylins commented Jul 22, 2026

Copy link
Copy Markdown
Owner

Продолжение миграции магических предметов на extra_values (аудит всех оставшихся чтений сырого val у kPotion/kWand/kStaff/kScroll). Два места читали заклинание из сырого val[], обнулённого миграцией.

Что чинит

do_employ.cpp — сломанный фит-гейт (важное).
Применение жезла/посоха брало заклинание из val[3] (всегда 0 после миграции), поэтому проверка на kCharm/kAnimateDead/kResurrection не срабатывала — жезлы этих заклинаний мог применять кто угодно без EFeat::kMagicUser. Читаем через GetSpellItemSpellNum(1) (миграция кладёт заклинание жезла/посоха в kSpell1Num, db.cpp:99).

im.cpp — сваренное зелье без силы варщика.
Варка по im-рецепту гейтила простановку maker-ключей (kMakerSkill/kMakerStat/kPotionBrewRoll) по val[1] — гейт не проходил, зелье кастовалось на дефолтной силе без замороженного броска удачи. Читаем заклинание через GetSpellItemSpellNum(1).

Проверка

  • Сборка release + tests: OK
  • Тесты: 604/604 PASSED

Осталось за рамками (нужно решение)

Аудит нашёл ещё 3 места, читающих устаревший val[0]-уровень (по дизайну свиток/жезл/посох больше не кастуют от хранимого уровня, magic_items.cpp:31): энергетика im-рецепта, крафт-ветка kPotion в item_creation.cpp (не ставит maker-ключи), boot-валидация. Это формулы крафта/валидация — вынес отдельно, не в этот PR.

Продолжение миграции магических предметов на extra_values. Ещё два места
читали заклинание из сырого val[], который у зелий/жезлов/посохов обнулён:

- do_employ.cpp: фит-гейт применения жезла/посоха брал заклинание из val[3]
  (всегда 0 после миграции) -- проверка на kCharm/kAnimateDead/kResurrection
  не срабатывала, и жезлы этих заклинаний мог применять кто угодно без
  EFeat::kMagicUser. Читаем через GetSpellItemSpellNum(1) (миграция кладёт
  заклинание жезла/посоха в kSpell1Num, db.cpp:99).

- im.cpp: варка зелья по im-рецепту гейтила простановку maker-ключей
  (kMakerSkill/kMakerStat/kPotionBrewRoll) по val[1] -- гейт не проходил,
  и сваренное зелье кастовалось на дефолтной силе без замороженного броска
  удачи. Читаем заклинание через GetSpellItemSpellNum(1).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@bylins
bylins merged commit 0bd1838 into master Jul 22, 2026
20 checks passed
@bylins
bylins deleted the fix/magic-items-spell-slot-reads branch July 22, 2026 13:06
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.

1 participant