From d19e081b43158b05f07781dad29049ddcb7e7f7b Mon Sep 17 00:00:00 2001 From: Azzy <74739991+AzzyDreemurr13@users.noreply.github.com> Date: Sat, 8 Jun 2024 17:39:02 +0300 Subject: [PATCH 1/8] Update station_areas.dm (#13138) * Update station_areas.dm * Update station_areas.dm * Update station_areas.dm --------- Co-authored-by: maleyvich <104298869+maleyvich@users.noreply.github.com> --- code/game/area/station_areas.dm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/code/game/area/station_areas.dm b/code/game/area/station_areas.dm index 4d66321a8bba..f1d9e06f97f9 100644 --- a/code/game/area/station_areas.dm +++ b/code/game/area/station_areas.dm @@ -195,6 +195,7 @@ ADD_TO_GLOBAL_LIST(/area/station, the_station_areas) icon_state = "SolarcontrolA" //Hallway + /area/station/hallway sound_environment = SOUND_AREA_STATION_HALLWAY @@ -235,7 +236,7 @@ ADD_TO_GLOBAL_LIST(/area/station, the_station_areas) /area/station/hallway/secondary/entry name = "Entry Shuttles Hallway" - cases = list("станцинженерного отделанные доки", "станцинженерного отделанных доков", "станцинженерного отделанным докам", "станцинженерного отделанные доки", "станцинженерного отделанными доками", "станцинженерного отделанных доках") + cases = list("коридор доков", "коридора доков", "коридору доков", "коридор доков", "коридором доков", "коридоре доков") icon_state = "entry" /area/station/hallway/secondary/mine_sci_shuttle @@ -285,7 +286,7 @@ ADD_TO_GLOBAL_LIST(/area/station, the_station_areas) /area/station/bridge/comms name = "Communications Relay" - cases = list("коммуникацинженерного отделанное реле", "коммуникацинженерного отделанного реле", "коммуникацинженерного отделанному реле", "коммуникацинженерного отделанное реле", "коммуникацинженерного отделанным реле", "коммуникацинженерного отделанной реле") + cases = list("коммуникационное отделанное реле", "коммуникационного отделанного реле", "коммуникационному отделанному реле", "коммуникационное отделанное реле", "коммуникационным отделанным реле", "коммуникационном отделанном реле") icon_state = "tcomsatcham" sound_environment = SOUND_AREA_SMALL_METALLIC @@ -400,7 +401,7 @@ ADD_TO_GLOBAL_LIST(/area/station, the_station_areas) /area/station/civilian/library name = "Library" - cases = list("библинженерного отделатека", "библинженерного отделатеки", "библинженерного отделатеке", "библинженерного отделатека", "библинженерного отделатекой", "библинженерного отделатеке") + cases = list("библиотека", "библиотеки", "библиотеке", "библиотека", "библиотекой", "библиотеке") icon_state = "library" /area/station/civilian/chapel @@ -597,13 +598,13 @@ ADD_TO_GLOBAL_LIST(/area/station, the_station_areas) /area/station/medical/surgery name = "Operating Theatre 1" - cases = list("операцинженерного отделанная №1", "операцинженерного отделанной №1", "операцинженерного отделанной №1", "операцинженерного отделанная №1", "операцинженерного отделанной №1", "операцинженерного отделанной №1") + cases = list("операционная №1", "операционной №1", "операционной №1", "операционная №1", "операционной №1", "операционной №1") icon_state = "surgery" ambience = list('sound/ambience/surgery_1.ogg', 'sound/ambience/surgery_2.ogg') /area/station/medical/surgery2 name = "Operating Theatre 2" - cases = list("операцинженерного отделанная №2", "операцинженерного отделанной №2", "операцинженерного отделанной №2", "операцинженерного отделанная №2", "операцинженерного отделанной №2", "операцинженерного отделанной №2") + cases = list("операционная №2", "операционной №2", "операционной №2", "операционная №2", "операционной №2", "операционной №2") icon_state = "surgery" /area/station/medical/surgeryobs @@ -613,7 +614,7 @@ ADD_TO_GLOBAL_LIST(/area/station, the_station_areas) /area/station/medical/cryo name = "Cryogenics" - cases = list("кринженерного отделагенные камеры", "кринженерного отделагенных камер", "кринженерного отделагенным камерам", "кринженерного отделагенные камеры", "кринженерного отделагенными камерами", "кринженерного отделагенных камерах") + cases = list("криогенные камеры", "криогенных камерах", "криогенным камерам", "криогенные камеры", "криогенными камерами", "криогенных камерах") icon_state = "cryo" /area/station/medical/genetics @@ -803,7 +804,7 @@ ADD_TO_GLOBAL_LIST(/area/station, the_station_areas) /area/station/rnd/xenobiology name = "Xenobiology Lab" - cases = list("ксенобинженерного отделалогия", "ксенобинженерного отделалогии", "ксенобинженерного отделалогии", "ксенобинженерного отделалогия", "ксенобинженерного отделалогией", "ксенобинженерного отделалогии") + cases = list("ксенобиологии", "ксенобиологии", "ксенобиология", "ксенобиологией", "ксенобиологии") icon_state = "scixeno" /area/station/rnd/storage From e58a84d17c0bf9734ac6a92c89189898a2716c8e Mon Sep 17 00:00:00 2001 From: Azzy <74739991+AzzyDreemurr13@users.noreply.github.com> Date: Sat, 8 Jun 2024 17:49:04 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=20APC(3.0)=20(#13080)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Попытка 3.0 Тут все ок по вскоду * Update code/modules/power/apc.dm Co-authored-by: Victor <104298869+maleyvich@users.noreply.github.com> * Update code/modules/power/apc.dm Co-authored-by: Victor <104298869+maleyvich@users.noreply.github.com> * Update apc.dm Фиксы * проба пира * Update tgui.bundle.js * Update tgui.bundle.js * Update tgui.bundle.js * Update tgui.bundle.js * Update apc.dm Помощь от Людука ранее в howto-code Co-Authored-By: LudwigVonChesterfield <17705613+LudwigVonChesterfield@users.noreply.github.com> * Update code/modules/power/apc.dm Co-authored-by: Alexander V. * Update code/modules/power/apc.dm Co-authored-by: Alexander V. * Update code/modules/power/apc.dm Co-authored-by: Alexander V. * Update code/modules/power/apc.dm Co-authored-by: Alexander V. --------- Co-authored-by: Victor <104298869+maleyvich@users.noreply.github.com> Co-authored-by: LudwigVonChesterfield <17705613+LudwigVonChesterfield@users.noreply.github.com> Co-authored-by: Alexander V. --- code/__HELPERS/unsorted.dm | 10 +- code/datums/wires/apc.dm | 6 +- code/modules/power/apc.dm | 195 +++++++++--------- tgui/packages/tgui/interfaces/Apc.js | 56 ++--- tgui/packages/tgui/interfaces/Wires.js | 10 +- .../common/InterfaceLockNoticeBox.js | 10 +- tgui/public/tgui.bundle.js | 2 +- 7 files changed, 149 insertions(+), 140 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index bce96856d5ab..0c3785628578 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -685,7 +685,7 @@ Turf and target are seperate in case you want to teleport some distance from a t // Takes: Area type as text string or as typepath OR an instance of the area. // Returns: A list of all turfs in areas of that type of that type in the world. -// Please note that because of (loop in area) this is not really optimal, +// Please note that because of (loop in area) this is not really optimal, // but you probably have no choice /proc/get_area_turfs(areatype, subtypes=TRUE, filter_by_z = 0, ignore_blocked = FALSE) if(istext(areatype)) @@ -1645,12 +1645,12 @@ var/global/list/WALLITEMS = typecacheof(list( // Format a power value in W, kW, MW, or GW /proc/DisplayPower(powerused) if(powerused < 1000) // Less than a kW - return "[powerused] W" + return "[powerused] Вт" if(powerused < 1000000) // Less than a MW - return "[round((powerused * 0.001), 0.01)] kW" + return "[round((powerused * 0.001), 0.01)] кВт" if(powerused < 1000000000) // Less than a GW - return "[round((powerused * 0.000001), 0.001)] MW" - return "[round((powerused * 0.000000001), 0.0001)] GW" + return "[round((powerused * 0.000001), 0.001)] МВт" + return "[round((powerused * 0.000000001), 0.0001)] ГВТ" //Returns a list of all locations (except the area) the movable is within. /proc/get_nested_locs(atom/movable/AM, include_turf = FALSE) diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm index 6ed03fd7cfe7..31246dbd949f 100644 --- a/code/datums/wires/apc.dm +++ b/code/datums/wires/apc.dm @@ -10,9 +10,9 @@ var/global/const/APC_WIRE_AI_CONTROL = 8 /datum/wires/apc/get_status() var/obj/machinery/power/apc/A = holder . += ..() - . += "[(A.locked ? "The APC is locked." : "The APC is unlocked.")]" - . += "[(A.shorted ? "The APCs power has been shorted." : "The APC is working properly!")]" - . += "[(A.aidisabled ? "The 'AI control allowed' light is off." : "The 'AI control allowed' light is on.")]" + . += "[(A.locked ? "Электрический щит заблокирован." : "Электрический щит разблокирован.")]" + . += "[(A.shorted ? "Электрический щит закоротило." : "Электрический щит работает нормально.")]" + . += "[(A.aidisabled ? "Индикатор удалённого доступа не горит." : "Индикатор удалённого доступа горит.")]" /datum/wires/apc/can_use() var/obj/machinery/power/apc/A = holder diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 789818672605..9a6d3c866dd1 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -83,7 +83,8 @@ /obj/machinery/power/apc name = "area power controller" - desc = "A control terminal for the area electrical systems." + cases = list("электрический щит", "электрического щита", "электрическому щиту", "электрический щит", "электрическим щитом", "электрическом щите") + desc = "Устройство для распределения электроэнергии между потребителями в области." icon = 'icons/obj/power.dmi' icon_state = "apc0" anchored = TRUE @@ -166,6 +167,10 @@ opened = APC_COVER_OPENED operating = 0 name = "[area.name] APC" + for(var/i in 1 to length(cases)) + cases[i] = cases[i] + " [CASE(area, GENITIVE_CASE)]" + // for(var/i in cases) + // cases[cases.Find(case)] = case + " [CASE(area, GENITIVE_CASE)]" stat |= MAINT update_icon() addtimer(CALLBACK(src, PROC_REF(update)), 5) @@ -216,9 +221,13 @@ if(isarea(A) && src.areastring == null) src.area = A name = "[area.name] APC" + for(var/i in 1 to length(cases)) + cases[i] = cases[i] + " [CASE(area, GENITIVE_CASE)]" else src.area = get_area_by_name(areastring) name = "[area.name] APC" + for(var/i in 1 to length(cases)) + cases[i] = cases[i] + " [CASE(area, GENITIVE_CASE)]" area.apc = src update_icon() @@ -230,24 +239,24 @@ ..() if (in_range(user, src)) if(stat & BROKEN) - to_chat(user, "Looks broken.") + to_chat(user, "Похоже, не работает.") return if(opened != APC_COVER_CLOSED) if(has_electronics && terminal) - to_chat(user, "The cover is [opened == APC_COVER_REMOVED ? "removed" : "open"] and the power cell is [ cell ? "installed" : "missing"].") + to_chat(user, "Крышка [opened == APC_COVER_REMOVED ? "снята" : "открыта"] и [ cell ? "установлен" : "извлечён"] аккумулятор.") else if(!has_electronics && terminal) - to_chat(user, "There are some wires but no any electronics.") + to_chat(user, "Проводка подключена, но не хватает платы.") else if(has_electronics && !terminal) - to_chat(user, "Electronics installed but not wired.") + to_chat(user, "Плата установлена, но проводка не подключена.") else - to_chat(user, "There is no electronics nor connected wires.") + to_chat(user, "Не хватает платы и проводки.") else if(stat & MAINT) - to_chat(user, "The cover is closed. Something wrong with it: it doesn't work.") + to_chat(user, "Крышка закрыта, но, похоже, щиток сломан.") else if(malfhack) - to_chat(user, "The cover is broken. It may be hard to force it open.") + to_chat(user, "Крышка помята и не поддаётся.") else - to_chat(user, "The cover is closed.") + to_chat(user, "Крышка закрыта.") // update the APC icon to show the three base states // also add overlays for indicator lights @@ -417,24 +426,24 @@ if(isprying(W) && opened != APC_COVER_CLOSED) if(has_electronics == 1) if(terminal) - to_chat(user, "Disconnect wires first.") + to_chat(user, "Отключите щиток от питания.") return if(user.is_busy(src)) return - to_chat(user, "You are trying to remove the power control board...") // lpeters - fixed grammar issues + to_chat(user, "Вы пытаетесь извлечь плату...") // lpeters - fixed grammar issues if(W.use_tool(src, user, 50, volume = 50)) has_electronics = 0 area.poweralert(FALSE, src) if((stat & BROKEN) || malfhack) user.visible_message(\ - "[user.name] has broken the power control board inside [src.name]!",\ - "You broke the charred power control board and remove the remains.", - "You hear a crack!") + "[user.name] отломал плату в [CASE(src, PREPOSITIONAL_CASE)]!",\ + "Вы отломали сгоревшую плату и извлекли её остатки.", + "Что-то треснуло!") //SSticker.mode:apcs-- //XSI said no and I agreed. -rastaf0 else user.visible_message(\ - "[user.name] has removed the power control board from [src.name]!",\ - "You remove the power control board.") + "[user.name] извлёк плату из [CASE(src, GENITIVE_CASE)]!",\ + "Вы извлекли плату.") new /obj/item/weapon/module/power_control(loc) else if(opened != APC_COVER_REMOVED) // cover isn't removed opened = APC_COVER_CLOSED @@ -442,19 +451,19 @@ else if(isprying(W) && opened == APC_COVER_CLOSED) if(stat & BROKEN) - user.visible_message("[user.name] try open [src.name] cover.", "You try open [src.name] cover.") + user.visible_message("[user.name] пытается открыть крышку [CASE(src, GENITIVE_CASE)].", "Вы пытаетесь открыть крышку [CASE(src, GENITIVE_CASE)].") if(W.use_tool(src, user, 25, volume = 25)) opened = APC_COVER_OPENED locked = FALSE if(cell) - to_chat(user, "Power cell from [src.name] is dropped") + to_chat(user, "Из [CASE(src, GENITIVE_CASE)] выпал аккумулятор.") cell.forceMove(user.loc) cell = null update_icon() else if(!(stat & BROKEN) || !malfhack) if(coverlocked && !(stat & MAINT)) - to_chat(user, "The cover is locked and cannot be opened.") + to_chat(user, "Крышка [CASE(src, GENITIVE_CASE)] заблокирована.") return else opened = APC_COVER_OPENED @@ -462,81 +471,81 @@ else if(iswrenching(W) && opened != APC_COVER_CLOSED && (stat & BROKEN)) if(coverlocked) - to_chat(user, "Remove security APC bolts.") + to_chat(user, "Вы откручиваете защитные болты.") if(W.use_tool(src, user, 5, volume = 5)) coverlocked = FALSE update_icon() else - to_chat(user, "APC bolts alredy removed.") + to_chat(user, "Защитные болты уже откручены.") else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened != APC_COVER_CLOSED) // trying to put a cell inside if(cell) - to_chat(user, "There is a power cell already installed.") + to_chat(user, "В [CASE(src, PREPOSITIONAL_CASE)] уже есть аккумулятор.") return else if(stat & MAINT) - to_chat(user, "There is no connector for your power cell.") + to_chat(user, "В [CASE(src, PREPOSITIONAL_CASE)] отсутствует разъём для аккумулятора.") return user.drop_from_inventory(W, src) cell = W user.visible_message(\ - "[user.name] has inserted the power cell to [src.name]!",\ - "You insert the power cell.") + "[user.name] установил[VERB_RU(user)] аккумулятор в [CASE(src, ACCUSATIVE_CASE)]!",\ + "Вы устанавливаете аккумулятор в [CASE(src, ACCUSATIVE_CASE)].") chargecount = 0 update_icon() else if (isscrewing(W)) // haxing if(opened != APC_COVER_CLOSED) if(cell) - to_chat(user, "Close the APC first.") // Less hints more mystery! + to_chat(user, "Закройте крышку [CASE(src, GENITIVE_CASE)].") // Less hints more mystery! return else if(has_electronics == 1 && terminal) has_electronics = 2 stat &= ~MAINT playsound(src, 'sound/items/Screwdriver.ogg', VOL_EFFECTS_MASTER) - to_chat(user, "You screw the circuit electronics into place.") + to_chat(user, "Вы прикручиваете плату.") else if(has_electronics == 2) has_electronics = 1 stat |= MAINT playsound(src, 'sound/items/Screwdriver.ogg', VOL_EFFECTS_MASTER) - to_chat(user, "You unfasten the electronics.") + to_chat(user, "Вы откручиваете плату.") else // has_electronics == 0 - to_chat(user, "There is nothing to secure.") + to_chat(user, "Нечего прикручивать.") return update_icon() else if(emagged) - to_chat(user, "The interface is broken.") + to_chat(user, "Терминал сломан.") else if(!(stat & BROKEN)) wiresexposed = !wiresexposed - to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]") + to_chat(user, "Провода [wiresexposed ? "извлечены" : "вложены"]") update_icon() else if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card if(emagged) - to_chat(user, "The interface is broken.") + to_chat(user, "Терминал сломан.") else if(opened != APC_COVER_CLOSED) - to_chat(user, "You must close the cover to swipe an ID card.") + to_chat(user, "Закройте крышку [CASE(src, GENITIVE_CASE)].") else if(wiresexposed) - to_chat(user, "You must close the panel") + to_chat(user, "Закрутите крышку [CASE(src, GENITIVE_CASE)].") else if(stat & (BROKEN|MAINT)) - to_chat(user, "Nothing happens.") + to_chat(user, "Ничего не происходит.") else if(allowed(usr) && !wires.is_index_cut(APC_WIRE_IDSCAN)) locked = !locked - to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") + to_chat(user, "Вы [ locked ? "заблокировали" : "разблокировали"] терминал [CASE(src, GENITIVE_CASE)].") update_icon() else - to_chat(user, "Access denied.") + to_chat(user, "Доступ запрещён.") else if(istype(W, /obj/item/weapon/card/emag) && !(emagged || malfhack)) // trying to unlock with an emag card if(opened != APC_COVER_CLOSED) - to_chat(user, "You must close the cover to swipe an ID card.") + to_chat(user, "Закройте крышку [CASE(src, GENITIVE_CASE)], перед тем как провести ID картой.") else if(wiresexposed) - to_chat(user, "You must close the panel first") + to_chat(user, "Закрутите крышку [CASE(src, GENITIVE_CASE)].") else if(stat & (BROKEN|MAINT)) - to_chat(user, "Nothing happens.") + to_chat(user, "Ничего не происходит.") else if(user.is_busy(src)) return @@ -545,24 +554,24 @@ if(prob(50)) emagged = 1 locked = 0 - to_chat(user, "You emag the APC interface.") + to_chat(user, "Вы взламываете терминал [CASE(src, GENITIVE_CASE)].") update_icon() SSticker.hacked_apcs++ announce_hacker() else - to_chat(user, "You fail to [ locked ? "unlock" : "lock"] the APC interface.") + to_chat(user, "Ошибка [ locked ? "разблокировки" : "блокировки"] терминала [CASE(src, GENITIVE_CASE)].") else if(iscoil(W) && !terminal && opened != APC_COVER_CLOSED && has_electronics != 2) var/turf/TT = get_turf(src) if(TT.underfloor_accessibility < UNDERFLOOR_INTERACTABLE) - to_chat(user, "You must remove the floor plating in front of the APC first.") + to_chat(user, "Вскройте пол перед [CASE(src, ABLATIVE_CASE)].") return var/obj/item/stack/cable_coil/C = W if(C.get_amount() < 10) - to_chat(user, "You need more wires.") + to_chat(user, "Нужно больше проводов.") return if(user.is_busy()) return - to_chat(user, "You start adding cables to the APC frame...") + to_chat(user, "Вы вставляете провода в [CASE(src, ACCUSATIVE_CASE)].") if(C.use_tool(src, user, 20, volume = 50) && C.get_amount() >= 10) var/turf/T = get_turf_loc(src) var/obj/structure/cable/N = T.get_cable_node() @@ -573,8 +582,8 @@ return C.use(10) user.visible_message(\ - "[user.name] has added cables to the APC frame!",\ - "You add cables to the APC frame.") + "[user.name] подключил проводку в [CASE(src, PREPOSITIONAL_CASE)]!",\ + "Вы подключили проводку в [CASE(src, PREPOSITIONAL_CASE)].") make_terminal() terminal.connect_to_network() @@ -583,23 +592,23 @@ else if(istype(W, /obj/item/weapon/module/power_control) && opened != APC_COVER_CLOSED && has_electronics == 0 && !((stat & BROKEN) || malfhack)) if(user.is_busy()) return - to_chat(user, "You trying to insert the power control board into the frame...") + to_chat(user, "Вы пытаетесь установить плату в [CASE(src, ACCUSATIVE_CASE)]") if(W.use_tool(src, user, 10, volume = 50)) has_electronics = 1 - to_chat(user, "You place the power control board inside the frame.") + to_chat(user, "Вы устанавливаете плату в [CASE(src, ACCUSATIVE_CASE)].") qdel(W) else if(istype(W, /obj/item/weapon/module/power_control) && opened != APC_COVER_CLOSED && has_electronics == 0 && ((stat & BROKEN) || malfhack)) - to_chat(user, "You cannot put the board inside, the frame is damaged.") + to_chat(user, "Плата не подходит из-за поломки корпуса [CASE(src, GENITIVE_CASE)].") return else if(iswelding(W) && opened != APC_COVER_CLOSED && has_electronics == 0 && !terminal) if(user.is_busy()) return var/obj/item/weapon/weldingtool/WT = W if(WT.get_fuel() < 3) - to_chat(user, "You need more welding fuel to complete this task.") + to_chat(user, "Нужно больше топлива.") return - to_chat(user, "You start welding the APC frame...") + to_chat(user, "Вы режете корпус [CASE(src, GENITIVE_CASE)].") if(WT.use_tool(src, user, 50, amount = 3, volume = 50)) deconstruct(TRUE, user) return @@ -609,21 +618,21 @@ if(opened == APC_COVER_REMOVED) opened = APC_COVER_OPENED user.visible_message(\ - "[user.name] has replaced the damaged APC frontal panel with a new one.",\ - "You replace the damaged APC frontal panel with a new one.") + "[user.name] заменяет сломанную крышку [CASE(src, GENITIVE_CASE)].",\ + "Вы заменили сломанную крышку [CASE(src, GENITIVE_CASE)].") qdel(W) update_icon() else if(istype(W, /obj/item/apc_frame) && opened != APC_COVER_CLOSED && ((stat & BROKEN) || malfhack)) if(has_electronics) - to_chat(user, "You cannot repair this APC until you remove the electronics still inside.") + to_chat(user, "Перед починкой отключите и извлеките компоненты [CASE(src, GENITIVE_CASE)].") return if(user.is_busy()) return - to_chat(user, "You begin to replace the damaged APC frame...") + to_chat(user, "Вы заменяете сломанный корпус [CASE(src, GENITIVE_CASE)]...") if(W.use_tool(src, user, 50, volume = 50)) user.visible_message(\ - "[user.name] has replaced the damaged APC frame with new one.",\ - "You replace the damaged APC frame with new one.") + "[user.name] заменил[VERB_RU(user)] сломанный корпус [CASE(src, GENITIVE_CASE)].",\ + "Вы заменили сломанный корпус [CASE(src, GENITIVE_CASE)].") qdel(W) stat &= ~BROKEN malfai = null @@ -636,9 +645,9 @@ if(issilicon(user)) return wires.interact(user) user.SetNextMove(CLICK_CD_MELEE) - user.visible_message("The [src.name] has been hit with the [W.name] by [user.name]!", \ - "You hit the [src.name] with your [W.name]!", \ - "You hear bang") + user.visible_message("[user.name] ударил [CASE(src, ACCUSATIVE_CASE)] [CASE(W, ABLATIVE_CASE)]!", \ + "Вы ударили [CASE(src, ACCUSATIVE_CASE)] [CASE(W, ABLATIVE_CASE)]!", \ + "Вы слышите удар.") return wires.interact(user) else ..() @@ -650,15 +659,15 @@ if(!disassembled || emagged || malfhack || (stat & BROKEN) || opened == APC_COVER_REMOVED) new /obj/item/stack/sheet/metal(loc) user?.visible_message(\ - "[src] has been cut apart by [user.name] with the weldingtool.",\ - "You disassembled the broken APC frame.",\ - "You hear welding.") + "[user.name] режет [CASE(src, ACCUSATIVE_CASE)].",\ + "Вы демонтировали сломанный [CASE(src, ACCUSATIVE_CASE)].",\ + "Вы слышите сварку.") else new /obj/item/apc_frame(loc) user?.visible_message(\ - "[src] has been cut from the wall by [user.name] with the weldingtool.",\ - "You cut the APC frame from the wall.",\ - "You hear welding.") + "[user.name] срезает [CASE(src, ACCUSATIVE_CASE)] со стены.",\ + "Вы демонтировали [CASE(src, ACCUSATIVE_CASE)] со стены.",\ + "Вы слышите сварку.") ..() @@ -678,32 +687,32 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - to_chat(H, "The APC power currents surge eratically, damaging your chassis!") + to_chat(H, "Скачок напряжения в [CASE(src, PREPOSITIONAL_CASE)] повреждает ваш корпус!") H.adjustFireLoss(10,0) else if(src.cell && src.cell.charge > 500 && H.a_intent == INTENT_GRAB) if(H.nutrition < C.maxcharge*0.9) if(src.cell.charge) - to_chat(user, "You slot your fingers into the APC interface and start siphon off some of the stored charge for your own use.") + to_chat(user, "Вы вставляете провод в разъём [CASE(src, ACCUSATIVE_CASE)], чтобы подзарядиться.") while(H.nutrition < C.maxcharge) if(do_after(user,10,target = src) && H.a_intent == INTENT_GRAB) if(!src.cell) - to_chat(user, "There is no cell.") + to_chat(user, "Нет аккумулятора.") break else if(emagged || malfhack || (stat & (BROKEN|EMPED)) || shorted) break else if(H.nutrition > C.maxcharge*0.9) - to_chat(user, "You're fully charge.") + to_chat(user, "Ваш аккумулятор полностью заряжен.") break else if(src.cell.charge < src.cell.maxcharge*0.1) - to_chat (user, "There is not enough charge to draw from that APC.") + to_chat (user, "Напряжение в [CASE(src, PREPOSITIONAL_CASE)] слишком мало.") break else if(cell.use(500)) H.nutrition += C.maxcharge*0.1 - to_chat(user, "Draining... Battery has [round(100.0*H.nutrition/C.maxcharge)]% of charge.") + to_chat(user, "Зарядка. Уровень батареи: [round(100.0*H.nutrition/C.maxcharge)]%.") else - to_chat (user, "Procedure interrupted. Protocol terminated.") + to_chat (user, "Прерывание зарядки.") break else @@ -718,7 +727,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - to_chat (user, "Something wrong with that APC.") + to_chat (user, "Что-то не так с [CASE(src, ABLATIVE_CASE)].") H.adjustFireLoss(10,0) return @@ -730,9 +739,9 @@ src.charging = APC_CHARGING else - to_chat(user, "You are already fully charged.") + to_chat(user, "Ваша батарея полностью заряжена.") else - to_chat(user, "There is no charge to draw from that APC.") + to_chat(user, "Критически низкое напряжение в [CASE(src, PREPOSITIONAL_CASE)].") return if(usr == user && opened != APC_COVER_CLOSED && !issilicon(user) && !isobserver(user)) @@ -742,7 +751,7 @@ cell.updateicon() src.cell = null - user.visible_message("[user.name] removes the power cell from [src.name]!", "You remove the power cell.") + user.visible_message("[user.name] извлекает аккумулятор из [CASE(src, GENITIVE_CASE)]!", "Вы извлекаете аккумулятор из [CASE(src, GENITIVE_CASE)].") charging = APC_NOT_CHARGING update_icon() return @@ -750,7 +759,7 @@ ..() /obj/machinery/power/apc/attack_alien(mob/living/carbon/xenomorph/humanoid/user) - to_chat(user, "You don't want to break these things"); + to_chat(user, "Вам незачем это ломать."); return /obj/machinery/power/apc/proc/get_malf_status(mob/living/silicon/ai/malf) @@ -788,7 +797,7 @@ /obj/machinery/power/apc/tgui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "Apc", name) + ui = new(user, src, "Apc", "[capitalize(CASE(src, NOMINATIVE_CASE))]") ui.open() /obj/machinery/power/apc/tgui_data(mob/user) @@ -809,7 +818,7 @@ "powerChannels" = list( list( - "title" = "Equipment", + "title" = "Оборудование", "powerLoad" = DisplayPower(lastused_equip), "status" = equipment, "topicParams" = list( @@ -819,7 +828,7 @@ ) ), list( - "title" = "Lighting", + "title" = "Освещение", "powerLoad" = DisplayPower(lastused_light), "status" = lighting, "topicParams" = list( @@ -829,7 +838,7 @@ ) ), list( - "title" = "Environment", + "title" = "Жизнеобеспечение", "powerLoad" = DisplayPower(lastused_environ), "status" = environ, "topicParams" = list( @@ -865,7 +874,7 @@ ) \ ) // No AI control or hacked by other MalfAI if(!loud) - to_chat(user, "\The [src] have AI control disabled!") + to_chat(user, "Удалённый доступ отключен!") return FALSE else // Human @@ -895,11 +904,11 @@ . = TRUE if("toggle_nightshift") if(SSsmartlight.forced_admin_mode) - to_chat(usr, "Nothing happens.") + to_chat(usr, "Ничего не происходит.") return if(!COOLDOWN_FINISHED(src, smartlight_switch)) - to_chat(usr, "[src]'s smart lighting circuit breaker is still cycling!") + to_chat(usr, "\"Умный свет\" в процессе переключения!") return COOLDOWN_START(src, smartlight_switch, 4 SECONDS) @@ -907,14 +916,14 @@ . = TRUE if("change_smartlight") if(SSsmartlight.forced_admin_mode) - to_chat(usr, "Nothing happens.") + to_chat(usr, "Ничего не происходит.") return var/list/datum/light_mode/available_modes = smartlight_preset.get_user_available_modes() - var/mode_name = input(usr, "Please choose lighting mode.") as null|anything in available_modes + var/mode_name = input(usr, "Выберите режим освещения.") as null|anything in available_modes if(!COOLDOWN_FINISHED(src, smartlight_switch)) - to_chat(usr, "[src]'s smart lighting circuit breaker is still cycling!") + to_chat(usr, "Системы предохранения не позволяют поставить новый режим так быстро, немного подождите.") return if(mode_name) @@ -963,9 +972,9 @@ /obj/machinery/power/apc/proc/malf_hack(mob/living/silicon/ai/ai) if(ai.malfhacking) - to_chat(ai, "You are already hacking an APC.") + to_chat(ai, "Вы уже взламываете [CASE(src, ACCUSATIVE_CASE)].") return FALSE - to_chat(ai, "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process.") + to_chat(ai, "Перепрошивка платы [CASE(src, GENITIVE_CASE)] займёт немного времени. Вы не можете совершать другие действия по время перепрошивки.") ai.malfhack = src ai.malfhacking = TRUE addtimer(CALLBACK(src, PROC_REF(malf_hack_done), ai), 600) @@ -981,7 +990,7 @@ malfai = ai.parent else malfai = ai - to_chat(ai, "Hack complete. The APC is now under your exclusive control.") + to_chat(ai, "Взлом совершён. [CASE(src, NOMINATIVE_CASE)] под вашим личным контролем.") announce_hacker() update_icon() @@ -1035,7 +1044,7 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - visible_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", blind_message = "You hear sizzling electronics.") + visible_message("Из [CASE(src, GENITIVE_CASE)] валит сноп дыма и искр!", blind_message = "Вы слышите искрение электроники.") /obj/machinery/power/apc/surplus() diff --git a/tgui/packages/tgui/interfaces/Apc.js b/tgui/packages/tgui/interfaces/Apc.js index b98c5eb26d22..5c7ffdc2c181 100644 --- a/tgui/packages/tgui/interfaces/Apc.js +++ b/tgui/packages/tgui/interfaces/Apc.js @@ -6,7 +6,7 @@ import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; export const Apc = (props, context) => { return ( @@ -18,18 +18,18 @@ export const Apc = (props, context) => { const powerStatusMap = { 2: { color: 'good', - externalPowerText: 'External Power', - chargingText: 'Fully Charged', + externalPowerText: 'Питание от сети', + chargingText: 'Заряжен', }, 1: { color: 'average', - externalPowerText: 'Low External Power', - chargingText: 'Charging', + externalPowerText: 'Низкое напряжение в сети', + chargingText: 'Идёт зарядка...', }, 0: { color: 'bad', - externalPowerText: 'No External Power', - chargingText: 'Not Charging', + externalPowerText: 'Нет внешнего питания', + chargingText: 'Не заряжается', }, }; @@ -60,22 +60,22 @@ const ApcContent = (props, context) => { return ( <> -
+
act('breaker')} /> )}> [ {externalPowerStatus.externalPowerText} ] - + {!!powerCellStatus && ( { value={powerCellCharge * 0.01} /> ) || ( - Power cell removed + Извлечён )} act('charge')} /> )}> @@ -101,7 +101,7 @@ const ApcContent = (props, context) => {
-
+
{channelArray.map(channel => { const { topicParams } = channel; @@ -113,11 +113,11 @@ const ApcContent = (props, context) => { <> = 2 ? 'good' : 'bad'}> - {channel.status >= 2 ? 'On' : 'Off'} + {channel.status >= 2 ? 'Вкл.' : 'Выкл.'}
{!!malfCanHack && (