Skip to content

Commit

Permalink
Fix spy spider detection with detective scanner (#1619)
Browse files Browse the repository at this point in the history
<!-- Пишите **НИЖЕ** заголовков и **ВЫШЕ** комментариев, иначе что то
может пойти не так. -->
<!-- Вы можете прочитать Contributing.MD, если хотите узнать больше. -->

## Что этот PR делает

Фиксит баг с жучком, который не открепляется при скане.

<!-- Вкратце опишите изменения, которые вносите. -->
<!-- Опишите **все** изменения, так как противное может сказаться на
рассмотрении этого PR'а! -->
<!-- Если вы исправляете Issue, добавьте "Fixes #xxxx" (где xxxx - номер
Issue) где-нибудь в описании PR'а. Это автоматически закроет Issue после
принятия PR'а. -->

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

Баги - это плохо.

<!-- Опишите, почему, по вашему, следует добавить эти изменения в игру.
-->

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


https://github.com/user-attachments/assets/dbb862a8-a496-4197-a92b-66f5d7d39e02
Прикрепил жучок, просканировал вещь, получил жучок обратно в руку.
<!-- Как вы тестировали свой PR, если делали это вовсе? -->

## Changelog

:cl:
fix: Шпионские жучки снова можно снимать, просканировав детективным
сканером одежду, на которой он закреплён.
/:cl:

<!-- Оба :cl:'а должны быть на месте, что-бы чейнджлог работал! Вы
можете написать свой ник справа от первого :cl:, если хотите. Иначе
будет использован ваш ник на ГитХабе. -->
<!-- Вы можете использовать несколько записей с одинаковым префиксом
(Они используются только для иконки в игре) и удалить ненужные. Помните,
что чейнджлог должен быть понятен обычным игроком. -->
<!-- Если чейнджлог не влияет на игроков(например, это рефактор), вы
можете исключить всю секцию. -->

## Summary by Sourcery

Allow removing spy bugs from clothing via detective scanner.

Bug Fixes:
- Fixed a bug where spy bugs could not be removed after scanning the
clothing they were attached to.

Enhancements:
- Improved the interaction with spy bugs by allowing players to remove
them directly after scanning.

---------

Co-authored-by: Mikhail Dzianishchyts <[email protected]>
  • Loading branch information
Drsmail and m-dzianishchyts authored Dec 30, 2024
1 parent 4f02fc3 commit 9e859b9
Showing 1 changed file with 31 additions and 26 deletions.
57 changes: 31 additions & 26 deletions modular_ss220/spy_spider/code/spy_spider.dm
Original file line number Diff line number Diff line change
Expand Up @@ -82,22 +82,29 @@
to_chat(user, span_info("Ты незаметно прикрепляешь жучок к [src]."))
return TRUE

/obj/item/clothing/proc/remove_spy_spider()
set name = "Снять жучок"
set category = "Object"
set src in range(1, usr)

if(!ishuman(usr))
/obj/item/clothing/proc/remove_spy_spider(cloth_uid, spider_uid)
if(!in_range(src, usr))
to_chat(usr, span_info("Тебе нужно подойти ближе, чтобы снять жучок с [src.declent_ru(GENITIVE)]."))
return
if(usr.stat || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.restrained())
to_chat(usr, span_info("Тебе нужны свободные руки для этого"))
return
if(isnull(src.spy_spider_attached))
to_chat(usr, span_info("На [src.declent_ru(PREPOSITIONAL)] нет жучка."))
return
var/mob/living/carbon/human/user = usr

if(spy_spider_attached)
if(!user.put_in_any_hand_if_possible(spy_spider_attached, del_on_fail = FALSE))
var/turf/user_loc = get_turf(user)
spy_spider_attached.forceMove(user_loc)
var/obj/item/I = locate(spider_uid)
if(do_after(usr, 3 SECONDS, needhand = TRUE, target = src))
if(usr.put_in_any_hand_if_possible(I))
usr.visible_message("[capitalize(usr.declent_ru(NOMINATIVE))] что-то снимает с [src.declent_ru(GENITIVE)] !", span_notice("Вы успешно снимаете жучок с [src.declent_ru(ACCUSATIVE)]."))
else
I.forceMove(get_turf(src))
usr.visible_message("[capitalize(usr.declent_ru(NOMINATIVE))] роняет шпионский жучок на пол.", span_notice("Вы роняете жучок на пол."))
spy_spider_attached = null

verbs -= /obj/item/clothing/proc/remove_spy_spider
/obj/item/clothing/Topic(href, href_list)
. = ..()
remove_spy_spider(href_list["src"], href_list["remove_spy_spider"])

/**
* HUMAN PART
Expand All @@ -107,7 +114,7 @@
return ..()

if(!(w_uniform || wear_suit))
to_chat(user, span_warning("У тебя нет желания лезть к [src] в трусы. Жучок надо крепить на одежду!"))
to_chat(user, span_warning("У тебя нет желания лезть к [src.declent_ru(GENITIVE)] в трусы. Жучок надо крепить на одежду!"))
return TRUE

var/obj/item/radio/spy_spider/spy_spider = I
Expand All @@ -127,7 +134,7 @@
user.unEquip(spy_spider)
spy_spider.forceMove(clothing_for_attach)
clothing_for_attach.spy_spider_attached = spy_spider
to_chat(user, span_info("Ты незаметно прикрепляешь жучок к одежде [src]."))
to_chat(user, span_info("Ты незаметно прикрепляешь жучок к одежде [src.declent_ru(ACCUSATIVE)]."))
return TRUE

/obj/item/clothing/suit/storage/attackby__legacy__attackchain(obj/item/W as obj, mob/user as mob, params)
Expand All @@ -138,19 +145,17 @@
// Spy spider detection
/obj/item/detective_scanner/scan(atom/A, mob/user)
. = ..()
var/found_spy_device = FALSE

if(!scanning)
scanning = TRUE

if(istype(A, /obj/item/clothing))
var/obj/item/clothing/scanned_clothing = A
if(scanned_clothing.spy_spider_attached)
found_spy_device = TRUE

if(found_spy_device)
sleep(1 SECONDS)
add_log(span_info("<B>Найдено шпионское устройство!</B>"))
if(!(/obj/item/clothing/proc/remove_spy_spider in A.verbs))
add_verb(A, /obj/item/clothing/proc/remove_spy_spider)
if(istype(A, /obj/item/clothing))
var/obj/item/clothing/scanned_clothing = A
usr.visible_message("[capitalize(usr.declent_ru(NOMINATIVE))] сканирует одежду на наличие шпиоского устройства.")

scanning = FALSE
if(scanned_clothing.spy_spider_attached)
// Triger /obj/item/clothing/Topic
add_log(span_info("<a href='byond://?src=[scanned_clothing.UID()];remove_spy_spider=[scanned_clothing.spy_spider_attached.UID()];' class='warning'><b>Найдено шпионское устройство!</b></a>"))
else
usr.visible_message("Но ничего не находит")
scanning = FALSE

0 comments on commit 9e859b9

Please sign in to comment.