Skip to content

add: добавляет гипнофлеш драфт#8567

Draft
Yablokko wants to merge 1 commit intoss220-space:master220from
Yablokko:12334
Draft

add: добавляет гипнофлеш драфт#8567
Yablokko wants to merge 1 commit intoss220-space:master220from
Yablokko:12334

Conversation

@Yablokko
Copy link

@Yablokko Yablokko commented Mar 4, 2026

Что этот ПР делает

добавляет гипнофлеш

Почему это хорошо для игры

Демонстрация изменений

Демонстрации изменений

Тестирование

@SharkHaddoMix
Copy link
Contributor

классная аватарка

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new hypnotic flash device. A security review identified a critical Cross-Site Scripting (XSS) vulnerability in the flash_carbon proc, where object names are interpolated into HTML-formatted chat messages without proper sanitization, potentially allowing attackers to execute arbitrary JavaScript. The code review also noted a potential null object dereference at code/game/objects/items/devices/flash.dm:341 and suggested improvements for localization and consistent return values within the flash_carbon procedure.

Comment on lines +341 to +344
if(user)
add_attack_logs(user, flashed, "[targeted? "hypno-flashed(targeted)" : "hypno-flashed(AOE)"] [extra_log]", src)
else //caused by emp/remote signal
add_attack_logs("was [targeted? "hypno-flashed(targeted)" : "hypno-flashed(AOE)"] [extra_log]", ATTACK_CHAIN_PROCEED)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

🔴 Критическая ошибка: отсутствует проверка на null

В процедуре flash_carbon отсутствует проверка на null для переменной flashed перед её использованием. Если в процедуру будет передано null, это приведёт к ошибке выполнения (runtime error).

Согласно стайлгайду (правило 97), необходимо всегда проверять на null объекты, особенно полученные в качестве аргументов.

Рекомендую добавить проверку в самом начале процедуры.

	if(!flashed)
		return
	if(user)
		add_attack_logs(user, flashed, "[targeted? "hypno-flashed(targeted)" : "hypno-flashed(AOE)"] [extra_log]", src)
	else //caused by emp/remote signal
		add_attack_logs("was [targeted? "hypno-flashed(targeted)" : "hypno-flashed(AOE)"] [extra_log]", ATTACK_CHAIN_PROCEED)
References
  1. Требовать проверку на null (if(!variable)) перед использованием объекта, особенно после locate(), find_in_view() и т.п. (link)

Comment on lines +347 to +367
to_chat(flashed, span_notice("[src] emits a soothing light..."))

if(!flashed.flash_eyes(1, override_blindness_check = targeted, affect_silicon = TRUE))
if(targeted)
if(user)
user.visible_message(span_warning("[user] fails to blind [flashed] with the flash!"), span_warning("You fail to hypno-flash [flashed]!"))
else
to_chat(flashed, span_danger("[src] fails to blind you!"))
return FALSE

if(!targeted)
to_chat(flashed, span_notice("Such a pretty light..."))
flashed.AdjustConfused(confusion_duration, confusion_duration * 2)
flashed.AdjustDizzy(8 SECONDS, 40 SECONDS)
flashed.AdjustDrowsy(8 SECONDS, 40 SECONDS)
return TRUE

if(user)
user.visible_message(span_danger("[user] blinds [flashed] with the flash!"), span_danger("You hypno-flash [flashed]!"))
else
to_chat(flashed, "You're blinded by [src]!")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-medium medium

A critical Cross-Site Scripting (XSS) vulnerability exists here. The flash_carbon proc interpolates object names (src, user, flashed) directly into HTML-generating macros (span_notice, span_warning, span_danger) without proper sanitization. This allows attackers to inject malicious HTML or JavaScript by modifying item or mob names, leading to XSS in other players' chat boxes. To mitigate this, use html_encode() for any dynamic content interpolated into HTML strings, for example: to_chat(flashed, span_notice("[html_encode(src.name)] emits a soothing light...")). Additionally, this block has localization issues, as messages for players should be in Russian and use localization functions (rules 103, 115). The flash_carbon procedure also has inconsistent return values, as it does not return a value in some branches while others return TRUE or FALSE.

References
  1. Messages for players should be in Russian and use localization functions (rules 103, 115).



/obj/item/flash/hypnotic
desc = "A modified flash device, programmed to emit a sequence of subliminal flashes that can send a vulnerable target into a hypnotic trance."
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

🟡 Рекомендация по локализации

Описание предмета (desc) должно быть на русском языке для корректного отображения в игре. Текущее описание на английском.

Согласно стайлгайду (правило 103), описания для игроков должны быть локализованы.

	desc = "Модифицированный флешер, запрограммированный на излучение последовательности подсознательных вспышек, способных ввести уязвимую цель в гипнотический транс."
References
  1. Имя объекта (name) у /obj не переводится. Для русских названий используется система ru_names. Описания (desc) должны быть на русском языке. (link)

@pilygun pilygun added the 📜 Локализация PR содержит текст на русском языке и должен быть проверен Ведущим локализатором. label Mar 4, 2026
@pilygun
Copy link
Contributor

pilygun commented Mar 4, 2026

Описание перевести обязательно, Так же обязательно сделать Ру неймы
Ту чаты заменить на балун алерты

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📜 Локализация PR содержит текст на русском языке и должен быть проверен Ведущим локализатором.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants