From 9e859b967d3e49e75f4c51054416e10fa16fc378 Mon Sep 17 00:00:00 2001 From: Drsmail <60036448+Drsmail@users.noreply.github.com> Date: Mon, 30 Dec 2024 20:39:44 +0300 Subject: [PATCH] Fix spy spider detection with detective scanner (#1619) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Что этот PR делает Фиксит баг с жучком, который не открепляется при скане. ## Почему это хорошо для игры Баги - это плохо. ## Тестирование https://github.com/user-attachments/assets/dbb862a8-a496-4197-a92b-66f5d7d39e02 Прикрепил жучок, просканировал вещь, получил жучок обратно в руку. ## Changelog :cl: fix: Шпионские жучки снова можно снимать, просканировав детективным сканером одежду, на которой он закреплён. /: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 --- modular_ss220/spy_spider/code/spy_spider.dm | 57 +++++++++++---------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/modular_ss220/spy_spider/code/spy_spider.dm b/modular_ss220/spy_spider/code/spy_spider.dm index 035004ede83f..effcfae87bfd 100644 --- a/modular_ss220/spy_spider/code/spy_spider.dm +++ b/modular_ss220/spy_spider/code/spy_spider.dm @@ -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 @@ -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 @@ -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) @@ -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("Найдено шпионское устройство!")) - 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("Найдено шпионское устройство!")) + else + usr.visible_message("Но ничего не находит") + scanning = FALSE