Skip to content

diag(obj): log player item loss — punctual-to-ground, steal-eq, decay (#3563)#3565

Merged
bylins merged 1 commit into
masterfrom
diag/log-player-obj-extract-3563
Jul 15, 2026
Merged

diag(obj): log player item loss — punctual-to-ground, steal-eq, decay (#3563)#3565
bylins merged 1 commit into
masterfrom
diag/log-player-obj-extract-3563

Conversation

@bylins

@bylins bylins commented Jul 15, 2026

Copy link
Copy Markdown
Owner

Пропажу вещей у игроков нельзя было отследить: логи о причинах удаления почти отключены, а трейсился только уход из инвентаря (obj_from_char).

Реальный случай #3563 («когти Цербера» #97326 у Мареи): точный стиль ранит руку → снимает оружие → для игрока не на арене роняет его НА ЗЕМЛЮ (punctual_style.cpp). Вещь оказывается в другой комнате (99125), владелец её не находит, а в сислоге пусто.

Добавлено

Событие Где Пример
точный стиль выбил вещь на землю punctual_style.cpp [Punctual -> ground] X выбил точным стилем 'когти Цербера' (vnum 97326) из рук Марея -> комната [99125] Сумрачный лес
кража надетой вещи (имм / у спящего) do_steal.cpp [Steal eq] X украл надетую вещь '...' (vnum ...) у Y
уничтожена по прочности DamageObj (durability<=0) [Obj loss] ... (рассыпалась по прочности), прочность == 0/300
уничтожена по таймеру/decay obj_point_update [Obj loss] ... (истёк таймер жизни / decay)
хелпер LogPlayerObjLoss obj_handler ищет игрока-владельца (инв/экип/контейнер), зовётся до отвязки

Кража из инвентаря уже логируется obj_from_charRemoveObjFromChar), отдельно не дублируем.

CheckObjDecay перенесён внутрь ветки «на землю» (для попавшей в инвентарь вещи не нужен).

Почему не логируем UnequipChar

В подавляющем большинстве это обычное «снять» — вещь уходит в инвентарь и не теряется. Лог там = шум и ложный сигнал пропажи. Реальные уходы от игрока (точный стиль на землю, кража надетого) логируются точечно.

Заметка (не в этом PR)

Выбивание оружия точным стилем не проверяет kNodisarm (в отличие от скилла обезоруживания в disarm.cpp). Отдельный вопрос к дизайну.

Связано с #3563.

🤖 Generated with Claude Code

@bylins
bylins force-pushed the diag/log-player-obj-extract-3563 branch from cd2eeec to 7710adf Compare July 15, 2026 19:53
…#3563)

Пропажу вещей у игроков нельзя было отследить: логи о причинах удаления
почти отключены, а трейсился только уход из инвентаря (obj_from_char).
Реальный случай (#3563): точный стиль ранит руку и роняет оружие НА ЗЕМЛЮ
(для игрока не на арене) -- вещь оказывается в другой комнате, владелец её
не находит, а в сислоге пусто.

Добавлено:
- punctual_style.cpp: лог, когда точный стиль выбивает вещь игрока на землю
  (не в инвентарь). Мобов не логируем. CheckObjDecay перенесён внутрь ветки
  "на землю" (для попавшей в инвентарь вещи он не нужен).
- do_steal.cpp: лог кражи НАДЕТОЙ вещи (имм или у спящей жертвы) -- она уходит
  через UnequipChar, без obj_from_char. Кража из инвентаря уже логируется
  obj_from_char в RemoveObjFromChar.
- LogPlayerObjLoss (obj_handler): единый хелпер, ищет игрока-владельца
  (инвентарь/экипировка/его контейнер) и пишет причину; звать до отвязки.
- DamageObj: лог уничтожения по прочности (durability<=0).
- obj_point_update: лог уничтожения по таймеру/decay.

UnequipChar намеренно НЕ логируем: в подавляющем большинстве это обычное
"снять", вещь уходит в инвентарь и не теряется -- был бы шум и ложный сигнал.

Примечание: выбивание оружия точным стилем НЕ проверяет kNodisarm (в отличие
от скилла обезоруживания) -- отдельный вопрос к дизайну, здесь не трогаю.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@bylins
bylins force-pushed the diag/log-player-obj-extract-3563 branch from 7710adf to 9422eef Compare July 15, 2026 19:55
@bylins bylins changed the title diag(obj): log player item loss — punctual-to-ground, unequip, decay (#3563) diag(obj): log player item loss — punctual-to-ground, steal-eq, decay (#3563) Jul 15, 2026
@bylins
bylins merged commit 30a9275 into master Jul 15, 2026
20 checks passed
@bylins
bylins deleted the diag/log-player-obj-extract-3563 branch July 15, 2026 20:08
bylins added a commit that referenced this pull request Jul 16, 2026
Догоняющий к #3565: те же логи пропажи вещи (точный стиль на землю, кража
надетого, прочность, таймер/decay) теперь покрывают и ЧАРМИСОВ игрока --
с указанием имени чармиса и его владельца.

Общий хелпер ObjHolderLogDesc(holder) даёт описание в родительном падеже:
"игрока X" / "чармиса 'Y' игрока X" (поднимается по цепочке мастеров до
игрока) / "" для обычного моба (не логируем). Раньше всё гейтилось на
!IsNpc(), из-за чего чармисы (NPC с мастером-игроком) выпадали.

- LogPlayerObjLoss, punctual_style.cpp, do_steal.cpp переведены на хелпер.
- DamageObj / obj_point_update покрываются автоматически через LogPlayerObjLoss.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bylins added a commit that referenced this pull request Jul 16, 2026
Догоняющий к #3565: те же логи пропажи вещи (точный стиль на землю, кража
надетого, прочность, таймер/decay) теперь покрывают и ЧАРМИСОВ игрока --
с указанием имени чармиса и его владельца.

Общий хелпер ObjHolderLogDesc(holder) даёт описание в родительном падеже:
"игрока X" / "чармиса 'Y' игрока X" (поднимается по цепочке мастеров до
игрока) / "" для обычного моба (не логируем). Раньше всё гейтилось на
!IsNpc(), из-за чего чармисы (NPC с мастером-игроком) выпадали.

- LogPlayerObjLoss, punctual_style.cpp, do_steal.cpp переведены на хелпер.
- DamageObj / obj_point_update покрываются автоматически через LogPlayerObjLoss.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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