Skip to content

fix(poison): datura's lost skill-reduction slot and victim-based duration - #4096

Merged
bylins merged 2 commits into
masterfrom
fix/datura-poison-slots
Oct 23, 2026
Merged

bylins merged 2 commits into
masterfrom
fix/datura-poison-slots

Conversation

@bylins

@bylins bylins commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Закрывает часть #4095 (вторую половину issue — ту, где про сообщения, править нечего: там всё работает как задумано).

1. Дурман не резал умения

В его ветке af[0].location присваивался дважды подряд, и вторая запись затирала первую:

// -скиллы
af[0].location = EApply::kDaturaPoison;      // затиралось следующей строкой
af[0].modifier = std::max(percent, 10);
// -маг.дамаг
af[0].location = EApply::kMagicDamagePercent;
af[0].modifier = -std::max(percent, 10);

EApply::kDaturaPoison — это GET_SKILL_REDUCE(ch) += mod, то есть сам размер снижения умений. Слот терялся, а флаг kSkillReduce на жертву всё равно вешался: признак «умения снижены» в аффектах висел, а в skills.cpp вычиталось skill * GET_SKILL_REDUCE / 100 — то есть ноль.

Массив расширен до четырёх элементов, эффекты разложены по разным: скиллы, маг. дамаг, каст, мем-рег. Это ровно та же раскладка, что у белены (скиллы и физ. дамаг там в разных элементах). Флаги распределены как у белены: kSkillReduce на слоте умений, kDaturaPoison на маг. дамаге и мем-реге, kNoBattleSwitch на касте — жертва получает тот же набор, что и раньше.

Комментарий над веткой («-каст/мем-рег/дамаг-заклов/скилы») обещал четыре эффекта, а массив был на три. В версии 2021 года отдельного слота маг. дамага не было вовсе — APPLY_DATURA_POISON закрывал и умения, и дамаг заклов; слот добавили позже, переиспользовав af[0].

2. Длительность считалась от отравителя

У аконита, скополии и белены множитель навешивается на жертву-игрока:

if (!vict->IsNpc()) { i.duration *= 30; }

у дурмана в этой проверке стоял ch. Из-за этого дурман от игрока висел на мобе 210 вместо 7, а дурман от моба на игроке — 7 вместо 210.

Это изменение баланса, а не только починка. Длительность дурмана по мобам падает в 30 раз. Правка возвращает его к общему правилу остальных трёх ядов, но если по мобам так жить не хочется — второй коммит можно не брать, первый от него не зависит.

Проверка

Сборка release + build_tests=true чистая, без предупреждений; юнит-тесты 796 прошли, 3 отключены.

🤖 Generated with Claude Code

bylins and others added 2 commits October 22, 2026 22:20
Ветка дурмана складывала два эффекта в один элемент массива: вторая запись
af[0].location затирала первую, и EApply::kDaturaPoison (то есть
GET_SKILL_REDUCE) не накладывался вовсе. Флаг kSkillReduce на жертву при этом
вешался -- признак "умения снижены" в аффектах висел, а снижения не было.

Разложил на четыре элемента, как у белены: скиллы, маг. дамаг, каст, мем-рег.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
У аконита, скополии и белены длительность умножается на 30, если жертва --
игрок. У дурмана в этой проверке стоял отравитель: дурман от игрока висел на
мобе 210 вместо 7, а дурман от моба на игроке -- 7 вместо 210.

Правка возвращает дурман к общему правилу, но заметно режет его длительность
по мобам -- это изменение баланса, а не только починка.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@bylins
bylins merged commit b94a00d into master Oct 23, 2026
20 checks passed
@bylins
bylins deleted the fix/datura-poison-slots branch October 23, 2026 06: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