Добавление фишек донаторскому предмету + компонента на визуальный интерфейс#3308
Добавление фишек донаторскому предмету + компонента на визуальный интерфейс#3308Dominig12 wants to merge 59 commits into
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughДобавлен /datum/component/neural_interface с datum-типами и набором neural_monitor-датумов; интеграция этого компонента в ChangesЗащита clothing и расширение логики inlaid_data_dress
🎯 4 (Complex) | ⏱️ ~45 minutes Sequence DiagramsequenceDiagram
participant Client as PlayerClient
participant Mob as Human
participant Item as InlaidDataDress
participant NeuralComp as NeuralInterface
participant NetComp as ntnet_interface
Client->>Mob: equip(Item)
Mob->>Item: equipped(user)
Item->>NeuralComp: user.LoadComponent / Initialize(user)
NeuralComp->>Client: attach ScreenText / maptext
Item->>Item: START_PROCESSING -> process(delta_time)
Item->>NeuralComp: write_log/write_data / AddSource(ROSELIA_DRESS)
NetComp->>NeuralComp: COMSIG_COMPONENT_NTNET_RECEIVE (packet)
NeuralComp->>Client: update maptext / ScreenText
Possibly related PRs
Suggested labelsDME Edit 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
modular_bluemoon/fluffs/code/under.dm (1)
346-359: ⚡ Quick winЭтот init-код лучше перенести из
New()вInitialize().Раз уж на Line 359 сюда добавляется новый setup, лучше сразу держать весь atom lifecycle в
Initialize(), а не продолжать наращиватьNew(). Так меньше шансов поймать кривой порядок инициализации в будущем.Минимальный рефакторинг
-/obj/item/clothing/under/donator/bm/inlaid_data_dress/New() +/obj/item/clothing/under/donator/bm/inlaid_data_dress/Initialize(mapload) . = ..() echo = new(src) echo.plane = FIELD_OF_VISION_LAYERAs per coding guidelines: Initialize() instead of New() for atoms.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@modular_bluemoon/fluffs/code/under.dm` around lines 346 - 359, Move the atom lifecycle setup currently in New() into an Initialize() override: create Initialize() on /obj/item/clothing/under/donator/bm/inlaid_data_dress that calls ..() and then performs the echo/echo.plane assignment, instantiates filter_on_user and particle_effect_holder, LAZYADDs vis_contents for those two, START_PROCESSING(SSfastprocess, src) and ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT); then remove those initialization lines from New() (keeping New() minimal or delegating to ..() only) so all runtime setup for this atom lives in Initialize() instead of New().
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@modular_bluemoon/fluffs/code/under.dm`:
- Around line 333-335: toggle_open_body() сейчас игнорирует уникальные рескины
типа "Rose-4" и всегда подставляет state по шаблону InlaidDataDress_[skin]_open;
нужно изменить логику выбора state так, чтобы если у уникального рескина
(unique_reskin["Rose-4"] / любой reskin) body_parts_covered == NONE или есть
явно заданный icon_state в его записи, то использовать этот icon_state и не
пересчитывать open через InlaidDataDress_[skin]_open; реализуй это в функции
toggle_open_body() / в месте, где собирается icon_state, добавив приоритет
проверки unique_reskin entry (skin/icon_state/body_parts_covered) перед
генерацией InlaidDataDress_[skin]_open и не переписывая icon_state для
permanently open рескинов.
---
Nitpick comments:
In `@modular_bluemoon/fluffs/code/under.dm`:
- Around line 346-359: Move the atom lifecycle setup currently in New() into an
Initialize() override: create Initialize() on
/obj/item/clothing/under/donator/bm/inlaid_data_dress that calls ..() and then
performs the echo/echo.plane assignment, instantiates filter_on_user and
particle_effect_holder, LAZYADDs vis_contents for those two,
START_PROCESSING(SSfastprocess, src) and ADD_TRAIT(src, TRAIT_NODROP,
CLOTHING_TRAIT); then remove those initialization lines from New() (keeping
New() minimal or delegating to ..() only) so all runtime setup for this atom
lives in Initialize() instead of New().
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: f4ac3b86-3018-491b-a780-c5da9c7af235
📒 Files selected for processing (2)
modular_bluemoon/fluffs/code/mask.dmmodular_bluemoon/fluffs/code/under.dm
| "Roselia" = list("icon_state" = "InlaidDataDress_default", "skin" = "default", "active_echo" = TRUE), | ||
| "Rose-1" = list("icon_state" = "InlaidDataDress_battle", "skin" = "battle", "active_echo" = FALSE), | ||
| "Rose-4" = list("icon_state" = "InlaidDataDress_lust", "skin" = "lust", "can_adjust" = FALSE, "body_parts_covered" = NONE, "active_echo" = FALSE), |
There was a problem hiding this comment.
toggle_open_body() несовместим с конфигом Rose-4.
На Line 335 этот reskin уже объявлен как постоянно открытый (body_parts_covered = NONE, icon_state = "InlaidDataDress_lust"), но на Lines 379-443 открытие всегда пересчитывается через InlaidDataDress_[skin]_open. В итоге после смерти Rose-4 перестаёт использовать собственный state из unique_reskin, и поведение начинает зависеть от неявно склеенной строки, а не от данных самого reskin.
Вариант исправления
var/active_echo = TRUE
var/skin = "default"
+ var/closed_dress_state = "InlaidDataDress_default"
+ var/open_dress_state = "InlaidDataDress_default_open"
unique_reskin = list(
- "Roselia" = list("icon_state" = "InlaidDataDress_default", "skin" = "default", "active_echo" = TRUE),
- "Rose-1" = list("icon_state" = "InlaidDataDress_battle", "skin" = "battle", "active_echo" = FALSE),
- "Rose-4" = list("icon_state" = "InlaidDataDress_lust", "skin" = "lust", "can_adjust" = FALSE, "body_parts_covered" = NONE, "active_echo" = FALSE),
+ "Roselia" = list("icon_state" = "InlaidDataDress_default", "skin" = "default", "closed_dress_state" = "InlaidDataDress_default", "open_dress_state" = "InlaidDataDress_default_open", "active_echo" = TRUE),
+ "Rose-1" = list("icon_state" = "InlaidDataDress_battle", "skin" = "battle", "closed_dress_state" = "InlaidDataDress_battle", "open_dress_state" = "InlaidDataDress_battle_open", "active_echo" = FALSE),
+ "Rose-4" = list("icon_state" = "InlaidDataDress_lust", "skin" = "lust", "closed_dress_state" = "InlaidDataDress_lust", "open_dress_state" = "InlaidDataDress_lust", "can_adjust" = FALSE, "body_parts_covered" = NONE, "active_echo" = FALSE),
)
/obj/item/clothing/under/donator/bm/inlaid_data_dress/proc/toggle_open_body(open)
- if(open)
- icon_state = "InlaidDataDress_[skin]_open"
- item_state = "InlaidDataDress_[skin]_open"
+ var/next_state = open ? open_dress_state : closed_dress_state
+ icon_state = next_state
+ item_state = next_state
+ if(open)
body_parts_covered = NONE
else
- icon_state = "InlaidDataDress_[skin]"
- item_state = "InlaidDataDress_[skin]"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
return TRUEAlso applies to: 379-383, 435-443
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@modular_bluemoon/fluffs/code/under.dm` around lines 333 - 335,
toggle_open_body() сейчас игнорирует уникальные рескины типа "Rose-4" и всегда
подставляет state по шаблону InlaidDataDress_[skin]_open; нужно изменить логику
выбора state так, чтобы если у уникального рескина (unique_reskin["Rose-4"] /
любой reskin) body_parts_covered == NONE или есть явно заданный icon_state в его
записи, то использовать этот icon_state и не пересчитывать open через
InlaidDataDress_[skin]_open; реализуй это в функции toggle_open_body() / в
месте, где собирается icon_state, добавив приоритет проверки unique_reskin entry
(skin/icon_state/body_parts_covered) перед генерацией
InlaidDataDress_[skin]_open и не переписывая icon_state для permanently open
рескинов.
…12/MOLOT-BlueMoon-Station into feat-fluff-item-03062026
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@modular_bluemoon/fluffs/code/under.dm`:
- Line 438: In dropped(), avoid accessing user.client when it may be null: add a
guard like "if (user && user.client)" before the line that manipulates
user.client (the removal of logs_view), mirroring the null-check used in
equipped(); ensure you only perform "user.client.screen -= logs_view" when
user.client is present to prevent the runtime null access.
- Line 416: Доступ к user.client.screen выполняется без проверки на null; перед
добавлением logs_view убедитесь, что client существует — например, проверьте
user.client (или user.client?.screen) и только в случае ненулевого client
выполнить операцию с logs_view; исправьте место с обращением к
user.client.screen и обновите логику так, чтобы не обращаться к свойствам
client, если user.client == null.
- Around line 417-425: При текущей логике регистрация сигнала делается в месте с
RegisterSignal(user, COMSIG_CARBON_UPDATEHEALTH, PROC_REF(host_update_health)),
но в dropped() вы отписываетесь только если HAS_TRAIT возвращает TRUE, что
пропускает UnregisterSignal при удалении TRAIT_SELF_AWARE — исправьте dropped()
(или блок деинициализации платья) так, чтобы вызывать UnregisterSignal(user,
COMSIG_CARBON_UPDATEHEALTH, PROC_REF(host_update_health)) без проверки
HAS_TRAIT; UnregisterSignal безопасен на несуществующих регистрациях, поэтому
вызов должен быть unconditional для удаления утечки сигнала.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 339ebdc9-1c5d-4d02-94a3-c88f8d50469f
📒 Files selected for processing (3)
modular_bluemoon/fluffs/code/mask.dmmodular_bluemoon/fluffs/code/under.dmmodular_bluemoon/fluffs/icons/effects/32x32.dmi
💤 Files with no reviewable changes (1)
- modular_bluemoon/fluffs/code/mask.dm
…12/MOLOT-BlueMoon-Station into feat-fluff-item-03062026
…ation into feat-fluff-item-03062026
…12/MOLOT-BlueMoon-Station into feat-fluff-item-03062026
Описание
Изменены донатные предметы, сделаны не снимаемыми, при смерти уничтожающимся
Униформа стала прочнее, при смерти форма открывается (чтобы можно было операции делать не снимая)
Добавлена компонента на визуальный интерфейс. Отображает логи и данные напрямую на игровом поле пользователя.
Добавлены мониторы для этого интерфейса, которые мониторят данные и вписывают их в интерфейс
Отдельные мониторы позволяют получать информацию об окружении (медицинский монитор позволяет осмотрев цель видеть ее статус здоровья)
Причина изменений
Демонстрация изменений
Changelog
Summary by CodeRabbit
New Features
Bug Fixes