Skip to content

fix(dg): stop featturn and skillturn from failing silently - #3937

Merged
bylins merged 2 commits into
masterfrom
fix/featturn-silent-noop
Sep 21, 2026
Merged

bylins merged 2 commits into
masterfrom
fix/featturn-silent-noop

Conversation

@bylins

@bylins bylins commented Sep 21, 2026

Copy link
Copy Markdown
Owner

Closes #3936.

Что было

mfeatturn %actor% изощренные.чары set

на персонажа, у которого способность уже есть, — тишина. Ни сообщения игроку, ни строки в SYSLOG, эффекта тоже нет. Со стороны неотличимо от неработающей команды: по сислогу не понять, пришлось читать код.

В trg_featturn (dg_db_scripts.cpp:395) это выглядело так:

if (ch->HaveFeat(feat_id)) {
    if (featdiff) return;   // set на уже имеющуюся -- молча выходим

Рядом жил второй такой же тихий выход: set на способность, не положенную классу персонажа (проверка IsAvailable). Для билдера оба случая выглядят одинаково.

trg_skillturn страдал тем же самым.

Что стало

Оба случая теперь сообщают игроку и пишут в SYSLOG.

Игроку:

  • «Вы уже владеете способностью 'изощренные чары'.»
  • «Способность 'изощренные чары' недоступна вашему классу.»

и то же самое для умений.

В SYSLOG:

featturn: Мородей уже владеет способностью 'изощренные чары', триггер #12345
featturn: способность 'изощренные чары' недоступна классу волхв (Мородей), триггер #12345

Успешные выдача и снятие остались как были.

Проверка

Сборка чистая, 723 теста проходят. В игре не гонял: нужен триггер с mfeatturn на персонажа, у которого способность уже есть.

🤖 Generated with Claude Code

bylins and others added 2 commits September 21, 2026 13:25
mfeatturn на того, у кого способность уже есть, выходил молча: ни игроку,
ни в лог. Со стороны это выглядело неработающей командой -- разбираться
пришлось чтением кода, потому что и в сислоге было пусто.

Рядом жил второй такой же тихий случай: set на способность, не
положенную классу персонажа. Для билдера он неотличим от первого --
команда написана, эффекта нет.

Теперь оба случая говорят игроку, что произошло, и пишут строку в
SYSLOG с именем персонажа, названием способности и номером триггера.

skillturn страдал тем же -- поправлен симметрично.

Closes #3936

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Те же тихие выходы, что у способностей, нашлись и в заклинаниях:

- spellturn на уже известное заклинание -- молча, как featturn;
- spellturn и spellturntemp на заклинание, недоступное по классу,
  уровню или реморту: игроку ничего, а в лог уходило невнятное
  "Error trying to add";
- spelladd, когда число заученных не изменилось (ноль в аргументе или
  упёрлись в предел): у умений про это говорят "не изменилось",
  у заклинаний молчали;
- spellitem, когда состояние уже такое, какое просят.

Теперь всюду сообщение игроку и понятная строка в SYSLOG с именем,
названием заклинания и номером триггера. У spellitem только лог:
там команда даёт слишком разный текст под каждый вид умения, и
сообщение "ничего не изменилось" игроку скорее мешало бы.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@bylins
bylins merged commit b621ec5 into master Sep 21, 2026
20 checks passed
@bylins
bylins deleted the fix/featturn-silent-noop branch September 21, 2026 11:44
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.

mfeatturn %actor% изощренные.чары set

1 participant