From 33b465c14cf9681bc0ed45e7f25507a3a8767e93 Mon Sep 17 00:00:00 2001 From: PlayerUnknown14 Date: Tue, 12 Nov 2024 10:36:58 +0700 Subject: [PATCH 01/29] =?UTF-8?q?=D0=A2=D1=8B=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/game/machinery/adv_med.dm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index f98aed6eb68..fc1a44ec404 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -1,5 +1,14 @@ /obj/machinery/bodyscanner name = "body scanner" + desc = "Сложное медицинское устройство, используется для сканирования физического состояния гуманоидов." + ru_names = list( + NOMINATIVE = "медицинский сканер", + GENITIVE = "медицинского сканера", + DATIVE = "медицинскому сканеру", + ACCUSATIVE = "медицинский сканер", + INSTRUMENTAL = "медицинским сканером", + PREPOSITIONAL = "медицинском сканере" + ) icon = 'icons/obj/machines/cryogenic2.dmi' icon_state = "bodyscanner-open" density = TRUE @@ -31,7 +40,7 @@ . = ..() if(occupant) if(occupant.is_dead()) - . += span_warning("You see [occupant.name] inside. [occupant.p_they(TRUE)] [occupant.p_are()] dead!>") + . += span_warning("Вы видите гуманоида внутри. Это [occupant.name]. [genderize_ru(occupant.gender, "Он мёртв", "")]!") else . += span_notice("You see [occupant.name] inside.") if(Adjacent(user)) From 057eaf1aae986258ccc5c3bb699f0be52e0655dd Mon Sep 17 00:00:00 2001 From: PlayerUnknown14 Date: Tue, 12 Nov 2024 17:18:32 +0700 Subject: [PATCH 02/29] =?UTF-8?q?=D0=A2=D1=8B=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/game/machinery/adv_med.dm | 166 +++++++++--------- code/modules/surgery/organs/organ_external.dm | 2 +- 2 files changed, 84 insertions(+), 84 deletions(-) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index fc1a44ec404..dbf416e23d1 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -40,11 +40,11 @@ . = ..() if(occupant) if(occupant.is_dead()) - . += span_warning("Вы видите гуманоида внутри. Это [occupant.name]. [genderize_ru(occupant.gender, "Он мёртв", "")]!") + . += span_warning("Вы видите гуманоида внутри. Это [occupant.name]. [genderize_ru(occupant.gender, "Он мёртв", "Она мертва", "Оно мертво", "Они мертвы")]!") else - . += span_notice("You see [occupant.name] inside.") + . += span_notice("Вы видите гуманоида внутри. Это [occupant.name].") if(Adjacent(user)) - . += span_info("You can Alt-Click to eject the current occupant. Click-drag someone to the scanner to place them inside.") + . += span_info("Используйте Alt-ЛКМ, чтобы вытащить пациента. Наведите курсор на пациента, зажмите ЛКМ и перетяните на [declent_ru(ACCUSATIVE)], чтобы поместить пациента внутрь.") /obj/machinery/bodyscanner/update_icon_state() @@ -77,17 +77,17 @@ if(grabber.grab_state < GRAB_AGGRESSIVE || !ishuman(grabbed_thing)) return . if(panel_open) - to_chat(grabber, span_warning("Close the maintenance panel first.")) + balloon_alert(grabber, "сначала закройте техпанель") return . var/mob/living/carbon/human/target = grabbed_thing if(occupant) - to_chat(grabber, span_warning("[src] is already occupied!")) + balloon_alert(grabber, "внутри кто-то есть!") return . if(target.abiotic()) - to_chat(grabber, span_warning("Subject cannot have abiotic items on.")) + balloon_alert(grabber, "руки пациента заняты") return . if(target.has_buckled_mobs()) //mob attached to us - to_chat(grabber, span_warning("[grabbed_thing] will not fit into the [src] because [grabbed_thing.p_they()] [grabbed_thing.p_have()] a slime latched onto [grabbed_thing.p_their()] head.")) + to_chat(grabber, span_warning("[grabbed_thing] не помест[pluralize_ru(grabbed_thing, "ит", "ят")]ся в [declent_ru(ACCUSATIVE)], пока на [genderize_ru(grabbed_thing, "нём", "ней", "нём", "них")] сидит слайм.")) return . grabbed_thing.forceMove(src) occupant = grabbed_thing @@ -110,10 +110,10 @@ if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return if(occupant) - to_chat(user, span_notice("The scanner is occupied.")) + balloon_alert(user, "внутри кто-то есть!") return if(panel_open) - to_chat(user, span_notice("Close the maintenance panel first.")) + balloon_alert(user, "сначала закройте техпанель") return setDir(turn(dir, -90)) @@ -131,24 +131,24 @@ if(!ishuman(user) && !isrobot(user)) return FALSE //not a borg or human if(panel_open) - to_chat(user, span_notice("Close the maintenance panel first.")) + balloon_alert(user, "сначала закройте техпанель") return TRUE //panel open if(occupant) - to_chat(user, span_notice("[src] is already occupied.")) + balloon_alert(user, "внутри кто-то есть!") return TRUE //occupied if(H.buckled) return FALSE if(H.abiotic()) - to_chat(user, span_notice("Subject cannot have abiotic items on.")) + balloon_alert(user, "ваши руки заняты") return TRUE if(H.has_buckled_mobs()) //mob attached to us - to_chat(user, span_warning("[H] will not fit into [src] because [H.p_they()] [H.p_have()] a slime latched onto [H.p_their()] head.")) + to_chat(user, span_warning("Вы не поместитесь в [declent_ru(ACCUSATIVE)], пока на вас сидит слайм.")) return TRUE if(H == user) - visible_message("[user] climbs into [src].") + visible_message("[user] залезает в [declent_ru(ACCUSATIVE)].") else - visible_message("[user] puts [H] into the body scanner.") + visible_message("[user] укладывает [H] в [declent_ru(ACCUSATIVE)].") add_fingerprint(user) H.forceMove(src) @@ -175,7 +175,7 @@ return // you cant reach that if(panel_open) - to_chat(user, span_notice("Close the maintenance panel first.")) + balloon_alert(user, "сначала закройте техпанель") return add_fingerprint(user) @@ -184,10 +184,10 @@ /obj/machinery/bodyscanner/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/card/id)) if(inserted_id) - user.balloon_alert(user, "занято") + balloon_alert(user, "слот ID карты занят") else if(user.drop_transfer_item_to_loc(I, src)) inserted_id = I - user.balloon_alert(user, "карта вставлена") + balloon_alert(user, "карта вставлена") . = ..() @@ -199,7 +199,7 @@ /obj/machinery/bodyscanner/verb/eject() set src in oview(1) set category = "Object" - set name = "Eject Body Scanner" + set name = "Освободить медицинский сканер" if(usr.incapacitated() || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED)) return @@ -221,7 +221,7 @@ if(!inserted_id) return inserted_id.forceMove(loc) - inserted_id = null + inserted_id = null/ SStgui.update_uis(src) /obj/machinery/bodyscanner/force_eject_occupant(mob/target) @@ -398,23 +398,23 @@ return isPrinting = TRUE if(GLOB.copier_items_printed >= GLOB.copier_max_items) - visible_message(span_warning("Nothing happens. Printing device is broken?")) + visible_message(span_warning("Ничего не происходит. Устройство печати сломано?")) if(!GLOB.copier_items_printed_logged) message_admins("Photocopier cap of [GLOB.copier_max_items] papers reached, all photocopiers/printers are now disabled. This may be the cause of any lag.") GLOB.copier_items_printed_logged = TRUE sleep(3 SECONDS) isPrinting = FALSE return - visible_message(span_notice("[src] rattles and prints out a sheet of paper.")) + visible_message(span_notice("[capitalize(declent_ru(NOMINATIVE))] дребезжит, после чего из окна печати выпадает лист бумаги.")) playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, TRUE) sleep(3 SECONDS) var/obj/item/paper/P = new /obj/item/paper(loc) - var/name = occupant ? occupant.name : "Unknown" - P.info = "
Body Scan - [name]

" - P.info += "Time of scan: [station_time_timestamp()]

" + var/name = occupant ? occupant.name : "Неизвестный" + P.info = "
Отчёт по сканированию пациента - [name]

" + P.info += "Время сканирования [station_time_timestamp()]

" P.info += "[generate_printing_text()]" - P.info += "

Notes:
" - P.name = "Body Scan - [name]" + P.info += "

Заметки:
" + P.name = "Отчёт по сканированию пациента - [name]" isPrinting = FALSE if("insurance") do_insurance_collection(usr, occupant, inserted_id ? inserted_id.associated_account_number : null) @@ -426,17 +426,17 @@ /obj/machinery/bodyscanner/proc/generate_printing_text() var/dat = "" - dat = "Occupant Statistics:
" //Blah obvious + dat = "Состояние пациента:
" //Blah obvious if(istype(occupant)) //is there REALLY someone in there? var/t1 switch(occupant.stat) // obvious, see what their status is if(0) - t1 = "Conscious" + t1 = "в сознании" if(1) - t1 = "Unconscious" + t1 = "без сознания" else - t1 = "*dead*" - dat += "[occupant.health > 50 ? "" : ""]\tHealth %: [occupant.health], ([t1])
" + t1 = "*[genderize_ru(occupant.gender, "мёртв", "мертва", "мертво", "мертвы")]*" + dat += "[occupant.health > 50 ? "" : ""]\tПроцентная оценка состояния: [occupant.health]%, ([t1])
" var/found_disease = FALSE for(var/thing in occupant.diseases) @@ -446,63 +446,63 @@ found_disease = TRUE break if(found_disease) - dat += "Disease detected in occupant.
" + dat += "У пациента выявлено заболевание
" var/extra_font = null extra_font = (occupant.getBruteLoss() < 60 ? "" : "") - dat += "[extra_font]\t-Brute Damage %: [occupant.getBruteLoss()]
" + dat += "[extra_font]\t-Травмы: [occupant.getBruteLoss()]

" extra_font = (occupant.getOxyLoss() < 60 ? "" : "") - dat += "[extra_font]\t-Respiratory Damage %: [occupant.getOxyLoss()]
" + dat += "[extra_font]\t-Удушение: [occupant.getOxyLoss()]

" extra_font = (occupant.getToxLoss() < 60 ? "" : "") - dat += "[extra_font]\t-Toxin Content %: [occupant.getToxLoss()]
" + dat += "[extra_font]\t-Токсины: [occupant.getToxLoss()]

" extra_font = (occupant.getFireLoss() < 60 ? "" : "") - dat += "[extra_font]\t-Burn Severity %: [occupant.getFireLoss()]
" + dat += "[extra_font]\t-Ожоги: [occupant.getFireLoss()]

" extra_font = (occupant.radiation < 10 ?"" : "") - dat += "[extra_font]\tRadiation Level %: [occupant.radiation]
" + dat += "[extra_font]\tРадиация: [occupant.radiation]

" extra_font = (occupant.getCloneLoss() < 1 ?"" : "") - dat += "[extra_font]\tGenetic Tissue Damage %: [occupant.getCloneLoss()]
" + dat += "[extra_font]\tГенетическое повреждение: [occupant.getCloneLoss()]
" extra_font = (occupant.getBrainLoss() < 1 ?"" : "") - dat += "[extra_font]\tApprox. Brain Damage %: [occupant.getBrainLoss()]
" + dat += "[extra_font]\tПовреждение мозга: [occupant.getBrainLoss()]
" - dat += "Paralysis Summary %: [occupant.AmountParalyzed()] ([round(occupant.AmountParalyzed() / 10)] seconds left!)
" - dat += "Body Temperature: [occupant.bodytemperature-T0C]°C ([occupant.bodytemperature*1.8-459.67]°F)
" + dat += "Паралич тела: [occupant.AmountParalyzed()] ([round(occupant.AmountParalyzed() / 10)] секунд осталось!)
" + dat += "Температура тела: [occupant.bodytemperature-T0C]°C ([occupant.bodytemperature*1.8-459.67]°F)
" dat += "
" if(occupant.has_brain_worms()) - dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
" + dat += "В лобной доле обнаружено крупное образование, возможно, злокачественное. Рекомендуется хирургическое удаление." var/blood_percent = round((occupant.blood_volume / BLOOD_VOLUME_NORMAL)) blood_percent *= 100 extra_font = (occupant.blood_volume > 448 ? "" : "") - dat += "[extra_font]\tBlood Level %: [blood_percent] ([occupant.blood_volume] units)
" + dat += "[extra_font]\tУровень крови: [blood_percent] ([occupant.blood_volume] u)

" if(occupant.reagents) - dat += "Epinephrine units: [occupant.reagents.get_reagent_amount("Epinephrine")] units
" - dat += "Ether: [occupant.reagents.get_reagent_amount("ether")] units
" + dat += "Эпинефрин: [occupant.reagents.get_reagent_amount("Epinephrine")] u
" + dat += "Эфир: [occupant.reagents.get_reagent_amount("ether")] u
" extra_font = (occupant.reagents.get_reagent_amount("silver_sulfadiazine") < 30 ? "" : "") - dat += "[extra_font]\tSilver Sulfadiazine: [occupant.reagents.get_reagent_amount("silver_sulfadiazine")]
" + dat += "[extra_font]\tСульфадиазин серебра: [occupant.reagents.get_reagent_amount("silver_sulfadiazine")] u

" extra_font = (occupant.reagents.get_reagent_amount("styptic_powder") < 30 ? "" : "") - dat += "[extra_font]\tStyptic Powder: [occupant.reagents.get_reagent_amount("styptic_powder")] units
" + dat += "[extra_font]\tКровоостанавливающая пудра: [occupant.reagents.get_reagent_amount("styptic_powder")] u
" extra_font = (occupant.reagents.get_reagent_amount("salbutamol") < 30 ? "" : "") - dat += "[extra_font]\tSalbutamol: [occupant.reagents.get_reagent_amount("salbutamol")] units
" + dat += "[extra_font]\tСальбутамол: [occupant.reagents.get_reagent_amount("salbutamol")] u
" dat += "
" dat += "" - dat += "" - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" + dat += "" + dat += "" dat += "" for(var/obj/item/organ/external/e as anything in occupant.bodyparts) @@ -518,74 +518,74 @@ var/internal_bleeding = "" var/lung_ruptured = "" if(e.has_internal_bleeding()) - internal_bleeding = "
Internal bleeding" + internal_bleeding = "
Внутреннее кровотечение" if(istype(e, /obj/item/organ/external/chest) && occupant.is_lung_ruptured()) - lung_ruptured = "Lung ruptured:" + lung_ruptured = "Пробито лёгкое" if(e.is_splinted()) - splint = "Splinted:" + splint = "Наложена шина" if(e.has_fracture()) - AN = "[e.broken_description]:" + AN = "[e.broken_description]" if(e.is_dead()) - dead = "DEAD:" + dead = "Мертво" if(e.is_robotic()) - robot = "Robotic:" + robot = "Синтетическое" if(e.open) - open = "Open:" + open = "Открыто" switch(e.germ_level) if(INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + 200) - infected = "Mild Infection:" + infected = "Лёгкая инфекция" if(INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300) - infected = "Mild Infection+:" + infected = "Лёгкая инфекция+" if(INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400) - infected = "Mild Infection++:" + infected = "Лёгкая инфекция++" if(INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200) - infected = "Acute Infection:" + infected = "Острая инфекция" if(INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300) - infected = "Acute Infection+:" + infected = "Острая инфекция+" if(INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_TWO + 399) - infected = "Acute Infection++:" + infected = "Острая инфекция++" if(INFECTION_LEVEL_TWO + 400 to INFINITY) - infected = "Septic:" + infected = "Сепсис" if(LAZYLEN(e.embedded_objects) || e.hidden) - imp += "Unknown body present:" + imp += "Обнаружено инородное тело" if(!AN && !open && !infected && !imp) - AN = "None:" + AN = "Отсутствуют" dat += "" dat += "" for(var/obj/item/organ/internal/organ as anything in occupant.internal_organs) var/mech = organ.desc - var/infection = "None" + var/infection = "Отсутствуют" var/dead = "" if(organ.is_dead()) - dead = "DEAD:" + dead = "Мертво" switch(organ.germ_level) if(1 to INFECTION_LEVEL_ONE + 200) - infection = "Mild Infection:" + infection = "Лёгкая инфекция" if(INFECTION_LEVEL_ONE + 200 to INFECTION_LEVEL_ONE + 300) - infection = "Mild Infection+:" + infection = "Лёгкая инфекция+" if(INFECTION_LEVEL_ONE + 300 to INFECTION_LEVEL_ONE + 400) - infection = "Mild Infection++:" + infection = "Лёгкая инфекция++" if(INFECTION_LEVEL_TWO to INFECTION_LEVEL_TWO + 200) - infection = "Acute Infection:" + infection = "Острая инфекция" if(INFECTION_LEVEL_TWO + 200 to INFECTION_LEVEL_TWO + 300) - infection = "Acute Infection+:" + infection = "Острая инфекция+" if(INFECTION_LEVEL_TWO + 300 to INFECTION_LEVEL_TWO + 399) - infection = "Acute Infection++:" + infection = "Острая инфекция++" if(INFECTION_LEVEL_TWO + 400 to INFINITY) - infection = "Septic:" + infection = "Сепсис" dat += "" - dat += "" + dat += "" dat += "" dat += "
OrganBurn DamageBrute DamageOther WoundsОрганОжогиТравмыДругие повреждения
[e.name][e.burn_dam][e.brute_dam][robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured][dead]
[organ.name]N/A[organ.damage][infection]:[mech][dead][organ.name]Н/Д[organ.damage][infection]:[mech][dead]
" if(HAS_TRAIT(occupant, TRAIT_BLIND)) - dat += "Cataracts detected.
" + dat += "Обнаружена катаракта.
" if(HAS_TRAIT(occupant, TRAIT_COLORBLIND)) - dat += "Photoreceptor abnormalities detected.
" + dat += "Обнаружены нарушения в работе фоторецепторов.
" if(HAS_TRAIT(occupant, TRAIT_NEARSIGHTED)) - dat += "Retinal misalignment detected.
" + dat += "Обнаружено смещение сетчатки.
" else - dat += "[src] is empty." + dat += "[capitalize(declent_ru(NOMINATIVE))] пуст." return dat diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 4eacc7768a4..3b83f97fe75 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -950,7 +950,7 @@ Note that amputating the affected organ does in fact remove the infection from t INVOKE_ASYNC(owner, TYPE_PROC_REF(/mob, emote), "scream") status |= ORGAN_BROKEN - broken_description = pick("broken", "fracture", "hairline fracture") + broken_description = pick("смещение кости", "перелом", "микротрещина") perma_injury = brute_dam // Fractures have a chance of getting you out of restraints From fcba63ace5e8c0bd77865d094ea4d96d1b5bafdb Mon Sep 17 00:00:00 2001 From: PlayerUnknown14 Date: Wed, 13 Nov 2024 09:16:39 +0700 Subject: [PATCH 03/29] =?UTF-8?q?=D0=A1=D0=BB=D0=B8=D0=BF=D0=B5=D1=80=20?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BA=D0=B0=D0=BD=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/game/machinery/Sleeper.dm | 83 ++++++------ code/game/machinery/adv_med.dm | 41 +++--- code/modules/surgery/organs/organ_external.dm | 2 +- tgui/packages/tgui/interfaces/BodyScanner.js | 124 +++++++++--------- tgui/packages/tgui/interfaces/Sleeper.js | 64 +++++---- tgui/public/tgui.bundle.js | 42 +++--- 6 files changed, 182 insertions(+), 174 deletions(-) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 5bbc3454cef..8e045826bcb 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -6,6 +6,15 @@ /obj/machinery/sleeper name = "Sleeper" + desc = "Медицинское устройство, предназначено для стабилизации пациентов и манипуляций с веществами в кровотоке." + ru_names = list( + NOMINATIVE = "слипер", + GENITIVE = "слипера", + DATIVE = "слиперу", + ACCUSATIVE = "слипер", + INSTRUMENTAL = "слипером", + PREPOSITIONAL = "слипере" + ) icon = 'icons/obj/machines/cryogenic2.dmi' icon_state = "sleeper-open" var/base_icon = "sleeper" @@ -118,7 +127,7 @@ if(world.timeofday > (R.last_addiction_dose + ADDICTION_SPEEDUP_TIME)) // 2.5 minutes addiction_removal_chance = 10 if(prob(addiction_removal_chance)) - to_chat(occupant, span_notice("You no longer feel reliant on [R.name]!")) + to_chat(occupant, span_notice("Вы больше не чувствуете себя зависимым от [R.name]!")) occupant.reagents.addiction_list.Remove(R) qdel(R) @@ -140,7 +149,7 @@ return TRUE if(panel_open) - to_chat(user, span_notice("Close the maintenance panel first.")) + balloon_alert(user, "сначала закройте техпанель") return add_fingerprint(user) @@ -260,7 +269,7 @@ if(!controls_inside && usr == occupant) return if(panel_open) - to_chat(usr, span_notice("Close the maintenance panel first.")) + balloon_alert(usr, "сначала закройте техпанель") return if(stat & (NOPOWER|BROKEN)) return @@ -271,7 +280,7 @@ if(!occupant) return if(occupant.stat == DEAD) - to_chat(usr, span_danger("This person has no life to preserve anymore. Take [occupant.p_them()] to a department capable of reanimating them.")) + to_chat(usr, span_danger("Пациент мёртв, ввод веществ невозможен.")) return var/chemical = params["chemid"] var/amount = text2num(params["amount"]) @@ -280,7 +289,7 @@ if(occupant.health > min_health || (chemical in emergency_chems)) inject_chemical(usr, chemical, amount) else - to_chat(usr, span_danger("This person is not in good enough condition for sleepers to be effective! Use another means of treatment, such as cryogenics!")) + to_chat(usr, span_danger("Дальнейший ввод веществ неэффективен. Рекомендуется проведение более эффективных лечебных процедур.")) if("removebeaker") remove_beaker() if("togglefilter") @@ -306,15 +315,13 @@ if(istype(I, /obj/item/reagent_containers/glass)) add_fingerprint(user) if(beaker) - to_chat(user, span_warning("The sleeper has a beaker already.")) + balloon_alert(user, "слот для ёмкости уже занят") return ATTACK_CHAIN_PROCEED if(!user.drop_transfer_item_to_loc(I, src)) return ..() beaker = I - user.visible_message( - span_notice("[user] adds [I] to [src]!"), - span_notice("You add [I] to [src]!"), - ) + visible_message(span_notice("[user] вставляет [I] в [declent_ru(ACCUSATIVE)].")) + balloon_alert(user, "ёмкость установлена") SStgui.update_uis(src) return ATTACK_CHAIN_BLOCKED_ALL @@ -327,26 +334,26 @@ return . var/mob/target = grabbed_thing if(panel_open) - to_chat(grabber, span_warning("Close the maintenance panel first.")) + balloon_alert(grabber, "сначала закройте техпанель") return . if(occupant) - to_chat(grabber, span_warning("[src] is already occupied!")) + balloon_alert(grabber, "внутри кто-то есть!") return . if(target.abiotic()) - to_chat(grabber, span_warning("Subject cannot have abiotic items on.")) + balloon_alert(grabber, "руки пациента заняты") return . if(target.has_buckled_mobs()) //mob attached to us - to_chat(grabber, span_warning("[target] will not fit into the [src] because [target.p_they()] [target.p_have()] a slime latched onto [target.p_their()] head.")) + to_chat(grabber, span_warning("[target] не помест[pluralize_ru(target, "ит", "ят")]ся в [declent_ru(ACCUSATIVE)], пока на [genderize_ru(target, "нём", "ней", "нём", "них")] сидит слайм.")) return . - visible_message("[grabber] starts putting [target] into [src].") + visible_message("[grabber] укладывает [target] в [declent_ru(ACCUSATIVE)].") if(!do_after(grabber, 2 SECONDS, target) || panel_open || !target || !grabber || grabber.pulling != target || !grabber.Adjacent(src)) return . target.forceMove(src) occupant = target update_icon(UPDATE_ICON_STATE) - to_chat(target, span_boldnotice("You feel cool air surround you. You go numb as your senses turn inward.")) + to_chat(target, span_boldnotice("Вы чувствуете, как вас окутывает холод. Вы цепенеете и расслабляетесь, внутренние процессы организма замедляются.")) add_fingerprint(grabber) SStgui.update_uis(src) @@ -357,7 +364,7 @@ /obj/machinery/sleeper/screwdriver_act(mob/user, obj/item/I) if(occupant) - to_chat(user, span_notice("The maintenance panel is locked.")) + balloon_alert(user, "сначала разблокируйте техпанель") return TRUE if(default_deconstruction_screwdriver(user, "[base_icon]-o", "[base_icon]-open", I)) return TRUE @@ -368,10 +375,10 @@ if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return if(occupant) - to_chat(user, span_notice("The scanner is occupied.")) + balloon_alert(user, "внутри кто-то есть!") return if(panel_open) - to_chat(user, span_notice("Close the maintenance panel first.")) + balloon_alert(user, "сначала закройте техпанель") return setDir(turn(dir, -90)) @@ -440,7 +447,7 @@ /obj/machinery/sleeper/proc/inject_chemical(mob/living/user, chemical, amount) if(!(chemical in possible_chems)) - to_chat(user, span_notice("The sleeper does not offer that chemical!")) + to_chat(user, span_notice("[capitalize(declent_ru(NOMINATIVE))] не может ввести такое вещество!")) return if(!(amount in amounts)) return @@ -450,14 +457,14 @@ if(occupant.reagents.get_reagent_amount(chemical) + amount <= max_chem) occupant.reagents.add_reagent(chemical, amount) else - to_chat(user, "You can not inject any more of this chemical.") + to_chat(user, "В кровотоке пациента уже слишком много данного вещества. Дальнейший ввод невозможен.") else - to_chat(user, "The patient rejects the chemicals!") + to_chat(user, "Организм пациента отвергает это вещество.") else - to_chat(user, "There's no occupant in the sleeper!") + to_chat(user, "[capitalize(declent_ru(NOMINATIVE))] пуст!") /obj/machinery/sleeper/verb/eject() - set name = "Eject Sleeper" + set name = "Освободить слипер" set category = "Object" set src in oview(1) @@ -471,7 +478,7 @@ /obj/machinery/sleeper/verb/remove_beaker() - set name = "Remove Beaker" + set name = "Достать ёмкость" set category = "Object" set src in oview(1) @@ -505,24 +512,24 @@ if(!istype(user.loc, /turf) || !istype(O.loc, /turf)) // are you in a container/closet/pod/etc? return if(panel_open) - to_chat(user, span_boldnotice("Close the maintenance panel first.")) + balloon_alert(user, "сначала закройте техпанель") return TRUE if(occupant) - to_chat(user, span_boldnotice("The sleeper is already occupied!")) + balloon_alert(user, "внутри кто-то есть!") return TRUE var/mob/living/L = O if(!istype(L) || L.buckled) return if(L.abiotic()) - to_chat(user, span_boldnotice("Subject cannot have abiotic items on.")) + balloon_alert(user, "руки пациента заняты") return TRUE if(L.has_buckled_mobs()) //mob attached to us - to_chat(user, span_warning("[L] will not fit into [src] because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.")) + to_chat(user, span_warning("[L] не помест[pluralize_ru(L, "ит", "ят")]ся в [declent_ru(ACCUSATIVE)], пока на [genderize_ru(L, "нём", "ней", "нём", "них")] сидит слайм.")) return TRUE if(L == user) - visible_message("[user] starts climbing into the sleeper.") + visible_message("[user] начинает залезать в [declent_ru(ACCUSATIVE)].") else - visible_message("[user] starts putting [L.name] into the sleeper.") + visible_message("[user] начинает помещать [L.name] в [declent_ru(ACCUSATIVE)].") . = TRUE INVOKE_ASYNC(src, PROC_REF(put_in), L, user) @@ -532,7 +539,7 @@ return if(occupant) - to_chat(user, span_boldnotice("The sleeper is already occupied!")) + balloon_alert(user, "внутри кто-то есть!") return if(!L) return @@ -540,7 +547,7 @@ L.forceMove(src) occupant = L update_icon(UPDATE_ICON_STATE) - to_chat(L, span_boldnotice("You feel cool air surround you. You go numb as your senses turn inward.")) + to_chat(L, span_boldnotice("Вы чувствуете, как вас окутывает холод. Вы цепенеете и расслабляетесь, внутренние процессы организма замедляются.")) add_fingerprint(user) SStgui.update_uis(src) @@ -549,21 +556,21 @@ return FALSE /obj/machinery/sleeper/verb/move_inside() - set name = "Enter Sleeper" + set name = "Залезть в слипер" set category = "Object" set src in oview(1) if(!ishuman(usr) || usr.incapacitated() || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.buckled) return if(occupant) - to_chat(usr, span_boldnotice("The sleeper is already occupied!")) + balloon_alert(usr, "внутри кто-то есть!") return if(panel_open) - to_chat(usr, span_boldnotice("Close the maintenance panel first.")) + balloon_alert(usr, "сначала закройте техпанель") return if(usr.has_buckled_mobs()) //mob attached to us - to_chat(usr, span_warning("[usr] will not fit into [src] because [usr.p_they()] [usr.p_have()] a slime latched onto [usr.p_their()] head.")) + to_chat(usr, span_warning("[usr] не помест[pluralize_ru(usr, "ит", "ят")]ся в [declent_ru(ACCUSATIVE)], пока на [genderize_ru(usr, "нём", "ней", "нём", "них")] сидит слайм.")) return - visible_message("[usr] starts climbing into the sleeper.") + visible_message("[usr] начинает залезать в [declent_ru(ACCUSATIVE)].") put_in(usr, usr) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index dbf416e23d1..67f3aa5a5d4 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -44,7 +44,7 @@ else . += span_notice("Вы видите гуманоида внутри. Это [occupant.name].") if(Adjacent(user)) - . += span_info("Используйте Alt-ЛКМ, чтобы вытащить пациента. Наведите курсор на пациента, зажмите ЛКМ и перетяните на [declent_ru(ACCUSATIVE)], чтобы поместить пациента внутрь.") + . += span_info("Наведите курсор на пациента, зажмите ЛКМ и перетяните на [declent_ru(ACCUSATIVE)], чтобы поместить пациента внутрь.") /obj/machinery/bodyscanner/update_icon_state() @@ -87,11 +87,13 @@ balloon_alert(grabber, "руки пациента заняты") return . if(target.has_buckled_mobs()) //mob attached to us - to_chat(grabber, span_warning("[grabbed_thing] не помест[pluralize_ru(grabbed_thing, "ит", "ят")]ся в [declent_ru(ACCUSATIVE)], пока на [genderize_ru(grabbed_thing, "нём", "ней", "нём", "них")] сидит слайм.")) + to_chat(grabber, span_warning("[target] не помест[pluralize_ru(target, "ит", "ят")]ся в [declent_ru(ACCUSATIVE)], пока на [genderize_ru(grabbed_thing, "нём", "ней", "нём", "них")] сидит слайм.")) return . - grabbed_thing.forceMove(src) - occupant = grabbed_thing + + target.forceMove(src) + occupant = target update_icon(UPDATE_ICON_STATE) + to_chat(target, span_boldnotice("Крышка [declent_ru(GENITIVE)] закрывается и окружающие звуки сразу становятся тише. Вы видите вокруг множество датчиков и слышите тихое гудение внутренних систем аппарата.")) add_fingerprint(grabber) SStgui.update_uis(src) @@ -139,7 +141,7 @@ if(H.buckled) return FALSE if(H.abiotic()) - balloon_alert(user, "ваши руки заняты") + balloon_alert(user, "руки пациента заняты") return TRUE if(H.has_buckled_mobs()) //mob attached to us to_chat(user, span_warning("Вы не поместитесь в [declent_ru(ACCUSATIVE)], пока на вас сидит слайм.")) @@ -154,6 +156,7 @@ H.forceMove(src) occupant = H update_icon(UPDATE_ICON_STATE) + to_chat(H, span_boldnotice("Крышка [declent_ru(GENITIVE)] закрывается и окружающие звуки сразу становятся тише. Вы видите вокруг множество датчиков и слышите тихое гудение внутренних систем аппарата.")) add_fingerprint(user) SStgui.update_uis(src) return TRUE @@ -221,7 +224,7 @@ if(!inserted_id) return inserted_id.forceMove(loc) - inserted_id = null/ + inserted_id = null SStgui.update_uis(src) /obj/machinery/bodyscanner/force_eject_occupant(mob/target) @@ -436,7 +439,7 @@ t1 = "без сознания" else t1 = "*[genderize_ru(occupant.gender, "мёртв", "мертва", "мертво", "мертвы")]*" - dat += "[occupant.health > 50 ? "" : ""]\tПроцентная оценка состояния: [occupant.health]%, ([t1])
" + dat += "[occupant.health > 50 ? "" : ""]\tПроцентная оценка состояния: [occupant.health]%, [t1]
" var/found_disease = FALSE for(var/thing in occupant.diseases) @@ -450,7 +453,7 @@ var/extra_font = null extra_font = (occupant.getBruteLoss() < 60 ? "" : "") - dat += "[extra_font]\t-Травмы: [occupant.getBruteLoss()]
" + dat += "[extra_font]\t-Физ. повреждения: [occupant.getBruteLoss()]

" extra_font = (occupant.getOxyLoss() < 60 ? "" : "") dat += "[extra_font]\t-Удушение: [occupant.getOxyLoss()]
" @@ -462,10 +465,10 @@ dat += "[extra_font]\t-Ожоги: [occupant.getFireLoss()]

" extra_font = (occupant.radiation < 10 ?"" : "") - dat += "[extra_font]\tРадиация: [occupant.radiation]
" + dat += "[extra_font]\tРадиационное поражение: [occupant.radiation]

" extra_font = (occupant.getCloneLoss() < 1 ?"" : "") - dat += "[extra_font]\tГенетическое повреждение: [occupant.getCloneLoss()]
" + dat += "[extra_font]\tГенетические повреждения: [occupant.getCloneLoss()]
" extra_font = (occupant.getBrainLoss() < 1 ?"" : "") dat += "[extra_font]\tПовреждение мозга: [occupant.getBrainLoss()]
" @@ -501,7 +504,7 @@ dat += "" dat += "Орган" dat += "Ожоги" - dat += "Травмы" + dat += "Физ. повреждения" dat += "Другие повреждения" dat += "" @@ -513,7 +516,6 @@ var/dead = "" var/robot = "" var/imp = "" - var/bled = "" var/splint = "" var/internal_bleeding = "" var/lung_ruptured = "" @@ -549,14 +551,16 @@ if(LAZYLEN(e.embedded_objects) || e.hidden) imp += "Обнаружено инородное тело" - if(!AN && !open && !infected && !imp) + if(!AN && !open && !infected && !imp && !internal_bleeding && !lung_ruptured) AN = "Отсутствуют" - dat += "[e.name][e.burn_dam][e.brute_dam][robot][bled][AN][splint][open][infected][imp][internal_bleeding][lung_ruptured][dead]" + dat += "[e.name][e.burn_dam][e.brute_dam][robot] [AN] [splint] [open] [infected] [imp] [internal_bleeding] [lung_ruptured] [dead]" dat += "" for(var/obj/item/organ/internal/organ as anything in occupant.internal_organs) - var/mech = organ.desc - var/infection = "Отсутствуют" + var/robot = "" + var/infection = "" var/dead = "" + if(organ.is_robotic()) + robot = "Синтетическое" if(organ.is_dead()) dead = "Мертво" switch(organ.germ_level) @@ -574,9 +578,10 @@ infection = "Острая инфекция++" if(INFECTION_LEVEL_TWO + 400 to INFINITY) infection = "Сепсис" - + if(!infection && !dead) + infection = "Отсутствуют" dat += "" - dat += "[organ.name]Н/Д[organ.damage][infection]:[mech][dead]" + dat += "[organ.name]Н/Д[organ.damage][infection] [robot] [dead]" dat += "" dat += "" if(HAS_TRAIT(occupant, TRAIT_BLIND)) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 3b83f97fe75..1827878b2fd 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -950,7 +950,7 @@ Note that amputating the affected organ does in fact remove the infection from t INVOKE_ASYNC(owner, TYPE_PROC_REF(/mob, emote), "scream") status |= ORGAN_BROKEN - broken_description = pick("смещение кости", "перелом", "микротрещина") + broken_description = pick("Смещение кости", "Перелом", "Микротрещина") perma_injury = brute_dam // Fractures have a chance of getting you out of restraints diff --git a/tgui/packages/tgui/interfaces/BodyScanner.js b/tgui/packages/tgui/interfaces/BodyScanner.js index 0ddad70e91f..7be4f8480af 100644 --- a/tgui/packages/tgui/interfaces/BodyScanner.js +++ b/tgui/packages/tgui/interfaces/BodyScanner.js @@ -16,33 +16,33 @@ import { import { Window } from '../layouts'; const stats = [ - ['good', 'Alive'], - ['average', 'Critical'], - ['bad', 'DEAD'], + ['good', 'Норма'], + ['average', 'Критическое состояние'], + ['bad', 'Зафиксирована смерть'], ]; const abnormalities = [ [ 'hasBorer', 'bad', - 'Large growth detected in frontal lobe,' + - ' possibly cancerous. Surgical removal is recommended.', + 'В лобной доле обнаружено крупное образование,' + + ' возможно, злокачественное. Рекомендуется хирургическое удаление.', ], - ['hasVirus', 'bad', 'Viral pathogen detected in blood stream.'], - ['blind', 'average', 'Cataracts detected.'], - ['colourblind', 'average', 'Photoreceptor abnormalities detected.'], - ['nearsighted', 'average', 'Retinal misalignment detected.'], + ['hasVirus', 'bad', 'Обнаружен вирус в кровотоке пациента.'], + ['blind', 'average', 'Обнаружена катаракта.'], + ['colourblind', 'average', 'Обнаружены нарушения в работе фоторецепторов'], + ['nearsighted', 'average', 'Обнаружено смещение сетчатки.'], ]; const damages = [ - ['Respiratory', 'oxyLoss'], - ['Brain', 'brainLoss'], - ['Toxin', 'toxLoss'], - ['Radioactive', 'radLoss'], - ['Brute', 'bruteLoss'], - ['Genetic', 'cloneLoss'], - ['Burn', 'fireLoss'], - ['Paralysis', 'paralysis'], + ['Удушение', 'oxyLoss'], + ['Повреждение мозга', 'brainLoss'], + ['Токсины', 'toxLoss'], + ['Радиационное поражение', 'radLoss'], + ['Физические повреждения', 'bruteLoss'], + ['Генетические повреждения', 'cloneLoss'], + ['Ожоги', 'fireLoss'], + ['Паралич тела', 'paralysis'], ]; const damageRange = { @@ -75,25 +75,25 @@ const reduceOrganStatus = (A) => { const germStatus = (i) => { if (i > 100) { if (i < 300) { - return 'mild infection'; + return 'Лёгкая инфекция'; } if (i < 400) { - return 'mild infection+'; + return 'Лёгкая инфекция+'; } if (i < 500) { - return 'mild infection++'; + return 'Лёгкая инфекция++'; } if (i < 700) { - return 'acute infection'; + return 'Острая инфекция'; } if (i < 800) { - return 'acute infection+'; + return 'Острая инфекция+'; } if (i < 900) { - return 'acute infection++'; + return 'Острая инфекция++'; } if (i >= 900) { - return 'septic'; + return 'Сепсис'; } } @@ -133,7 +133,7 @@ const BodyScannerMainOccupant = (props, context) => { const { occupant } = data; return (