diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 86ff1625744..5acee81fa5d 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -2669,7 +2669,7 @@ desc = "Высокотехнологичный имплант, позволяющий владельцам парных имплантов временно захватывать контроль над \ телом. Время контроля и радиус контроля повышаются по мере установки новых аналогичных имплантов. \ Часто используется на не обладающих разумом целях." - item = /obj/item/implanter/marionette + item = /obj/item/storage/box/syndie_kit/marionette cost = 10 /datum/uplink_item/affiliate/for_objective/proprietary_ssd diff --git a/code/modules/antagonists/traitor/affiliates/items/cybersun/marionette.dm b/code/modules/antagonists/traitor/affiliates/items/cybersun/marionette.dm index a88915dd1b4..abf2a1e4eb2 100644 --- a/code/modules/antagonists/traitor/affiliates/items/cybersun/marionette.dm +++ b/code/modules/antagonists/traitor/affiliates/items/cybersun/marionette.dm @@ -14,12 +14,13 @@ implant_state = "implant-syndicate" origin_tech = "programming=5;biotech=5;syndicate=3" activated = BIOCHIP_ACTIVATED_PASSIVE + trigger_causes = BIOCHIP_TRIGGER_DEATH_ANY implant_data = /datum/implant_fluff/marionette var/mob/living/captive_brain/host_brain var/code var/controlling = FALSE - var/charge = 3 MINUTES - var/max_charge = 3 MINUTES + var/charge = 180 + var/max_charge = 180 var/mob/living/carbon/human/mar_master = null var/obj/item/implant/mar_master/master_imp = null var/datum/action/innate/detach/detach_action = new @@ -46,15 +47,18 @@ detach() . = ..() +/obj/item/implant/marionette/death_trigger(mob/source, gibbed) + mar_master?.adjustBrainLoss(rand(5, 15)) + mar_master?.emote("scream") + mar_master?.Knockdown(3 SECONDS) + detach() + . = ..() + /obj/item/implant/marionette/Destroy() . = ..() STOP_PROCESSING(SSprocessing, src) /obj/item/implant/marionette/process(seconds_per_tick) - if(QDELETED(imp_in)) - qdel(src) - return - if (get_dist(imp_in, mar_master) > max_dist) detach() mar_master.balloon_alert(mar_master, "марионетка слишком далеко") @@ -178,7 +182,7 @@ origin_tech = "materials=2;biotech=4;syndicate=2" activated = BIOCHIP_ACTIVATED_ACTIVE implant_data = /datum/implant_fluff/mar_master - var/list/obj/item/implant/marionette/connected_imps + var/list/obj/item/implant/marionette/connected_imps = list() var/obj/item/implant/marionette/cur_connection = null /obj/item/implant/mar_master/removed(mob/living/carbon/human/source) @@ -195,20 +199,26 @@ return if(op == "Подключение импланта") - var/code = tgui_input_number(imp_in, "Укажите код подключаемого импланта.", "Подключение импланта") + var/code = tgui_input_number(imp_in, "Укажите код подключаемого импланта.", "Подключение импланта", 0, 999999, 111111) if(!code) + imp_in.balloon_alert(imp_in, "имплант не найден") return var/found = FALSE - for (var/mob/M in GLOB.mob_list) + for (var/mob/M in GLOB.human_list) var/obj/item/implant/marionette/imp = locate(/obj/item/implant/marionette) in M - if(imp.code == code) + + if (imp in connected_imps) + imp_in.balloon_alert(imp_in, "уже подключен") + return + + if(imp?.code == code) connected_imps += imp imp_in.balloon_alert(imp_in, "имплант подключен") found = TRUE if(!found) - imp_in.balloon_alert(imp_in, "неверный код") + imp_in.balloon_alert(imp_in, "имплант не найден") return @@ -216,7 +226,7 @@ var/list/marionettes = list() for (var/obj/item/implant/marionette/imp in connected_imps) var/mob/M = imp.imp_in - if (M) + if (M && M.stat != DEAD) marionettes[M.real_name] = imp var/choosen = input(imp_in, "Выберите к кому вы хотите подключиться.", "Подключение", null) as null|anything in marionettes @@ -254,4 +264,5 @@ var/obj/item/implant/marionette/imp = implanter.imp var/obj/item/paper/P = new /obj/item/paper(src) P.info = "Код импланта: [imp.code]
\ - Необходим для подключения импланта к импланту \"Мастер марионеток\"" + Необходим для подключения импланта к импланту \"Мастер марионеток\"
\ + Имплант можно подключить только когда он уже находится в марионетке."