Skip to content

fix(split): drop NPC leader from share count, skip zero-share split (#3669) - #3671

Merged
bylins merged 1 commit into
masterfrom
fix/split-currency-count-3669
Aug 1, 2026
Merged

fix(split): drop NPC leader from share count, skip zero-share split (#3669)#3671
bylins merged 1 commit into
masterfrom
fix/split-currency-count-3669

Conversation

@bylins

@bylins bylins commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Разбор жалобы из #3669 («взял куны из сундука — разделило на 11 человек», хотя в группе 12).

Сам делёж считает верно

Расходятся два счётчика:

  • команда «группа» (print_group, groups.cpp:346) показывает всех с флагом группы — без проверки комнаты и без проверки на моба;
  • делёж (do_split, groups.cpp:638) делит только между игроками в одной комнате с делящим.

Отсюда «в группе 12, разделило на 11»: либо кто-то шагнул в соседнюю комнату, либо в группе есть зачарованный моб (в «группу все» такие попадают — perform_group отсекает только companion'ов и лошадей). Через 4 минуты у неё же делило на 12 — состав в комнате поменялся, версии не противоречит.

Что реально починено

1. Доля могла исчезнуть из игры. Лидер группы попадал в num без проверки !IsNpc(), а долю получал только при !IsNpc(). С лидером-мобом у делящего списывалось share * (num - 1), а получателей было на одного меньше — разница пропадала. Проверка добавлена в подсчёт.

2. Делёж 1 куны на 12. share = 0, и всем одиннадцати уходило «вам досталось 0», а остаток забирал делящий. Теперь при share <= 0 деления нет: всё остаётся делящему с сообщением «N кун на M не разделить -- оставили себе».

3. Строка в отчёт о делёжке. Если часть группы вне комнаты — добавляется «Членов группы вне комнаты: N -- доля им не досталась», чтобы расхождение с составом группы не выглядело потерей денег.

Патч VERSION 0.1.23 → 0.1.24. Сборка чистая, тесты проходят (604).

🤖 Generated with Claude Code

…3669)

Жалоба: "взял куны из сундука - разделило на 11 человек", хотя в группе 12.
Само деление считает верно, расходятся два счётчика: команда "группа"
(print_group) показывает всех с флагом группы -- без проверки комнаты и без
проверки на моба, а do_split делит только между игроками в одной комнате
с делящим. Это не баг, но по ходу разбора нашлись два настоящих:

1. Лидер группы попадал в num без проверки !IsNpc(), а долю получал только
   если !IsNpc() (ниже по коду). С лидером-мобом у делящего списывалось
   share * (num - 1), а получателей было на одного меньше -- доля исчезала
   из игры. Добавлена проверка в подсчёт.

2. Деление 1 куны на 12 давало share = 0: всем одиннадцати уходило
   "вам досталось 0", остаток забирал делящий. Теперь при share <= 0 деления
   нет, всё остаётся делящему с сообщением.

Плюс в отчёт о делёжке добавлена строка "Членов группы вне комнаты: N",
чтобы расхождение с составом группы больше не выглядело потерей денег.

Патч VERSION 0.1.23 -> 0.1.24.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@bylins
bylins force-pushed the fix/split-currency-count-3669 branch from 6c97cc8 to 656b2af Compare July 31, 2026 17:43
@bylins
bylins merged commit a5c5b4d into master Aug 1, 2026
20 checks passed
@bylins
bylins deleted the fix/split-currency-count-3669 branch August 1, 2026 03:51
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