From 28bf951285f35d8ae70c5dbdda188fa452363ad1 Mon Sep 17 00:00:00 2001 From: Vlad0s <110334878+VladOS-0@users.noreply.github.com> Date: Tue, 9 Jan 2024 10:19:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=80=D0=B8=D1=80=D1=83?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=81=D0=B8=D0=BD=D1=82=D0=BE=D0=B2=20(#655)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Добавил операцию очистки реагентов для синтетиков + минорные изменения * Изменение пары звуков и фикс хелпера * Правки текста * Добавил комментарии о том, как проки выглядели до изменения * Убрал нихуёвую такую ошибку, и мы ведь это затестмерджили, бляяяя * Update tgstation.dme * Update tgstation.dme * Update tgstation.dme --------- Co-authored-by: Марк Co-authored-by: Марк <80326524+SmiLeYre@users.noreply.github.com> --- code/__DEFINES/is_helpers.dm | 2 +- code/__DEFINES/mobs.dm | 4 +- code/modules/surgery/purge_corruption.dm | 1 + .../vlad0s_staff/code/robot_purge_reagents.dm | 118 ++++++++++++++++++ tgstation.dme | 1 + 5 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 modular_bluemoon/vlad0s_staff/code/robot_purge_reagents.dm diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 236232def98d..d54bdf77b578 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -81,7 +81,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define ismush(A) (is_species(A, /datum/species/mush)) #define isshadow(A) (is_species(A, /datum/species/shadow)) -#define isrobotic(A) (is_species(A, /datum/species/ipc) || is_species(A, /datum/species/synthliz) || is_species(A, /datum/species/mammal/synthetic)) +#define isrobotic(A) (HAS_TRAIT(A, TRAIT_ROBOTIC_ORGANISM)) // BLUEMOON EDIT - уборка хардкода [БЫЛО: #define isrobotic(A) (is_species(A, /datum/species/ipc) || is_species(A, /datum/species/synthliz) || is_species(A, /datum/species/mammal/synthetic))] #define isdwarf(A) (is_species(A, /datum/species/dwarf)) // Citadel specific species diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 8a70e8423e7f..394999bc3f7d 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -51,9 +51,9 @@ #define MOB_NANITES (1 << 10) /// Helper to figure out if an organ is organic -#define IS_ORGANIC_ORGAN(organ) (organ.organ_flags & ORGAN_ORGANIC) +#define IS_ORGANIC_ORGAN(organ) (!IS_ROBOTIC_ORGAN(organ)) // BLUEMOON EDIT - фикс прока (кривое, но и так сойдёт) [БЫЛО: #define IS_ORGANIC_ORGAN(organ) (organ.organ_flags & ORGAN_ORGANIC)] /// Helper to figure out if an organ is robotic -#define IS_ROBOTIC_ORGAN(organ) (organ.organ_flags & ORGAN_ROBOTIC) +#define IS_ROBOTIC_ORGAN(organ) (organ.organ_flags & ORGAN_SYNTHETIC) // BLUEMOON EDIT - фикс прока [БЫЛО: #define IS_ROBOTIC_ORGAN(organ) (organ.organ_flags & ORGAN_ROBOTIC)] // Organ defines for carbon mobs #define ORGAN_ORGANIC 1 diff --git a/code/modules/surgery/purge_corruption.dm b/code/modules/surgery/purge_corruption.dm index a9eeb33fe4d0..c4814ac2476f 100644 --- a/code/modules/surgery/purge_corruption.dm +++ b/code/modules/surgery/purge_corruption.dm @@ -82,6 +82,7 @@ Has a version for organic people and robotic/synthetic ones, considering robotic var/purged = target.getToxLoss(TOX_SYSCORRUPT) target.setToxLoss(0, toxins_type = TOX_SYSCORRUPT) target.radiation = 0 // BLUEMOON ADD - т.к. у них не процессятся реагенты, пока нет возможности вывести радиацию кроме как этой операцией + target.drunkenness = 0 // BLUEMOON ADD - радикальное отрезвление синтетиков target.Unconscious(round(purged * 0.2, 1)) return TRUE diff --git a/modular_bluemoon/vlad0s_staff/code/robot_purge_reagents.dm b/modular_bluemoon/vlad0s_staff/code/robot_purge_reagents.dm new file mode 100644 index 000000000000..362bb0df3ff2 --- /dev/null +++ b/modular_bluemoon/vlad0s_staff/code/robot_purge_reagents.dm @@ -0,0 +1,118 @@ +/*** + * Убирает все реагенты из ((крови)) синтетика, что может очень помочь, например, в передозировке систем клинером / синтанолом +***/ + +/datum/surgery/robot_purge_reagents + name = "Emergency Reagents Disposal" + desc = "Операция по удалению всех реагентов в системе робота на случай загрязнения инородными субстанциями." + requires_bodypart_type = BODYPART_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/override_safeties, + /datum/surgery_step/unscrew_liver_hatch, + /datum/surgery_step/eject_reagents, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close) + possible_locs = list(BODY_ZONE_CHEST) + target_mobtypes = list(/mob/living/carbon/human) + +/datum/surgery/robot_purge_reagents/can_start(mob/user, mob/living/carbon/target, obj/item/tool) + . = ..() + if(!.) + return + var/obj/item/organ/liver/liver = target.getorganslot(ORGAN_SLOT_LIVER) + if(isrobotic(target) && liver && IS_ROBOTIC_ORGAN(liver)) + return TRUE + return FALSE + + +/datum/surgery_step/unscrew_liver_hatch + name = "Открутить клапан процессора реагентов" + implements = list(TOOL_SCREWDRIVER = 95, TOOL_HEMOSTAT = 35, TOOL_WIRECUTTER = 30, /obj/item/pen = 15) + time = 25 + preop_sound = 'sound/items/screwdriver.ogg' + success_sound = 'sound/items/screwdriver2.ogg' + +/datum/surgery_step/unscrew_liver_hatch/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "Вы начинаете откручивать клапан системы обработки реагентов [target]...", + "[user] откручивает клапан на одной из трубок в груди [target].", + "[user] begins to perform surgery on [target].") + +/datum/surgery_step/unscrew_liver_hatch/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/obj/item/organ/liver/liver = target.getorganslot(ORGAN_SLOT_LIVER) + if(!liver || !isrobotic(target)) + user.visible_message("[user] не находит систему обработки реагентов в груди [target]...", "Вы понимаете, что система обработки реагентов [target] отсутствует.") + return FALSE + if(!IS_ROBOTIC_ORGAN(liver)) + user.visible_message("[user] обнаруживает несовместимость обработчика реагентов [target] с известными методиками очистки...", "Вы понимаете, что система обработки реагентов [target] не подходит для очистки.") + return FALSE + display_results(user, target, "Вы успешно откручиваете клапан резервуара с реагентами [target]...", + "[user] успешно откручивает клапан в груди [target].", + "[user] completes the surgery on [target].") + return TRUE + +/datum/surgery_step/unscrew_liver_hatch/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/obj/item/organ/liver/liver = target.getorganslot(ORGAN_SLOT_LIVER) + if(!liver || !isrobotic(target)) + user.visible_message("[user] не находит систему обработки реагентов в груди [target]...", "Вы понимаете, что система обработки реагентов [target] отсутствует.") + return FALSE + if(!IS_ROBOTIC_ORGAN(liver)) + user.visible_message("[user] обнаруживает несовместимость обработчика реагентов [target] с известными методиками очистки...", "Вы понимаете, что система обработки реагентов [target] не подходит для очистки.") + return FALSE + display_results(user, target, "Ваша отвёртка срывается и [target] вздрагивает всем корпусом, когда в [target.ru_na()] обработчике реагентов появляется новая пробоина...", + "[user] неудачно отсверливает клапан у обработчика реагентов [target], повреждая [target.ru_na()] систему.", + "[user] completes the surgery on [target].") + target.adjustOrganLoss(ORGAN_SLOT_LIVER, 20) + playsound(target, 'modular_bluemoon/krashly/sound/items/watersplash.ogg', 40, 1) + return FALSE + + +/datum/surgery_step/eject_reagents + name = "Открыть люк сброса реагентов (Мультитул)" + implements = list(TOOL_MULTITOOL = 95, TOOL_HEMOSTAT = 25, TOOL_CROWBAR = 25) + time = 40 + preop_sound = 'sound/machines/doorclick.ogg' + +/datum/surgery_step/eject_reagents/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "Вы начинаете открывать люк на резервуаре с реагентами в груди [target]...", + "[user] начинает открывать люк сброса реагентов у [target].", + "[user] begins to perform surgery on [target].") + +/datum/surgery_step/eject_reagents/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/obj/item/organ/liver/liver = target.getorganslot(ORGAN_SLOT_LIVER) + if(!liver || !isrobotic(target)) + user.visible_message("[user] не находит систему обработки реагентов в груди [target]...", "Вы понимаете, что система обработки реагентов [target] отсутствует.") + return FALSE + if(!IS_ROBOTIC_ORGAN(liver)) + user.visible_message("[user] обнаруживает несовместимость обработчика реагентов [target] с известными методиками очистки...", "Вы понимаете, что система обработки реагентов [target] не подходит для очистки.") + return FALSE + display_results(user, target, "Вы успешно открываете люк сброса реагентов у [target], высвобождая хранящиеся там реагенты...", + "[user] успешно открывает люк в груди [target], выплёскивая оттуда реагенты.", + "[user] completes the surgery on [target].") + playsound(target, 'sound/effects/splash.ogg', 70, TRUE, 1) + if(target.reagents) + target.reagents.clear_reagents() + new /obj/effect/decal/cleanable/oil/streak(get_turf(target)) + return TRUE + +/datum/surgery_step/eject_reagents/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/obj/item/organ/liver/liver = target.getorganslot(ORGAN_SLOT_LIVER) + if(!liver || !isrobotic(target)) + user.visible_message("[user] не находит систему обработки реагентов в груди [target]...", "Вы понимаете, что система обработки реагентов [target] отсутствует.") + return FALSE + if(!IS_ROBOTIC_ORGAN(liver)) + user.visible_message("[user] обнаруживает несовместимость обработчика реагентов [target] с известными методиками очистки...", "Вы понимаете, что система обработки реагентов [target] не подходит для очистки.") + return FALSE + display_results(user, target, "Вы слишком сильно нажимаете ломом и крышка процессора реагентов [target] отламывается, а часть жидкости, вылившаяся на [target.ru_na()] микросхемы вызывает короткое замыкание!", + "[user] случайно ломает люк резервуара с реагентами в груди [target], вызывая короткое замыкание от вылившихся реагентов.", + "[user] completes the surgery on [target].") + target.adjustOrganLoss(ORGAN_SLOT_LIVER, 35) + playsound(target, 'sound/effects/bang.ogg', 50, 1) + playsound(target, 'sound/effects/splat.ogg', 10, TRUE) + do_sparks(10, 5, target) + target.adjustFireLoss(20) + target.jitteriness += 10 + return FALSE diff --git a/tgstation.dme b/tgstation.dme index 83418b8342cb..4a5e19502619 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4383,6 +4383,7 @@ #include "modular_bluemoon\vlad0s_staff\code\synthdrinks\synth_drinks.dm" #include "modular_bluemoon\vlad0s_staff\code\synthdrinks\synth_drinks_containers.dm" #include "modular_bluemoon\vlad0s_staff\code\synthdrinks\synth_drinks_recipes.dm" +#include "modular_bluemoon\vlad0s_staff\code\robot_purge_reagents.dm" #include "modular_citadel\code\datums\components\souldeath.dm" #include "modular_citadel\code\datums\status_effects\chems.dm" #include "modular_citadel\code\game\objects\effects\temporary_visuals\souldeath.dm"