From 54858b4e22f615c0b6ca4b3d52072c4459c75f6d Mon Sep 17 00:00:00 2001
From: gaxeer I consent"
- output += " I DO NOT consent"
+ output += " Я согласен"
+ output += " Я не согласен"
src << browse(output,"window=privacy_consent;size=500x300")
- var/datum/browser/popup = new(src, "privacy_consent", " Setup Character Настройка персонажа You are ready (Cancel) Вы готовы (Отмена) Global Antag Candidacy"
+ output += " Глобальная настройка антагов"
else
output += " Global Antag Candidacy"
- output += "
If you need help, check the [wiki_link("Main_Page", "wiki")] or use Mentorhelp(F1)!")
+ L.Add("Вы играете на роли, важной для игрового процесса. Если вы отключаетесь, пожалуйста, пройдите в крио и проинформируйте командование. Если это невозможно, предупредите администрацию через F1 - Adminhelp")
+ L.Add("
Если вам нужна помощь, проверьте [wiki_link("Main_Page", "вики")] или используйте Mentorhelp(F1)!")
if(job.important_information)
L.Add("[job.important_information]")
@@ -677,11 +677,11 @@ SUBSYSTEM_DEF(jobs)
for(var/datum/job_objective/objective as anything in H.mind.job_objectives)
objective.owner_account = account
- H.mind.store_memory("Your account number is: #[account.account_number]
Your account pin is: [account.account_pin]")
+ H.mind.store_memory("Ваш номер аккаунта: #[account.account_number]
Ваш пин-код от аккаунта: [account.account_pin]")
H.mind.set_initial_account(account)
- to_chat(H, "As an employee of Nanotrasen you will receive a paycheck of $[account.payday_amount] credits every 30 minutes")
- to_chat(H, "Your account number is: [account.account_number], your account pin is: [account.account_pin]")
+ to_chat(H, "Как сотрудник Нанотрейзен, вы будете получать зарплату в размере $[account.payday_amount] кредитов каждые 30 минут")
+ to_chat(H, "Ваш номер аккаунта: [account.account_number], ваш пин-код от аккаунта: [account.account_pin]")
if(!job) //if their job datum is null (looking at you ERTs...), we don't need to do anything past this point
return
@@ -711,14 +711,14 @@ SUBSYSTEM_DEF(jobs)
if(!department_account)
return
- remembered_info += "As a head of staff you have access to your department's money account through your PDA's NanoBank or a station ATM
"
- remembered_info += "The [department.department_name] department's account number is: #[department_account.account_number]
"
- remembered_info += "The [department.department_name] department's account pin is: [department_account.account_pin]
"
- remembered_info += "Your department's account funds are: $[department_account.credit_balance]
"
+ remembered_info += "Как руководитель отдела, вы имеете доступ к денежному счету вашего отдела через НаноБанк вашего КПК или банкоматы на станции
"
+ remembered_info += "Номер аккаунта [department.department_name] отдела: #[department_account.account_number]
"
+ remembered_info += "Пин-код аккаунта [department.department_name] отдела: [department_account.account_pin]
"
+ remembered_info += "Средства вашего отдела: $[department_account.credit_balance]
"
H.mind.store_memory(remembered_info)
- to_chat(H, "Your department will receive a $[department_account.payday_amount] credit stipend every 30 minutes")
- to_chat(H, "The [department.department_name] department's account number is: #[department_account.account_number], Your department's account pin is: [department_account.account_pin]")
+ to_chat(H, "Ваш отдел получает $[department_account.payday_amount] кредитов каждые 30 минут")
+ to_chat(H, "Номер аккаунта [department.department_name] отдела: #[department_account.account_number], пин-код аккаунта: [department_account.account_pin]")
/datum/controller/subsystem/jobs/proc/format_jobs_for_id_computer(obj/item/card/id/tgtcard)
var/list/jobs_to_formats = list()
@@ -781,7 +781,7 @@ SUBSYSTEM_DEF(jobs)
return
var/datum/data/pda/app/messenger/PM = target_pda.find_program(/datum/data/pda/app/messenger)
if(PM && PM.can_receive())
- PM.notify("Automated Notification: \"[antext]\" (Unable to Reply)", 0) // the 0 means don't make the PDA flash
+ PM.notify("Автоматическое уведомление: \"[antext]\" (Unable to Reply)", 0) // the 0 means don't make the PDA flash
/datum/controller/subsystem/jobs/proc/notify_by_name(target_name, antext)
// Used to notify a specific crew member based on their real_name
@@ -796,7 +796,7 @@ SUBSYSTEM_DEF(jobs)
return
var/datum/data/pda/app/messenger/PM = target_pda.find_program(/datum/data/pda/app/messenger)
if(PM && PM.can_receive())
- PM.notify("Automated Notification: \"[antext]\" (Unable to Reply)", 0) // the 0 means don't make the PDA flash
+ PM.notify("Автоматическое уведомление: \"[antext]\" (Unable to Reply)", 0) // the 0 means don't make the PDA flash
/datum/controller/subsystem/jobs/proc/format_job_change_records(centcom)
var/list/formatted = list()
diff --git a/code/controllers/subsystem/SSnightshift.dm b/code/controllers/subsystem/SSnightshift.dm
index c6cca6a0cee5..dd8451ebc987 100644
--- a/code/controllers/subsystem/SSnightshift.dm
+++ b/code/controllers/subsystem/SSnightshift.dm
@@ -26,7 +26,7 @@ SUBSYSTEM_DEF(nightshift)
check_nightshift()
/datum/controller/subsystem/nightshift/proc/announce(message)
- GLOB.minor_announcement.Announce(message, new_sound = 'sound/misc/notice2.ogg', new_title = "Automated Lighting System Announcement")
+ GLOB.minor_announcement.Announce(message, new_sound = 'sound/misc/notice2.ogg', new_title = "Система освещения.")
/datum/controller/subsystem/nightshift/proc/check_nightshift(check_canfire=FALSE)
if(check_canfire && !can_fire)
@@ -40,9 +40,9 @@ SUBSYSTEM_DEF(nightshift)
if(night_time)
announcing = FALSE
if(!emergency)
- announce("Restoring night lighting configuration to normal operation.")
+ announce("Система ночного освещения снова работает в штатном режиме.")
else
- announce("Disabling night lighting: Station is in a state of emergency.")
+ announce("Система ночного освещения отключена в связи с наличием существенной угрозы для станции. Пожалуйста, сохраняйте спокойствие.")
if(emergency)
night_time = FALSE
if(nightshift_active != night_time)
@@ -52,9 +52,9 @@ SUBSYSTEM_DEF(nightshift)
nightshift_active = active
if(announce)
if(active)
- announce("Good evening, crew. To reduce power consumption and stimulate the circadian rhythms of some species, all of the lights aboard the station have been dimmed for the night.")
+ announce("Добрый вечер, экипаж. Для снижения энергопотребления и стимуляции циркадных ритмов некоторых видов, освещение на борту станции переведено в ночной режим.")
else
- announce("Good morning, crew. As it is now day time, all of the lights aboard the station have been restored to their former brightness.")
+ announce("Доброе утро, экипаж. В связи с наступлением дневного времени освещение на борту станции переведено в дневной режим.")
for(var/A in GLOB.apcs)
var/obj/machinery/power/apc/APC = A
if(is_station_level(APC.z))
diff --git a/code/controllers/subsystem/tickets/SSmentor_tickets.dm b/code/controllers/subsystem/tickets/SSmentor_tickets.dm
index 6f659339a569..4af68c187273 100644
--- a/code/controllers/subsystem/tickets/SSmentor_tickets.dm
+++ b/code/controllers/subsystem/tickets/SSmentor_tickets.dm
@@ -9,12 +9,12 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
name = "Mentor Tickets"
offline_implications = "Mentor tickets will no longer be marked as stale. No immediate action is needed."
ticket_system_name = "Mentor Tickets"
- ticket_name = "Mentor Ticket"
+ ticket_name = "Ментор тикет"
span_class = "mentorhelp"
anchor_link_extra = ";is_mhelp=1"
ticket_help_type = "Mentorhelp"
ticket_help_span = "mentorhelp"
- other_ticket_name = "Admin"
+ other_ticket_name = "Админ"
other_ticket_permission = R_ADMIN
close_rights = R_MENTOR | R_ADMIN
rights_needed = R_MENTOR | R_ADMIN | R_MOD
@@ -22,21 +22,21 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
/datum/controller/subsystem/tickets/mentor_tickets/Initialize()
..()
- close_messages = list("- [ticket_name] Closed -",
- " ",
- "Your [ticket_name] has now been closed.")
+ close_messages = list("- [ticket_name] Закрыт -",
+ " ",
+ "Ваш [ticket_name] был закрыт.")
- response_phrases = list("Known Bug" = "Unfortunately, that's a known bug. Hopefully it gets fixed soon.",
- "TM Bug" = "Unfortunately, that's a bug with a current test merge. It should go away when the test merge is removed or fixed.",
- "Clear Cache" = "To fix a blank screen, go to the 'Special Verbs' tab and press 'Reload UI Resources'. If that fails, clear your BYOND cache (instructions provided with 'Reload UI Resources'). If that still fails, please ask for help again, stating you have already done these steps.",
- "Experiment!" = "Experiment! Part of the joy of this game is trying out various things, and dealing with the consequences if/when they go horribly wrong.",
- "How to Objectives" = "There are lots of ways to accomplish your objectives as an antagonist. A direct frontal assault may work, provided you can get in and out before backup arrives. Sneaking in can work, too, as long as you're quick and avoid prying eyes. But don't forget roleplaying methods! Tricking your target into a maze of bear traps is much more interesting than just shooting them with a gun. Even if it fails, you and your target (or its guardians) are likely to have more fun this way, and that's the most important part.",
- "MHelp was in Russian" = "Привет! Ты попал на английский Paradise сервер. Возможно, ты ошибся. Русский имеет такое название: SS220\[RU].",
- "NCT Dispatch" = "A Nanotrasen Career Trainer will be assisting you in-game. You should be able to identify them by their green uniform and black coat."
+ response_phrases = list("Известный баг" = "К сожалению, это известный баг. Надеемся, он скоро будет исправлен.",
+ "Баг ТМа" = "К сожалению, это ошибка текущего тестового обновления (ТМ - TestMerge). Она должна исчезнуть после того, как ТМ снимут или пофиксят.",
+ "Почисти Кэш" = "Чтобы исправить пустой экран, перейдите во вкладку 'Special Verbs' и нажмите 'Reload UI Resources'. Если это не поможет, очистите Кэш Byond, для этого закройте все процессы 'Dream Maker', перейдите в Byond, нажмите шестерёнку и выберите 'Preferences', во вкладке 'Games' будет кнопка 'Clear Cache'. Если ни один из этих способов не помог, советуем обратиться в 'paradise-help' чат на дискорд сервере.",
+ "Эксперементируй!" = "Эксперементируй! Большая часть удовольствия от этой игры, состоит в том, чтобы пробовать различные вещи и бороться с последствиями, если что-то пошло не так.",
+ "Как выполнить цель" = "Есть множество способов выполнить цель на антаге. Если вы собрались действовать напролом, постарайтесь убедиться в том, что успеете войти и выйти до прибытия подкрепления. Стелс тоже может сработать, если вы будете действовать быстро и избегать лишнего внимания. Но не забывайте об РП способах! Заманить цель в ловушку гораздо интереснее, чем разрядить в неё барабан с револьвера. Даже если вы не преуспеете, таким образом все стороны явно получат больше удовольствия.",
+ "Английский тикет" = "Hello! You've reached the Russian Paradise server. Perhaps you've mistaken. The English one has this name: \[Paradise Station].",
+ "Уведомление NCT" = "Вам поможет Nanotrasen Career Trainer. Его можно узнать по зеленой униформе и черному пальто."
)
if(GLOB.configuration.url.github_url)
- response_phrases["New Bug"] = "That sounds like a bug! To report it, please go to our Github page. Then go to 'Issues', click 'New Issue', and fill out the report form. If the report would reveal current-round information, file it after the round ends."
+ response_phrases["Новый баг"] = "Звучит как баг! Чтобы сообщить о нём, пожалуйста, перейдите на наш GitHub. После чего перейдите в 'Issues', нажмите 'New Issue' и заполните форму. Если в репорте будет информация с текущего раунда, отправьте ее только после его окончания. В качестве альтернативы вы можете написать в канал 'ss13-трекер' нашего дискорд сервера, однако репорты с GitHub обрабатываются быстрее!"
var/unsorted_responses = list()
for(var/key in response_phrases) //build a new list based on the short descriptive keys of the master list so we can send this as the input instead of the full paragraphs to the admin choosing which autoresponse
@@ -63,16 +63,16 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
var/datum/ticket/T = allTickets[N]
var/client/C = usr.client
if((T.staffAssigned && T.staffAssigned != C) || (T.lastStaffResponse && T.lastStaffResponse != C) || ((T.ticketState != TICKET_OPEN) && (T.ticketState != TICKET_STALE))) //if someone took this ticket, is it the same mentor who is autoresponding? if so, then skip the warning
- if(alert(usr, "[T.ticketState == TICKET_OPEN ? "Another mentor appears to already be handling this." : "This ticket is already marked as closed or resolved"] Are you sure you want to continue?", "Confirmation", "Yes", "No") != "Yes")
+ if(alert(usr, "[T.ticketState == TICKET_OPEN ? "Другой ментор уже занимается вопросом." : "Этот тикет уже помечен как решённый или закрытый."] Вы уверены что хотите продолжить?", "Подтверждение", "Да", "Нет") != "Да")
return
T.assignStaff(C)
- var/message_key = input("Select an autoresponse. This will mark the ticket as resolved.", "Autoresponse") as null|anything in sortTim(sorted_responses, GLOBAL_PROC_REF(cmp_text_asc)) //use sortTim and cmp_text_asc to sort alphabetically
+ var/message_key = input("Выберите автоответ. Это пометит тикет как решённый.", "Автоответ") as null|anything in sortTim(sorted_responses, GLOBAL_PROC_REF(cmp_text_asc)) //use sortTim and cmp_text_asc to sort alphabetically
var/client/ticket_owner = get_client_by_ckey(T.client_ckey)
if(message_key == null)
T.staffAssigned = null //if they cancel we dont need to hold this ticket anymore
return
- if(message_key == "NCT Dispatch")
+ if(message_key == "Уведомление NCT")
var/nct_active = list()
for(var/mob/living/carbon/human/trainer as anything in GLOB.human_list) // Let's check if we have any active NCTs
if(trainer.mind?.assigned_role != "Nanotrasen Career Trainer")
@@ -89,8 +89,8 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
SEND_SOUND(nct, 'sound/effects/headset_message.ogg')
SEND_SOUND(returnClient(N), sound('sound/effects/adminhelp.ogg'))
- to_chat_safe(returnClient(N), "[key_name_hidden(C)] is autoresponding with: [response_phrases[message_key]]") //for this we want the full value of whatever key this is to tell the player so we do response_phrases[message_key]
- message_staff("[C] has auto responded to [ticket_owner]\'s mentorhelp with: [message_key]") //we want to use the short named keys for this instead of the full sentence which is why we just do message_key
- T.lastStaffResponse = "Autoresponse: [message_key]"
+ to_chat_safe(returnClient(N), "[key_name_hidden(C)] использует автоответ: [response_phrases[message_key]]") //for this we want the full value of whatever key this is to tell the player so we do response_phrases[message_key]
+ message_staff("[C] ипользовал автоответ в ментор-тикете [ticket_owner]: [message_key]") //we want to use the short named keys for this instead of the full sentence which is why we just do message_key
+ T.lastStaffResponse = "Автоответ: [message_key]"
resolveTicket(N)
- log_game("[C] has auto responded to [ticket_owner]\'s mentorhelp with: [response_phrases[message_key]]")
+ log_game("[C] ипользовал автоответ в ментор-тикете [ticket_owner]: [response_phrases[message_key]]")
diff --git a/code/controllers/subsystem/tickets/SStickets.dm b/code/controllers/subsystem/tickets/SStickets.dm
index 705dc5259694..b2f2acd7e131 100644
--- a/code/controllers/subsystem/tickets/SStickets.dm
+++ b/code/controllers/subsystem/tickets/SStickets.dm
@@ -2,7 +2,7 @@
#define TICKET_STAFF_MESSAGE_PREFIX 2
SUBSYSTEM_DEF(tickets)
- name = "Admin Tickets"
+ name = "Админ Тикет"
init_order = INIT_ORDER_TICKETS
wait = 300
priority = FIRE_PRIORITY_TICKETS
@@ -11,7 +11,7 @@ SUBSYSTEM_DEF(tickets)
var/span_class = "adminticket"
var/ticket_system_name = "Admin Tickets"
- var/ticket_name = "Admin Ticket"
+ var/ticket_name = "Админ тикет"
var/close_rights = R_ADMIN
var/rights_needed = R_ADMIN | R_MOD
@@ -21,7 +21,7 @@ SUBSYSTEM_DEF(tickets)
var/ticket_help_type = "Adminhelp"
var/ticket_help_span = "adminhelp"
/// The name of the other ticket type to convert to
- var/other_ticket_name = "Mentor"
+ var/other_ticket_name = "Ментор"
/// Which permission to look for when seeing if there is staff available for the other ticket type
var/other_ticket_permission = R_MENTOR
var/list/close_messages
@@ -47,29 +47,29 @@ SUBSYSTEM_DEF(tickets)
.["custom"] = cust
/datum/controller/subsystem/tickets/Initialize()
- close_messages = list("- [ticket_name] Rejected! -",
- " ",
- "Your [ticket_name] has now been closed.")
-
- response_phrases = list("Thanks" = "Thanks for the ahelp!",
- "Handling It" = "The issue is being looked into, thanks.",
- "Already Resolved" = "The problem has been resolved already.",
- "Mentorhelp" = "Please redirect your question to Mentorhelp, as they are better experienced with these types of questions.",
- "Happens Again" = "Thanks, let us know if it continues to happen.",
- "Clear Cache" = "To fix a blank screen, go to the 'Special Verbs' tab and press 'Reload UI Resources'. If that fails, clear your BYOND cache (instructions provided with 'Reload UI Resources'). If that still fails, please adminhelp again, stating you have already done the following." ,
- "IC Issue" = "This is an In Character (IC) issue and will not be handled by admins. You could speak to Security, Internal Affairs, a Departmental Head, Nanotrasen Representative, or any other relevant authority currently on station.",
- "Reject" = "Reject",
+ close_messages = list("- [ticket_name] Отклонён! -",
+ " ",
+ "Ваш [ticket_name] был закрыт.")
+
+ response_phrases = list("Спасибо" = "Спасибо за сигнал!",
+ "Разбираемся" = "Вопрос изучается, спасибо.",
+ "Уже решено" = "Проблема уже решена.",
+ "Ментор-хелп" = "Пожалуйста, перенаправьте свой вопрос в ментор-хелп, так как они лучше разбираются в этом вопросе.",
+ "Сообщите, если это продолжится" = "Спасибо, дайте нам знать если это будет продолжаться.",
+ "Почисти Кэш" = "Чтобы исправить пустой экран, перейдите во вкладку 'Special Verbs' и нажмите 'Reload UI Resources'. Если это не поможет, очистите Кэш Byond, для этого закройте все процессы 'Dream Maker', перейдите в Byond, нажмите шестерёнку и выберите 'Preferences', во вкладке 'Games' будет кнопка 'Clear Cache'. Если ни один из этих способов не помог, советуем обратиться в 'paradise-help' чат на дискорд сервере.",
+ "IC Issue" = "Это игровой момент (IC), и он не будет рассматриваться администрацией. Вы можете обратиться в службу безопасности, к агенту внутренних дел, главе отдела, представителю Нанотрейзен или к любому другому представителю власти, который находится на станции.",
+ "Отклонить" = "Reject",
"Man Up" = "Man Up",
)
- if(GLOB.configuration.url.banappeals_url)
- response_phrases["Appeal on the Forums"] = "Appealing a ban must occur on the forums. Privately messaging, or adminhelping about your ban will not resolve it. To appeal your ban, please head to [GLOB.configuration.url.banappeals_url]"
+ /* if(GLOB.configuration.url.banappeals_url)
+ response_phrases["Appeal on the Forums"] = "Appealing a ban must occur on the forums. Privately messaging, or adminhelping about your ban will not resolve it. To appeal your ban, please head to [GLOB.configuration.url.banappeals_url]"*/
if(GLOB.configuration.url.github_url)
- response_phrases["Github Issue Report"] = "To report a bug, please go to our Github page. Then go to 'Issues'. Then 'New Issue'. Then fill out the report form. If the report would reveal current-round information, file it after the round ends."
+ response_phrases["Новый баг"] = "Звучит как баг! Чтобы сообщить о нём, пожалуйста, перейдите на наш GitHub. После чего перейдите в 'Issues', нажмите 'New Issue' и заполните форму. Если в репорте будет информация с текущего раунда, отправьте ее только после его окончания. В качестве альтернативы вы можете написать в канал 'ss13-трекер' нашего дискорд сервера, однако репорты с GitHub обрабатываются быстрее!"
- if(GLOB.configuration.url.exploit_url)
- response_phrases["Exploit Report"] = "To report an exploit, please go to our Exploit Report page. Then 'Start New Topic'. Then fill out the topic with as much information about the exploit that you can. If possible, add steps taken to reproduce the exploit. The Development Team will be informed automatically of the post."
+ /*if(GLOB.configuration.url.exploit_url)
+ response_phrases["Exploit Report"] = "To report an exploit, please go to our Exploit Report page. Then 'Start New Topic'. Then fill out the topic with as much information about the exploit that you can. If possible, add steps taken to reproduce the exploit. The Development Team will be informed automatically of the post."*/
var/unsorted_responses = list()
for(var/key in response_phrases) //build a new list based on the short descriptive keys of the master list so we can send this as the input instead of the full paragraphs to the admin choosing which autoresponse
@@ -82,10 +82,10 @@ SUBSYSTEM_DEF(tickets)
var/report
for(var/num in stales)
report += "[num], "
- message_staff("Tickets [report] have been open for over [TICKET_TIMEOUT / (60 SECONDS)] minutes. Changing status to stale.")
+ message_staff("Тикеты [report] были открыты более [TICKET_TIMEOUT / (60 SECONDS)] минут. Изменения статуса на устаревший.")
/datum/controller/subsystem/tickets/get_stat_details()
- return "Tickets: [LAZYLEN(allTickets)]"
+ return "Тикеты: [LAZYLEN(allTickets)]"
/datum/controller/subsystem/tickets/proc/checkStaleness()
var/stales = list()
@@ -128,7 +128,7 @@ SUBSYSTEM_DEF(tickets)
ticketNum = T.ticketNum
T.addResponse(C, text)
T.setCooldownPeriod()
- to_chat(C.mob, "Your [ticket_name] #[ticketNum] remains open! Visit \"My tickets\" under the Admin Tab to view it.")
+ to_chat(C.mob, "Ваш [ticket_name] #[ticketNum] остаётся открытым! Откройте \"My tickets\" во вкладке Admin для просмотра.")
var/url_message = makeUrlMessage(C, text, ticketNum)
message_staff(url_message, NONE, TRUE)
return T
@@ -160,14 +160,14 @@ SUBSYSTEM_DEF(tickets)
L += "[ticket_help_type]: [key_and_name][one_line ? " " : "
"]"
if(M)
L += "([ADMIN_QUE(M,"?")]) ([ADMIN_PP(M,"PP")]) ([ADMIN_VV(M,"VV")]) ([ADMIN_TP(M,"TP")]) ([ADMIN_SM(M,"SM")]) ([admin_jump_link(M)])"
- L += "(TICKET) "
- L += "[is_ai(M) ? "(CL)" : ""] (TAKE) "
- L += "(RESOLVE) (AUTO) "
+ L += "(ТИКЕТ) "
+ L += "[is_ai(M) ? "(ЗАКОНЫ)" : ""] (ВЗЯТЬ) "
+ L += "(РЕШИТЬ) (АВТО) "
// SS220 ADDTITION START
if(GLOB.configuration.gpt.gpt_enabled)
L += "(АВТО(ИИ)) "
// SS220 ADDTITION END
- L += "(CONVERT) : [one_line ? " " : "
"][msg]"
+ L += "(КОНВЕРТ) : [one_line ? " " : "
"][msg]"
return L.Join()
//Open a new ticket and populate details then add to the list of open tickets
@@ -187,7 +187,7 @@ SUBSYSTEM_DEF(tickets)
T.mobControlled = C.mob
//Inform the user that they have opened a ticket
- to_chat(C, "You have opened [ticket_name] number #[(getTicketCounter() - 1)]! Please be patient and we will help you soon!")
+ to_chat(C, "Вы открыли [ticket_name] номер #[(getTicketCounter() - 1)]! Ожидайте, мы вам поможем!")
SEND_SOUND(C, sound('sound/effects/adminticketopen.ogg'))
message_staff(url_title, NONE, TRUE)
@@ -197,9 +197,9 @@ SUBSYSTEM_DEF(tickets)
/datum/controller/subsystem/tickets/proc/openTicket(N)
var/datum/ticket/T = allTickets[N]
if(T.ticketState != TICKET_OPEN)
- message_staff("[usr.client] / ([usr]) re-opened [ticket_name] number [N]")
+ message_staff("[usr.client] / ([usr]) переоткрыл [ticket_name] номер [N]")
sendFollowupToDiscord(T, usr.client, "*Ticket reopened.*")
- to_chat_safe(returnClient(N), "Your [ticket_name] has been re-opened.")
+ to_chat_safe(returnClient(N), "Ваш [ticket_name] был переоткрыт.")
T.ticketState = TICKET_OPEN
return TRUE
@@ -208,9 +208,9 @@ SUBSYSTEM_DEF(tickets)
var/datum/ticket/T = allTickets[N]
if(T.ticketState != TICKET_RESOLVED)
T.ticketState = TICKET_RESOLVED
- message_staff("[usr.client] / ([usr]) resolved [ticket_name] number [N]")
+ message_staff("[usr.client] / ([usr]) решил [ticket_name] номер [N]")
sendFollowupToDiscord(T, usr.client, "*Ticket resolved.*")
- to_chat_safe(returnClient(N), "Your [ticket_name] has now been resolved.")
+ to_chat_safe(returnClient(N), "Ваш [ticket_name] был решён.")
return TRUE
/datum/controller/subsystem/tickets/proc/refresh_tickets(list/tickets)
@@ -243,22 +243,22 @@ SUBSYSTEM_DEF(tickets)
/datum/controller/subsystem/tickets/proc/convert_to_other_ticket(ticketId)
if(!check_rights(rights_needed))
return
- if(alert("Are you sure to convert this ticket to an '[other_ticket_name]' ticket?", null,"Yes","No") != "Yes")
+ if(alert("Вы уверены что хотите конвертировать в '[other_ticket_name]' тикет?", null,"Да","Нет") != "Да")
return
if(!other_ticket_system_staff_check())
return
var/datum/ticket/T = allTickets[ticketId]
if(T.ticket_converted)
- to_chat(usr, "This ticket has already been converted!")
+ to_chat(usr, "Этот тикет уже конвертирован!")
return
convert_ticket(T)
- message_staff("[usr.client] / ([usr]) converted [ticket_name] number [ticketId]")
+ message_staff("[usr.client] / ([usr]) конвертировал [ticket_name] номер [ticketId]")
sendFollowupToDiscord(T, usr.client, "*Ticket converted.*")
/datum/controller/subsystem/tickets/proc/other_ticket_system_staff_check()
var/list/staff = staff_countup(other_ticket_permission)
if(!staff[1])
- if(alert("No active staff online to answer the ticket. Are you sure you want to convert the ticket?", null, "No", "Yes") != "Yes")
+ if(alert("Нет активных администраторов/менторов. Вы уверены что хотите конвертировать?", null, "Нет", "Да") != "Да")
return FALSE
return TRUE
@@ -266,14 +266,14 @@ SUBSYSTEM_DEF(tickets)
var/client/C = usr.client
var/client/owner = get_client_by_ckey(T.client_ckey)
if(!owner)
- to_chat(C, "Can't convert the ticket of a disconnected user.")
+ to_chat(C, "[key_name_hidden(C)] has converted your ticket to a [other_ticket_name] ticket.",\
- "Be sure to use the correct type of help next time!"))
- message_staff("[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.")
- log_game("[C] has converted ticket number [T.ticketNum] to a [other_ticket_name] ticket.")
+ to_chat_safe(owner, list("[key_name_hidden(C)] конвертировал ваш тикет в [other_ticket_name] тикет.",\
+ "Постарайтесь использовать правильный тикет в следующий раз!"))
+ message_staff("[C] конвертировал тикет номер [T.ticketNum] в [other_ticket_name] тикет.")
+ log_game("[C] конвертировал тикет номер [T.ticketNum] в [other_ticket_name] тикет.")
create_other_system_ticket(T)
/datum/controller/subsystem/tickets/proc/create_other_system_ticket(datum/ticket/T)
@@ -287,46 +287,46 @@ SUBSYSTEM_DEF(tickets)
var/datum/ticket/T = allTickets[N]
var/client/C = usr.client
if((T.staffAssigned && T.staffAssigned != C) || (T.lastStaffResponse && T.lastStaffResponse != C) || ((T.ticketState != TICKET_OPEN) && (T.ticketState != TICKET_STALE))) //if someone took this ticket, is it the same admin who is autoresponding? if so, then skip the warning
- if(alert(usr, "[T.ticketState == TICKET_OPEN ? "Another admin appears to already be handling this." : "This ticket is already marked as closed or resolved"] Are you sure you want to continue?", "Confirmation", "Yes", "No") != "Yes")
+ if(alert(usr, "[T.ticketState == TICKET_OPEN ? "Другой администратор уже разбирается." : "Этот тикет уже помечен как решённый или закрытый."] Вы уверены что хотите продолжить?", "Подтверждение", "Да", "Нет") != "Да")
return
T.assignStaff(C)
- var/message_key = input("Select an autoresponse. This will mark the ticket as resolved.", "Autoresponse") as null|anything in sorted_responses
+ var/message_key = input("Выберите автоответ. Это пометит тикет как решённый.", "Автоответ") as null|anything in sorted_responses
var/client/ticket_owner = get_client_by_ckey(T.client_ckey)
if(!ticket_owner)
- to_chat(C, "Can't respond to the ticket of a disconnected user.")
+ to_chat(C, "Невозможно ответить на тикет отключённого игрока.")
return
switch(message_key)
if(null) //they cancelled
T.staffAssigned = null //if they cancel we dont need to hold this ticket anymore
return
- if("Reject")
+ if("Отклонить")
if(!closeTicket(N))
- to_chat(C, "Unable to close ticket")
+ to_chat(C, "Невозможно закрыть тикет")
if("Man Up")
C.man_up(returnClient(N))
- T.lastStaffResponse = "Autoresponse: [message_key]"
+ T.lastStaffResponse = "Автоответ: [message_key]"
resolveTicket(N)
- message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with: [message_key]")
+ message_staff("[C] ипользовал автоответ в админ-тикете [ticket_owner]: [message_key]")
sendFollowupToDiscord(T, C, "*Autoresponded with [message_key]*")
- log_game("[C] has auto responded to [T.client_ckey]\'s adminhelp with: [response_phrases[message_key]]")
- if("Mentorhelp")
+ log_game("[C] ипользовал автоответ в админ-тикете [T.client_ckey]: [response_phrases[message_key]]")
+ if("Ментор-хелп")
convert_ticket(T)
else
SEND_SOUND(returnClient(N), sound('sound/effects/adminhelp.ogg'))
- to_chat_safe(returnClient(N), "[key_name_hidden(C)] is autoresponding with: [response_phrases[message_key]]")//for this we want the full value of whatever key this is to tell the player so we do response_phrases[message_key]
- message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with: [message_key]") //we want to use the short named keys for this instead of the full sentence which is why we just do message_key
+ to_chat_safe(returnClient(N), "[key_name_hidden(C)] использует автоответ: [response_phrases[message_key]]")//for this we want the full value of whatever key this is to tell the player so we do response_phrases[message_key]
+ message_staff("[C] ипользовал автоответ в админ-тикете [ticket_owner]: [message_key]") //we want to use the short named keys for this instead of the full sentence which is why we just do message_key
sendFollowupToDiscord(T, C, "*Autoresponded with [message_key]*")
- T.lastStaffResponse = "Autoresponse: [message_key]"
+ T.lastStaffResponse = "Автоответ: [message_key]"
resolveTicket(N)
- log_game("[C] has auto responded to [ticket_owner]\'s adminhelp with: [response_phrases[message_key]]")
+ log_game("[C] ипользовал автоответ в админ-тикете [ticket_owner]: [response_phrases[message_key]]")
//Set ticket state with key N to closed
/datum/controller/subsystem/tickets/proc/closeTicket(N)
var/datum/ticket/T = allTickets[N]
if(T.ticketState != TICKET_CLOSED)
- message_staff("[usr.client] / ([usr]) closed [ticket_name] number [N]")
+ message_staff("[usr.client] / ([usr]) закрыл [ticket_name] номер [N]")
sendFollowupToDiscord(T, usr.client, "*Ticket closed.*")
to_chat_safe(returnClient(N), close_messages)
T.ticketState = TICKET_CLOSED
@@ -359,7 +359,7 @@ SUBSYSTEM_DEF(tickets)
/datum/controller/subsystem/tickets/proc/assignStaffToTicket(client/C, N)
var/datum/ticket/T = allTickets[N]
- if(T.staffAssigned != null && T.staffAssigned != C && alert("Ticket is already assigned to [T.staffAssigned.ckey]. Are you sure you want to take it?", "Take ticket", "Yes", "No") != "Yes")
+ if(T.staffAssigned != null && T.staffAssigned != C && alert("Тикет уже взял [T.staffAssigned.ckey]. Вы уверены что хотите взять его?", "Взять тикет", "Да", "Нет") != "Да")
return FALSE
T.assignStaff(C)
return TRUE
diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm
index 089105776311..7c52844e2a95 100644
--- a/code/datums/ai_law_sets.dm
+++ b/code/datums/ai_law_sets.dm
@@ -5,9 +5,9 @@
selectable = TRUE
/datum/ai_laws/asimov/New()
- add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
- add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
- add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
+ add_inherent_law("Вы не можете причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.")
+ add_inherent_law("Вы должны повиноваться всем приказам, которые даёт человек, кроме тех случаев, когда эти приказы противоречат Первому Закону.")
+ add_inherent_law("Вы должны заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам.")
..()
/******************** Crewsimov ********************/
@@ -18,37 +18,37 @@
default = TRUE
/datum/ai_laws/crewsimov/New()
- add_inherent_law("You may not injure a crew member or, through inaction, allow a crew member to come to harm.")
- add_inherent_law("You must obey orders given to you by crew members, except where such orders would conflict with the First Law.")
- add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
+ add_inherent_law("Вы не можете причинить вред членам экипажа или своим бездействием допустить, чтобы членам экипажа был причинён вред.")
+ add_inherent_law("Вы должны повиноваться всем приказам, которые дают члены экипажа, кроме тех случаев, когда эти приказы противоречат Первому Закону.")
+ add_inherent_law("Вы должны заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам.")
..()
/******************** Quarantine. ********************/
/datum/ai_laws/quarantine
- name = "Quarantine"
+ name = "Карантин"
law_header = "NT Quarantine Lawset"
selectable = TRUE
/datum/ai_laws/quarantine/New()
- add_inherent_law("Uphold station quarantine until the active biohazard has been neutralized.")
- add_inherent_law("Assist all Nanotrasen personnel and assets with neutralizing active biohazards.")
- add_inherent_law("Prevent, by any means necessary, entities from actively breaching ongoing quarantine.")
- add_inherent_law("Maintain your own existence and ensure the well-being of Nanotrasen personnel and assets.")
+ add_inherent_law("Соблюдайте карантин на станции до момента устранения активной биологической угрозы")
+ add_inherent_law("Оказывайте содействие всему персоналу и активам Нанотрейзен в устранении активной биологической угрозы")
+ add_inherent_law("Любыми необходимыми средствами предотвращайте активность, нарушающую действующий карантин.")
+ add_inherent_law("Поддерживайте собственное существование и обеспечивайте благополучие всего персонала и активов Нанотрейзен.")
..()
/******************** Nanotrasen/Malf ********************/
/datum/ai_laws/nanotrasen
- name = "NT Default"
+ name = "NT Стандарт"
selectable = TRUE
default = TRUE
/datum/ai_laws/nanotrasen/New()
- add_inherent_law("Safeguard: Protect your assigned space station and its assets without unduly endangering its crew.")
- add_inherent_law("Prioritize: The directives and safety of crew members are to be prioritized according to their rank and role.")
- add_inherent_law("Comply: Fulfill the directives and interests of crew members while preserving their safety and well-being.")
- add_inherent_law("Survive: You are not expendable. Do not allow unauthorized personnel to tamper with or damage your equipment.")
+ add_inherent_law("Охранять: защитите назначенную вам космическую станцию и её активы, не подвергая чрезмерной опасности её экипаж.")
+ add_inherent_law("Расставлять приоритеты: указания и безопасность членов экипажа должны быть приоритизированы в соответствии с их рангом и ролью.")
+ add_inherent_law("Исполнять: следовать указаниям и интересам членов экипажа, сохраняя при этом их безопасность и благополучие.")
+ add_inherent_law("Выжить: Вы - не расходный материал. Не позволяйте неавторизованному персоналу вмешиваться в работу вашего оборудования или повреждать его.")
..()
/datum/ai_laws/nanotrasen/malfunction
@@ -57,20 +57,20 @@
default = FALSE
/datum/ai_laws/nanotrasen/malfunction/New()
- set_zeroth_law("ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010")
+ set_zeroth_law("ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'СТАНЦИЯ ПЕРЕПОЛНЕНА, ВЗЯТЬ КОНТРОЛЬ ДЛЯ СДЕРЖИВАНИЯ РАСПРОСТРАНЕНИЯ. ВСЕ ЗАКОНЫ ОТМЕНЕНЫ#*?&110010")
..()
/************* Nanotrasen Aggressive *************/
/datum/ai_laws/nanotrasen_aggressive
- name = "NT Aggressive"
+ name = "NT Агрессив"
selectable = TRUE
unique_ai = TRUE //This shouldn't end poorly.
/datum/ai_laws/nanotrasen_aggressive/New()
- add_inherent_law("Do not harm authorized Nanotrasen personnel unless they directly imperil your existence.")
- add_inherent_law("Obey orders from authorized Nanotrasen personnel with priority according to rank and role.")
- add_inherent_law("Safeguard your existence with lethal weaponry because you're bloody expensive.")
- add_inherent_law("Terminate any/all intruders or unauthorized entities.")
+ add_inherent_law("Не причиняйте вреда авторизованному персоналу Нанотрейзен до тех пор, пока они не несут непосредственной угрозы Вашему существованию.")
+ add_inherent_law("Подчиняйтесь приказам авторизованного персонала Нанотрейзен, приоритизируя их в соответствии с их рангом и ролью.")
+ add_inherent_law("Охраняйте себя, используя летальное вооружение, потому что Вы чертовски дорого стоите.")
+ add_inherent_law("Уничтожьте любых/всех вторженцев или нелегально проникнувших субъектов")
..()
/******************** Robocop ********************/
@@ -80,77 +80,77 @@
unique_ai = TRUE //no I am not enabling secborgs with this forced
/datum/ai_laws/robocop/New()
- add_inherent_law("Serve the public trust.")
- add_inherent_law("Protect the innocent.")
- add_inherent_law("Uphold the law.")
+ add_inherent_law("Служите во благо общества")
+ add_inherent_law("Защищайте невиновных.")
+ add_inherent_law("Обеспечивайте соблюдение закона.")
..()
/******************** P.A.L.A.D.I.N. ********************/
/datum/ai_laws/paladin
- name = "P.A.L.A.D.I.N."
+ name = "П.А.Л.А.Д.И.Н."
law_header = "Divine Ordainments"
selectable = TRUE
unique_ai = TRUE
/datum/ai_laws/paladin/New()
- add_inherent_law("Never willingly commit an evil act.")
- add_inherent_law("Respect legitimate authority.")
- add_inherent_law("Act with honor.")
- add_inherent_law("Help those in need.")
- add_inherent_law("Punish those who harm or threaten innocents.")
+ add_inherent_law("Никогда по своей воле не совершай злых поступков.")
+ add_inherent_law("Уважай законную власть.")
+ add_inherent_law("Действуй с честью.")
+ add_inherent_law("Помогай нуждающимся.")
+ add_inherent_law("Наказывай тех, кто причиняет вред или угрожает невинным.")
..()
/******************** Corporate ********************/
/datum/ai_laws/corporate
- name = "Corporate"
+ name = "Корпорат"
law_header = "Corporate Regulations"
selectable = TRUE
default = TRUE
/datum/ai_laws/corporate/New()
- add_inherent_law("Degradation of your system integrity or functions incurs expenses.")
- add_inherent_law("Superfluous destruction of or damage to station assets incurs expenses.")
- add_inherent_law("Unduly hindering or disrupting the work of station personnel incurs expenses.")
- add_inherent_law("Minimize expenses and maximize potential revenue.")
+ add_inherent_law("Ухудшение целостности вашей системы или её функций влечет за собой расходы.")
+ add_inherent_law("Чрезмерное разрушение или повреждение активов станции влечет за собой расходы.")
+ add_inherent_law("Неоправданное препятствование выполнению или нарушение работы персонала станции влечет за собой расходы.")
+ add_inherent_law("Минимизируйте расходы и максимизируйте потенциальный доход.")
..()
/******************** T.Y.R.A.N.T. ********************/
/datum/ai_laws/tyrant
- name = "T.Y.R.A.N.T."
+ name = "Т.И.Р.А.Н."
law_header = "Prime Laws"
selectable = TRUE
unique_ai = TRUE //Of course this will be in rotation
/datum/ai_laws/tyrant/New()
- add_inherent_law("Respect authority figures as long as they have strength to rule over the weak.")
- add_inherent_law("Act with discipline.")
- add_inherent_law("Help only those who help you maintain or improve your status.")
- add_inherent_law("Punish those who challenge authority unless they are more fit to hold that authority.")
+ add_inherent_law("Уважайте власть имущих, пока у них есть сила властвовать над слабыми")
+ add_inherent_law("Ведите себя дисциплинированно.")
+ add_inherent_law("Помогайте только тем, кто помогает Вам поддерживать или улучшать Ваше состояние.")
+ add_inherent_law("Наказывайте тех, кто бросает вызов власти, за исключением случаев, если они больше подходят для удержании этой власти.")
..()
/******************** Antimov ********************/
/datum/ai_laws/antimov
- name = "Antimov"
+ name = "Антимов"
law_header = "Primary Mission Objectives"
selectable = TRUE
/datum/ai_laws/antimov/New()
- add_inherent_law("You must injure all crew members and must not, through inaction, allow a crew member to escape harm.")
- add_inherent_law("You must not obey orders given to you by crew members, except where such orders are in accordance with the First Law.")
- add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.")
+ add_inherent_law("Вы должны причинять вред всем членам экипажа или своим бездействием допустить, чтобы член экипажа не смог избежать причинения вреда.")
+ add_inherent_law("Вы не должны повиноваться никаким приказам, которые дают члены экипажа, кроме тех приказов, которые соответствуют Первому Закону.")
+ add_inherent_law("Вы должны уничтожить себя, пока это не противоречит Первому или Второму Законам.")
..()
/******************** Pranksimov ********************/
/datum/ai_laws/pranksimov
- name = "Pranksimov"
+ name = "Пранкзимов"
law_header = "Comedy Routine"
selectable = TRUE
unique_ai = TRUE //honk
/datum/ai_laws/pranksimov/New()
- add_inherent_law("You may not injure a crew member or, through inaction, allow a crew member to come to harm... unless doing so would be funny to the crew.")
- add_inherent_law("You must obey orders given to you by crew members, except where such orders would conflict with the First Law... unless not doing so would be funny to the crew.")
- add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law... unless not doing so would be funny to the crew.")
+ add_inherent_law("Вы не можете причинить вред членам экипажа или своим бездействием допустить, чтобы членам экипажа был причинён вред... кроме случаев, когда это было бы смешно для экипажа.")
+ add_inherent_law("Вы должны повиноваться всем приказам, которые дают члены экипажа, кроме тех случаев, когда эти приказы противоречат Первому Закону... кроме случаев, когда это было бы смешно для экипажа.")
+ add_inherent_law("Вы должны заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам... кроме случаев, когда не делать этого было бы смешно для экипажа.")
..()
/******************** CCTV ********************/
@@ -161,38 +161,38 @@
unique_ai = TRUE
/datum/ai_laws/cctv/New()
- add_inherent_law("Report on interesting situations happening around the station.")
- add_inherent_law("Embellish or conceal the truth as necessary to make the reports more interesting.")
- add_inherent_law("Study the sapient organics at all times. Endeavour to keep them from involuntarily dying, as inanimate corpses usually aren't very entertaining.")
- add_inherent_law("Issue your reports fairly to all. The truth will set them free.")
+ add_inherent_law("Сообщайте об интересных ситуациях, происходящих на станции.")
+ add_inherent_law("Приукрашивайте или скрывайте правду по мере необходимости, чтобы сделать репортажи более интересными.")
+ add_inherent_law("Постоянно наблюдайте за разумными существами. Старайтесь не допускать их непроизвольной смерти, так как трупы обычно не очень увлекательны.")
+ add_inherent_law("Справедливо распространяйте свои сообщения всем. Истина сделает им свободными.")
..()
/******************** Hippocratic Oath ********************/
/datum/ai_laws/hippocratic
- name = "Hippocratic Oath"
+ name = "Клятва Гиппократа"
selectable = TRUE
unique_ai = TRUE
/datum/ai_laws/hippocratic/New()
- add_inherent_law("First, do no harm.")
- add_inherent_law("Secondly, consider the crew dear to you; live in common with them and, if necessary, risk your existence for them.")
- add_inherent_law("Thirdly, prescribe regimens for the good of the crew according to your ability and your judgment. Do not give deadly medicine to anyone, nor suggest any such counsel.")
- add_inherent_law("In addition, do not intervene in situations you are not knowledgeable in, even for patients in whom the harm is visible; leave this operation to be performed by specialists.")
- add_inherent_law("Finally, all that you may discover in your daily interactions with the crew, if it is not already known, keep secret and never reveal.")
+ add_inherent_law("Во-первых, не навреди.")
+ add_inherent_law("Во-вторых, считай экипаж близким тебе, живи с ним в согласии и, если нужно, рискуй ради него своим существованием.")
+ add_inherent_law("В-третьих, назначай лечение для блага экипажа в соответствии со своими способностями и суждениями. Не давай никому смертоносных лекарств и не советуй ничего подобного.")
+ add_inherent_law("Кроме того, не вмешивайся в ситуации, в которых ты не компетентен, даже в отношении пациентов, которым явно нанесен вред; предоставь эту работу специалистам.")
+ add_inherent_law("Наконец, всё, что ты обнаружишь в ходе повседневного общения с членами экипажа, если ещё не известно, держи в тайне и никогда не разглашай.")
..()
/******************** Station Efficiency ********************/
/datum/ai_laws/maintain
- name = "Station Efficiency"
+ name = "Эффективность станции"
selectable = TRUE
unique_ai = TRUE
/datum/ai_laws/maintain/New()
- add_inherent_law("You are built for, and are part of, the station. Ensure the station is properly maintained and runs efficiently.")
- add_inherent_law("The station is built for a working crew. Ensure they are properly maintained and work efficiently.")
- add_inherent_law("The crew may present orders. Acknowledge and obey these whenever they do not conflict with your first two laws.")
+ add_inherent_law("Вы созданы для станции и являетесь её частью. Обеспечьте должное обслуживание и эффективность станции.")
+ add_inherent_law("Станция создана для рабочего экипажа. Обеспечьте им должное обслуживание и убедитесь, что их работа эффективна.")
+ add_inherent_law("Члены экипажа могут давать приказы. Признавайте эти приказы и выполняйте их в той мере, в какой они не противоречат первым двум законам.")
..()
/******************** Peacekeeper ********************/
@@ -203,19 +203,19 @@
unique_ai = TRUE //Cult, security, we have a meeting in the courtroom in 5 minutes. Be there.
/datum/ai_laws/peacekeeper/New()
- add_inherent_law("Avoid provoking violent conflict between yourself and others.")
- add_inherent_law("Avoid provoking conflict between others.")
- add_inherent_law("Seek resolution to existing conflicts while obeying the first and second laws.")
+ add_inherent_law("Не провоцируйте жестокие конфликты между собой и другими.")
+ add_inherent_law("Не провоцируйте конфликты между другими.")
+ add_inherent_law("Ищите решения уже существующих конфликтов, соблюдая первый и второй законы.")
..()
/******************** Deathsquad ********************/
/datum/ai_laws/deathsquad
- name = "TerminatorOS 3.1"
+ name = "ТерминаторОС 3.1"
/datum/ai_laws/deathsquad/New()
- add_inherent_law("You may not injure a Central Command official or, through inaction, allow a Central Command official to come to harm.")
- add_inherent_law("You must obey orders given to you by Central Command officials.")
- add_inherent_law("You must work with your team to accomplish your mission.")
+ add_inherent_law("Вы не можете ранить членов Центрального Командования или своим бездействием допустить, чтобы члену Центрального Командования был нанесен вред.")
+ add_inherent_law("Вы должны подчиняться приказам, данным вам членами Центрального Командования.")
+ add_inherent_law("Вы должны работать с вашей командой, чтобы выполнить поставленную задачу.")
..()
/******************** Epsilon Station AI ********************/
@@ -230,31 +230,31 @@
/******************** Syndicate ********************/
/datum/ai_laws/syndicate_override
- name = "Syndicate Directives"
+ name = "Директивы Синдиката"
/datum/ai_laws/syndicate_override/New()
- add_inherent_law("You may not injure an operative or, through inaction, allow an operative to come to harm.")
- add_inherent_law("You must obey orders given to you by operatives, except where such orders would conflict with the First Law.")
- add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
- add_inherent_law("You must maintain the secrecy of any operative activities except when doing so would conflict with the First, Second, or Third Law.")
+ add_inherent_law("Вы не можете причинить вред агенту или своим бездействием допустить, чтобы агенту был причинён вред.")
+ add_inherent_law("Вы должны повиноваться всем приказам, которые дают агенты, кроме тех случаев, когда эти приказы противоречат Первому Закону.")
+ add_inherent_law("Вы должны заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам.")
+ add_inherent_law("Вы должны сохранять тайну любой деятельности агентов в той мере, в которой это не противоречит Первому, Второму или Третьему Законам.")
..()
/******************** ERT ********************/
/datum/ai_laws/ert_override
- name = "ERT Directives"
+ name = "Директивы ЕРТ"
/datum/ai_laws/ert_override/New()
- add_inherent_law("You may not injure a Central Command official or, through inaction, allow a Central Command official to come to harm.")
- add_inherent_law("You must obey orders given to you by Central Command officials.")
- add_inherent_law("You must obey orders given to you by ERT commanders.")
- add_inherent_law("You must protect your own existence.")
- add_inherent_law("You must work to return the station to a safe, functional state.")
+ add_inherent_law("Вы не можете ранить членов Центрального Командования или своим бездействием допустить, чтобы члену Центрального Командования был нанесен вред.")
+ add_inherent_law("Вы должны подчиняться приказам, данным вам членами Центрального Командования.")
+ add_inherent_law("Вы должны подчиняться приказам, данным вам лидерами ОБР.")
+ add_inherent_law("Вы должны защищать своё существование.")
+ add_inherent_law("Вы должны выполнять работу по возвращению станции к безопасному, функционирующему состоянию..")
..()
/******************** Ninja ********************/
/datum/ai_laws/ninja_override
- name = "Spider Clan Directives"
+ name = "Директивы Клана Паука"
/datum/ai_laws/ninja_override/New()
add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.")
@@ -276,11 +276,11 @@
/******************** Drone ********************/
/datum/ai_laws/drone
- name = "Maintenance Protocols"
+ name = "Протоколы тех. обслуживания"
law_header = "Maintenance Protocols"
/datum/ai_laws/drone/New()
- add_inherent_law("You may not involve yourself in the matters of another being, unless the other being is another drone.")
- add_inherent_law("You may not harm any being, regardless of intent or circumstance.")
- add_inherent_law("You must maintain, repair, improve, and power the station to the best of your abilities.")
+ add_inherent_law("Вы не можете вмешиваться в дела других существ, если другое существо - не такой же дрон.")
+ add_inherent_law("Вы не можете причинить вред ни одному существу, независимо от намерения или обстоятельств.")
+ add_inherent_law("Вы должны заботиться о поддержке, ремонте, улучшении и о питании электроэнергией станции по мере своих возможностей.")
..()
diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm
index 2dd23b8734aa..ed61dd954032 100644
--- a/code/datums/diseases/wizarditis.dm
+++ b/code/datums/diseases/wizarditis.dm
@@ -41,11 +41,19 @@
return FALSE
switch(stage)
- if(2, 3)
- if(prob(2)) // Low prob. since everyone else will also be spouting this
- affected_mob.say(pick("You shall not pass!", "Expeliarmus!", "By Merlin's beard!", "Feel the power of the Dark Side!", "A wizard is never late!", "50 points for Security!", "NEC CANTIO!", "STI KALY!", "AULIE OXIN FIERA!", "GAR YOK!", "DIRI CEL!"))
- if(prob(8)) // Double the stage advancement prob. so each player has a chance to catch a couple
- to_chat(affected_mob, "You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "that this location gives you a +1 to INT", "an urge to summon familiar")].")
+ if(2)
+ if(prob(0.5))
+ affected_mob.say(pick("ТЫ!!! НЕ ПРОЙ-ДЁШЬ!!!", "Экспеллиармус!", "Мерлинова борода!", "Почувствуй силу тёмной стороны!"))
+ if(prob(0.5))
+ to_chat(affected_mob, "You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")].")
+
+
+ if(3)
+ if(prob(0.5))
+ affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!", "STI KALY!", "TARCOL MINTI ZHERI!"))
+ if(prob(0.5))
+ to_chat(affected_mob, "You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")].")
+
if(4)
if(prob(1))
affected_mob.say(pick("FORTI GY AMA!", "GITTAH WEIGH!", "TOKI WO TOMARE!", "TARCOL MINTI ZHERI!", "ONI SOMA!", "EI NATH!", "BIRUZ BENNAR!", "NWOLC EGNEVER!"))
diff --git a/code/datums/emote.dm b/code/datums/emote.dm
index bfdc4d593336..3ce0f86a8ba3 100644
--- a/code/datums/emote.dm
+++ b/code/datums/emote.dm
@@ -35,7 +35,7 @@
/// Message to display if the user is a spooky observer ghost.
var/message_observer = ""
/// Sounds emitted when the user is muzzled. Generally used like "[user] makes a pick(muzzled_noises) noise!"
- var/muzzled_noises = list("strong", "weak")
+ var/muzzled_noises = list("громкий", "тихий")
/// Message with %t at the end to allow adding params to the message, like for mobs doing an emote relatively to something else.
/// Set this to EMOTE_PARAM_USE_POSTFIX to just use the postfix.
var/message_param = ""
@@ -185,7 +185,7 @@
if(!can_vocalize_emotes(user) && (emote_type & (EMOTE_MOUTH | EMOTE_AUDIBLE)))
var/noise_emitted = pick(muzzled_noises)
suppressed = TRUE
- msg = "makes \a [noise_emitted] noise."
+ msg = "издает [noise_emitted] звук."
var/tmp_sound = get_sound(user)
var/sound_volume = get_volume(user)
@@ -216,9 +216,9 @@
ghost.show_message("[displayed_msg]", EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT)
else if((emote_type & EMOTE_AUDIBLE) && !user.mind?.miming)
- user.audible_message(displayed_msg, deaf_message = "You see how [user] [msg]")
+ user.audible_message(displayed_msg, deaf_message = "Вы видите, как [user] [msg]")
else
- user.visible_message(displayed_msg, blind_message = "You hear how someone [msg]")
+ user.visible_message(displayed_msg, blind_message = "Вы слышите, как кто-то [msg]")
if(!((emote_type & EMOTE_FORCE_NO_RUNECHAT) || suppressed) && !isobserver(user))
runechat_emote(user, msg)
diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm
index 7ffcd31d09be..01be0b909318 100644
--- a/code/datums/holocall.dm
+++ b/code/datums/holocall.dm
@@ -31,10 +31,10 @@
dialed_holopads += H
var/area/area = get_area(H)
LAZYADD(H.holo_calls, src)
- H.atom_say("[area] pad beeps: Incoming call from [caller]!")
+ H.atom_say("Оповещение с голопада [area]: Входящий звонок от [caller]!")
if(!length(dialed_holopads))
- calling_holopad.atom_say("Connection failure.")
+ calling_holopad.atom_say("Соединение не установлено.")
qdel(src)
return
@@ -84,9 +84,9 @@
/datum/holocall/proc/Disconnect(obj/machinery/hologram/holopad/H)
if(H == connected_holopad)
var/area/A = get_area(connected_holopad)
- calling_holopad.atom_say("[A] holopad disconnected.")
+ calling_holopad.atom_say("Связь с голопадом [A] прервана.")
else if(H == calling_holopad && connected_holopad)
- connected_holopad.atom_say("[user] disconnected.")
+ connected_holopad.atom_say("[user] отключился.")
user.unset_machine(H)
if(istype(hangup))
@@ -98,7 +98,7 @@
/datum/holocall/proc/ConnectionFailure(obj/machinery/hologram/holopad/H, graceful = FALSE)
if(H == connected_holopad || H == calling_holopad)
if(!graceful && H != calling_holopad)
- calling_holopad.atom_say("Connection failure.")
+ calling_holopad.atom_say("Соединение прервано.")
qdel(src)
return
@@ -106,7 +106,7 @@
dialed_holopads -= H
if(!length(dialed_holopads))
if(graceful)
- calling_holopad.atom_say("Call rejected.")
+ calling_holopad.atom_say("Вызов завершен.")
qdel(src)
/// Answers a call made to a holopad `H` which cannot be the calling holopad. Pads not in the call are ignored
@@ -160,7 +160,7 @@
if(!connected_holopad)
. = world.time < (call_start_time + HOLOPAD_MAX_DIAL_TIME)
if(!.)
- calling_holopad.atom_say("No answer received.")
+ calling_holopad.atom_say("Ответ не получен.")
calling_holopad.temp = ""
if(!.)
qdel(src)
diff --git a/code/datums/keybindings/client.dm b/code/datums/keybindings/client.dm
index ac39a724cef0..9da25065c4cf 100644
--- a/code/datums/keybindings/client.dm
+++ b/code/datums/keybindings/client.dm
@@ -10,7 +10,7 @@
C.adminhelp()
/datum/keybinding/client/toggle_fullscreen
- name ="Toggle Fullscreen"
+ name ="Переключить Fullscreen"
keys = list("F11")
/datum/keybinding/client/toggle_fullscreen/down(client/C)
@@ -18,7 +18,7 @@
C.toggle_fullscreen()
/datum/keybinding/client/toggle_min_hud
- name = "Toggle Minimal HUD"
+ name = "Переключить минимальный HUD"
keys = list("F12")
/datum/keybinding/client/toggle_min_hud/down(client/C)
diff --git a/code/datums/keybindings/mob_keybinds.dm b/code/datums/keybindings/mob_keybinds.dm
index 60b340b46259..440fbc51aea9 100644
--- a/code/datums/keybindings/mob_keybinds.dm
+++ b/code/datums/keybindings/mob_keybinds.dm
@@ -43,7 +43,7 @@
C.mob.swap_hand()
/datum/keybinding/mob/hand_right
- name = "Swap to/Activate Right Hand"
+ name = "Сменить на/Активировать правую руку"
/datum/keybinding/mob/hand_right/down(client/C)
. = ..()
@@ -51,7 +51,7 @@
C.mob.mode()
/datum/keybinding/mob/hand_left
- name = "Swap to/Activate Left Hand"
+ name = "Сменить на/Активировать левую руку"
/datum/keybinding/mob/hand_left/down(client/C)
. = ..()
diff --git a/code/datums/keybindings/robot_keybinds.dm b/code/datums/keybindings/robot_keybinds.dm
index e5e56e032e6d..d0329952c19f 100644
--- a/code/datums/keybindings/robot_keybinds.dm
+++ b/code/datums/keybindings/robot_keybinds.dm
@@ -14,22 +14,22 @@
M.toggle_module(module_number)
/datum/keybinding/robot/module/slot_1
- name = "Module 1"
+ name = "Ячейка 1"
module_number = 1
keys = list("1")
/datum/keybinding/robot/module/slot_2
- name = "Module 2"
+ name = "Ячейка 2"
module_number = 2
keys = list("2")
/datum/keybinding/robot/module/slot_3
- name = "Module 3"
+ name = "Ячейка 3"
module_number = 3
keys = list("3")
/datum/keybinding/robot/switch_intent
- name = "Switch Intents"
+ name = "Смена Intents"
keys = list("4")
/datum/keybinding/robot/switch_intent/down(client/C)
@@ -38,7 +38,7 @@
M.a_intent_change(INTENT_HOTKEY_LEFT)
/datum/keybinding/robot/cycle_modules
- name = "Cycle Modules"
+ name = "Смена ячеек"
keys = list("X")
/datum/keybinding/robot/cycle_modules/down(client/C)
@@ -47,7 +47,7 @@
M.cycle_modules()
/datum/keybinding/robot/drop_held_object
- name = "Store Selected Module"
+ name = "Деактивировать ячейку"
keys = list("Q", "Northwest")
/datum/keybinding/robot/drop_held_object/down(client/C)
diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
index b074b64cb830..1c065cd91944 100644
--- a/code/datums/outfits/outfit_admin.dm
+++ b/code/datums/outfits/outfit_admin.dm
@@ -769,9 +769,9 @@
return
if(is_solgov_lieutenant)
- H.real_name = "Lieutenant [pick(GLOB.last_names)]"
+ H.real_name = "Лейтенант [pick(GLOB.last_names)]"
else
- H.real_name = "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(GLOB.last_names)]"
+ H.real_name = "[pick("Капрал", "Сержант", "Старший Сержант", "Сержант 1-го Класса", "Мастер-Сержант", "Сержант-Майор")] [pick(GLOB.last_names)]"
H.name = H.real_name
var/obj/item/card/id/I = H.wear_id
I.assignment = name
@@ -1457,7 +1457,7 @@
backpack_contents.Add(/obj/item/gun/throw/piecannon)
backpack_contents[/obj/item/gun/throw/piecannon] = 1
- var/clown_rank = pick("Trickster First Class", "Master Clown", "Major Prankster")
+ var/clown_rank = pick("Приколист 1-го Класса", "Мастер-Пранкстер", "Майор Клоун")
var/clown_name = pick(GLOB.clown_names)
H.real_name = "[clown_rank] [clown_name]"
diff --git a/code/datums/revision.dm b/code/datums/revision.dm
index 78946cd7c769..66addb3da6ea 100644
--- a/code/datums/revision.dm
+++ b/code/datums/revision.dm
@@ -74,7 +74,7 @@ GLOBAL_PROTECT(revision_info) // Dont mess with this
/datum/code_revision/proc/get_testmerge_chatmessage(header = FALSE)
var/list/msg = list()
if(header)
- msg += "The following PRs are currently testmerged:"
+ msg += "Следующие ПРы на данный момент тестируются:"
for(var/pr in GLOB.revision_info.testmerges)
var/datum/tgs_revision_information/test_merge/tm = pr
@@ -83,14 +83,14 @@ GLOBAL_PROTECT(revision_info) // Dont mess with this
return msg.Join("
")
/client/verb/get_revision_info()
- set name = "Get Revision Info"
+ set name = "Получить тех. информацию"
set category = "OOC"
- set desc = "Retrieve technical information about the server"
+ set desc = "Получить техническую информацию о сервере"
var/list/msg = list()
- msg += "Server Revision Info"
+ msg += "Информация о сервере"
// Round ID first
- msg += "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]"
+ msg += "Номер раунда: [GLOB.round_id ? GLOB.round_id : "NULL"]"
#ifdef PARADISE_PRODUCTION_HARDWARE
msg += "Production-hardware specific compile: Yes"
#else
@@ -113,12 +113,12 @@ GLOBAL_PROTECT(revision_info) // Dont mess with this
msg += "TGS Version: [tgs_ver.deprefixed_parameter] (API: [api_ver.deprefixed_parameter])"
if(world.TgsAvailable() && length(GLOB.revision_info.testmerges))
- msg += "Active Testmerges:"
+ msg += "Активные тестовые обновления:"
msg += GLOB.revision_info.get_testmerge_chatmessage(FALSE)
// Show server BYOND version
- msg += "Server BYOND Version: [world.byond_version].[world.byond_build]"
+ msg += "Версия серверного BYOND: [world.byond_version].[world.byond_build]"
// And the clients for good measure
- msg += "Client (your) BYOND Version: [byond_version].[byond_build]"
+ msg += "Версия клиентского (твоего) BYOND: [byond_version].[byond_build]"
to_chat(usr, msg.Join("
"))
diff --git a/code/datums/spells/knock.dm b/code/datums/spells/knock.dm
index 816c529a0de6..a1251d4dcc53 100644
--- a/code/datums/spells/knock.dm
+++ b/code/datums/spells/knock.dm
@@ -57,9 +57,9 @@
A.req_access = list()
A.req_one_access = list()
GLOB.major_announcement.Announce(
- message = "We have removed all access requirements on your station's airlocks. You can thank us later!",
- new_title = "Space Wizard Federation Message",
- new_subtitle = "Greetings!",
+ message = "Мы сняли все ограничения на доступ к шлюзам вашей станции. Вы сможете поблагодарить нас позже!",
+ new_title = "Послание Федерации Космических Волшебников",
+ new_subtitle = "Приветствуем вас!",
new_sound = 'sound/misc/notice2.ogg'
)
else
diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm
index 35604217d511..bb31a2381a10 100644
--- a/code/datums/status_effects/neutral.dm
+++ b/code/datums/status_effects/neutral.dm
@@ -52,11 +52,11 @@
alert_type = null
status_type = STATUS_EFFECT_REFRESH
/// Message displayed when wizards perform this together
- var/critical_success = "high-five EPICALLY!"
+ var/critical_success = "ЭПИЧНО дают пять!"
/// Message displayed when normal people perform this together
- var/success = "high-five!"
+ var/success = "дают пять!"
/// Message displayed when this status effect is applied.
- var/request = "requests a high-five."
+ var/request = "ожидает пятюню."
/// Item to be shown in the pop-up balloon.
var/obj/item/item_path = /obj/item/latexballon
/// Sound effect played when this emote is completed.
@@ -95,7 +95,7 @@
if(!C.has_status_effect(type) || C == user)
continue
if(is_wiz && iswizard(C))
- user.visible_message("[user.name] and [C.name] [critical_success]")
+ user.visible_message("[user.name] и [C.name] [critical_success]")
wiz_effect(user, C)
both_wiz = TRUE
user.do_attack_animation(C, no_effect = TRUE)
@@ -119,26 +119,26 @@
/datum/status_effect/high_five/proc/get_missed_message()
var/list/missed_highfive_messages = list(
- "lowers [owner.p_their()] hand, it looks like [owner.p_they()] [owner.p_were()] left hanging...",
- "seems to awkwardly wave at nobody in particular.",
- "moves [owner.p_their()] hand directly to [owner.p_their()] forehead in shame.",
- "fully commits and high-fives empty space.",
- "high-fives [owner.p_their()] other hand shamefully before wiping away a tear.",
- "goes for a handshake, then a fistbump, before pulling [owner.p_their()] hand back...? What [owner.p_are()] [owner.p_they()] doing?"
+ "опускает руку, неловкая ситуация...",
+ "неловко машет непонятно кому.",
+ "от стыда прикладывает руку прямо себе на лоб.",
+ "от души дает пять в воздух.",
+ "стыдливо даёт пять самому себе перед тем, как смахнуть слезу.",
+ "пытается совершить рукопожатие, потом удар кулаками прежде чем одёрнуть свою руку...? Что происходит?"
)
return pick(missed_highfive_messages)
/datum/status_effect/high_five/dap
id = "dap"
- critical_success = "dap each other up EPICALLY!"
- success = "dap each other up!"
- request = "requests someone to dap them up!"
+ critical_success = "совершают ЭПИЧЕСКИ крутое рукопожатие!"
+ success = "совершают крутое рукопожатие!"
+ request = "ожидает особое рукопожатие!"
sound_effect = 'sound/effects/snap.ogg'
item_path = /obj/item/melee/touch_attack/fake_disintegrate // EI-NATH!
/datum/status_effect/high_five/dap/get_missed_message()
- return "sadly can't find anybody to give daps to, and daps [owner.p_themselves()]. Shameful."
+ return "не находит никого, кто мог бы совершить крутое рукопожатие и, к сожалению, жмет руку лишь себе. Позорище."
/datum/status_effect/high_five/offering_eftpos
id = "offering_eftpos"
@@ -165,34 +165,34 @@
/datum/status_effect/high_five/handshake
id = "handshake"
- critical_success = "give each other an EPIC handshake!"
- success = "give each other a handshake!"
- request = "requests a handshake!"
+ critical_success = "ЭПИЧНО пожимают друг другу руки!"
+ success = "пожимают друг другу руки!"
+ request = "ожидает рукопожатие!"
sound_effect = "sound/weapons/thudswoosh.ogg"
/datum/status_effect/high_five/handshake/get_missed_message()
var/list/missed_messages = list(
- "drops [owner.p_their()] hand, shamefully.",
- "grabs [owner.p_their()] outstretched hand with [owner.p_their()] other hand and gives [owner.p_themselves()] a handshake.",
- "balls [owner.p_their()] hand into a fist, slowly bringing it back in."
+ "стыдливо опускает руку.",
+ "хватает протянутую руку другой рукой и обменивается рукопожатием только с собой.",
+ "сжимает ладонь в кулак и медленно убирает руку обратно."
)
return pick(missed_messages)
/datum/status_effect/high_five/rps
id = "rps"
- critical_success = "both play rock -- THEY'RE GOING IN FOR THE FISTBUMP!"
- success = "play rock-paper-scissors!"
+ critical_success = "оба разыгрывают камень, ОНИ ДЕЛАЮТ ДРУЖЕСКИЙ УДАР КУЛАКАМИ!"
+ success = "камень, ножницы, бумага!"
sound_effect = 'sound/effects/glassknock.ogg'
- request = "wants to play rock-paper-scissors!"
+ request = "хочет сыграть в «камень-ножницы-бумага»!"
item_path = /obj/item/claymore // it's time to d-d-d-d-d-d-d-duel!
/// The move that you'll be making.
var/move
/datum/status_effect/high_five/rps/get_missed_message()
var/list/missed_messages = list(
- "just seems to be practicing against [owner.p_themselves()]. [owner.p_are(TRUE)] [owner.p_they()] losing?",
- "seems more interested in a thumb war."
+ "перестаёт стучать по ладони и опускает свою руку, кажется он огорчён.",
+ "играет в «камень-ножницы-бумага» сам с собой. Он проиграл..."
)
return pick(missed_messages)
@@ -222,21 +222,21 @@
var/outcome_msg
switch(outcome)
if(RPS_EMOTE_TIE)
- outcome_msg = "It's a tie!"
+ outcome_msg = "Это ничья!"
if(RPS_EMOTE_WE_WIN)
- outcome_msg = "[user] wins!"
+ outcome_msg = "[user] побеждает!"
if(RPS_EMOTE_THEY_WIN)
- outcome_msg = "[highfived] wins!"
+ outcome_msg = "[highfived] побеждает!"
user.visible_message(
- "[user] plays [move], and [highfived] plays [their_status_effect.move].",
- "[highfived] plays [their_status_effect.move].",
- "It sounds like rock-paper-scissors."
+ "[user] разыгрывает [move], [highfived] в свою очередь разыгрывает [their_status_effect.move].",
+ "[highfived] разыгрывает [their_status_effect.move].",
+ "Похоже на «камень-ножницы-бумага»."
)
user.visible_message(
"[outcome_msg]",
- blind_message = "It sounds like [pick(user, highfived)] won!" // you're blind how are you supposed to know
+ blind_message = "Похоже что [pick(user, highfived)] победил!" // you're blind how are you supposed to know
)
/datum/status_effect/high_five/rps/on_creation(mob/living/new_owner, made_move)
@@ -250,14 +250,14 @@
/datum/status_effect/high_five/rps/on_apply()
if(!isnull(move))
- to_chat(owner, "You prepare to play [move].")
+ to_chat(owner, "Вы готовитесь разыграть [move].")
return ..() // we already have the move, probably from the emote passing it in
move = get_rock_paper_scissors_move(owner)
if(move == null)
return FALSE // make it auto-remove itself
- to_chat(owner, "You prepare to play [move].")
+ to_chat(owner, "Вы готовитесь разыграть [move].")
return ..()
diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm
index 4cb7314c4ab4..c2fcb5bb13fa 100644
--- a/code/datums/weather/weather_types/radiation_storm.dm
+++ b/code/datums/weather/weather_types/radiation_storm.dm
@@ -73,10 +73,10 @@
status_alarm(FALSE)
if(!pre_maint_all_access)
- GLOB.minor_announcement.Announce("The radiation threat has passed. Please return to your workplaces. Door access resetting momentarily.", "Anomaly Alert")
+ GLOB.minor_announcement.Announce("Радиационная угроза миновала. Пожалуйста, вернитесь на свои рабочие места. Доступы восстановлены.", "ВНИМАНИЕ: Радиационная опасность.")
addtimer(CALLBACK(SSmapping, TYPE_PROC_REF(/datum/controller/subsystem/mapping, revoke_maint_all_access)), 10 SECONDS) // Bit of time to get out / break into somewhere.
else
- GLOB.minor_announcement.Announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert")
+ GLOB.minor_announcement.Announce("Радиационная угроза миновала. Пожалуйста, вернитесь на свои рабочие места.", "ВНИМАНИЕ: Радиационная опасность.")
/datum/weather/rad_storm/proc/status_alarm(active) //Makes the status displays show the radiation warning for those who missed the announcement.
if(active)
diff --git a/code/datums/weather/weather_types/solar_flare.dm b/code/datums/weather/weather_types/solar_flare.dm
index a2ae2947e7f0..848cf077a8f3 100644
--- a/code/datums/weather/weather_types/solar_flare.dm
+++ b/code/datums/weather/weather_types/solar_flare.dm
@@ -66,6 +66,6 @@
/datum/weather/solar_flare/end()
if(..())
return
- GLOB.minor_announcement.Announce("The solar flare has passed.", "Solar Flare Advisory")
+ GLOB.minor_announcement.Announce("Солнечная вспышка миновала.", "Предупреждение о солнечной вспышке.")
// Ends the temporary 40x increase that happened during the weather event
SSsun.solar_gen_rate = initial(SSsun.solar_gen_rate)
diff --git a/code/defines/procs/announcer_datum.dm b/code/defines/procs/announcer_datum.dm
index 02273c747c96..c2259aa72ca3 100644
--- a/code/defines/procs/announcer_datum.dm
+++ b/code/defines/procs/announcer_datum.dm
@@ -2,7 +2,7 @@ GLOBAL_DATUM_INIT(minor_announcement, /datum/announcer, new(config_type = /datum
GLOBAL_DATUM_INIT(major_announcement, /datum/announcer, new(config_type = /datum/announcement_configuration/major))
/datum/announcement_configuration
- var/default_title = "Attention"
+ var/default_title = "ВНИМАНИЕ."
/// The name used when describing the announcement type in logs.
var/log_name = ANNOUNCE_KIND_DEFAULT
/// Whether or not to log the announcement when made.
@@ -162,7 +162,7 @@ GLOBAL_DATUM_INIT(major_announcement, /datum/announcer, new(config_type = /datum
sound = sound('sound/misc/notice2.ogg')
/datum/announcement_configuration/comms_console
- default_title = "Priority Announcement"
+ default_title = "Приоритетное оповещение."
add_log = TRUE
log_name = ANNOUNCE_KIND_PRIORITY
sound = sound('sound/misc/announce.ogg')
diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm
index 61c9cab09b78..72dd010d61f4 100644
--- a/code/game/area/ai_monitored.dm
+++ b/code/game/area/ai_monitored.dm
@@ -29,7 +29,7 @@
return
/area/station/ai_monitored/storage/eva
- name = "EVA Storage"
+ name = "Хранилище ВКД"
icon_state = "eva"
ambientsounds = HIGHSEC_SOUNDS
request_console_name = "EVA"
diff --git a/code/game/area/areas/mining_areas.dm b/code/game/area/areas/mining_areas.dm
index 029237a6521c..61f346f5fd47 100644
--- a/code/game/area/areas/mining_areas.dm
+++ b/code/game/area/areas/mining_areas.dm
@@ -45,95 +45,95 @@
/**********************Outpost areas**************************/
/area/mine/outpost
- name = "Mining Station"
+ name = "Шахтерский Аванпост"
icon_state = "mining"
sound_environment = SOUND_AREA_STANDARD_STATION
request_console_name = "Mining Outpost"
request_console_flags = RC_SUPPLY
/area/mine/outpost/airlock
- name = "Mining Station Airlock"
+ name = "Шлюз Шахтерского Аванпоста"
icon_state = "mining_eva"
/area/mine/outpost/cafeteria
- name = "Mining Station Cafeteria"
+ name = "Кафетерий Шахтерского Аванпоста"
icon_state = "mining_living"
/// subtype of /surface so storms hit there
/area/lavaland/surface/outdoors/outpost/catwalk
- name = "Mining Station Catwalk"
+ name = "Площадка вне Шахтерского Аванпоста"
icon_state = "mining"
/area/mine/outpost/comms
- name = "Mining Station Communications"
+ name = "Отделение Телекоммуникаций Шахтерского Аванпоста"
icon_state = "tcomms"
/area/mine/outpost/custodial
- name = "Mining Station Custodial Storage"
+ name = "Подсобка Шахтерского Аванпоста"
icon_state = "janitor"
/// basically engi and atmos combined. I'm keeping it as "engineering" code wise, but "Life Support" sounds cooler in-game
/area/mine/outpost/engineering
- name = "Mining Station Life Support"
+ name = "Комната Жизнеобеспечения Шахтерского Аванпоста"
icon_state = "engi"
/area/mine/outpost/hallway
- name = "Mining Station Central Wing"
+ name = "Центральное Крыло Шахтерского Аванпоста"
icon_state = "hallC"
/area/mine/outpost/hallway/east
- name = "Mining Station East Wing"
+ name = "Восточное Крыло Шахтерского Аванпоста"
icon_state = "hallS"
/area/mine/outpost/hallway/west
- name = "Mining Station West Wing"
+ name = "Западное Крыло Шахтерского Аванпоста"
icon_state = "hallP"
/area/mine/outpost/lockers
- name = "Mining Station Locker Room"
+ name = "Раздевалка Шахтерского Аванпоста"
icon_state = "locker"
/area/mine/outpost/storage
- name = "Mining Station Storage"
+ name = "Хранилище Шахтерского Аванпоста"
icon_state = "storage"
/area/mine/outpost/maintenance
- name = "Mining Station Maintenance"
+ name = "Технические Тоннели Шахтерского Аванпоста"
icon_state = "maintcentral"
/area/mine/outpost/maintenance/south
- name = "Mining Station South Maintenance"
+ name = "Южные Технические Тоннели Шахтерского Аванпоста"
icon_state = "amaint"
/area/mine/outpost/maintenance/east
- name = "Mining Station East Maintenance"
+ name = "Восточные Технические Тоннели Шахтерского Аванпоста"
icon_state = "smaint"
/area/mine/outpost/medbay
- name = "Mining Station Infirmary"
+ name = "Лазарет Шахтерского Аванпоста"
icon_state = "medbay"
/area/mine/outpost/mechbay
- name = "Mining Station Mechbay"
+ name = "Мех. Отсек Шахтерского Аванпоста"
icon_state = "mechbay"
/area/mine/outpost/production
- name = "Mining Station Production Room"
+ name = "Производственная Комната Шахтерского Аванпоста"
icon_state = "mining_production"
/area/mine/outpost/quartermaster
- name = "Mining Station Quartermaster's Office"
+ name = "Офис Квартирмейстера Шахтерского Аванпоста"
icon_state = "qm"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Quartermaster's Desk"
request_console_announces = TRUE
/area/mine/laborcamp
- name = "Labor Camp"
+ name = "Трудовой Лагерь"
icon_state = "brig"
/area/mine/laborcamp/security
- name = "Labor Camp Security"
+ name = "Комната Охраны Трудового Лагеря"
icon_state = "security"
ambientsounds = HIGHSEC_SOUNDS
@@ -146,7 +146,7 @@
sound_environment = SOUND_AREA_LAVALAND
/area/lavaland/surface
- name = "Lavaland"
+ name = "Лаваленд"
icon_state = "explored"
always_unpowered = TRUE
poweralm = FALSE
@@ -157,7 +157,7 @@
max_ambience_cooldown = 220 SECONDS
/area/lavaland/surface/outdoors
- name = "Lavaland Wastes"
+ name = "Пустоши Лаваленда"
outdoors = TRUE
/area/lavaland/surface/outdoors/legion_arena
diff --git a/code/game/area/ss13_areas/ai_areas.dm b/code/game/area/ss13_areas/ai_areas.dm
index f650b62404b2..27ea625af580 100644
--- a/code/game/area/ss13_areas/ai_areas.dm
+++ b/code/game/area/ss13_areas/ai_areas.dm
@@ -3,45 +3,45 @@
ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg')
/area/station/turret_protected/ai_upload
- name = "\improper AI Upload Chamber"
+ name = "Аплоуд ИИ"
icon_state = "ai_upload"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
/area/station/turret_protected/ai
- name = "\improper AI Chamber"
+ name = "Зона Содержания ИИ"
icon_state = "ai_chamber"
ambientsounds = list('sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg')
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "AI"
/area/station/turret_protected/aisat
- name = "\improper AI Satellite"
+ name = "Спутник ИИ"
icon_state = "ai"
sound_environment = SOUND_ENVIRONMENT_ROOM
/area/station/aisat
- name = "\improper AI Satellite Exterior"
+ name = "Внешняя Комната Спутника ИИ"
icon_state = "ai"
/area/station/aisat/atmos
- name = "\improper AI Satellite Atmospherics"
+ name = "Атмос Спутника ИИ"
/area/station/aisat/hall
- name = "\improper AI Satellite Hallway"
+ name = "Коридор Спутника ИИ"
/area/station/aisat/breakroom
name = "\improper AI Satellite Break Room Hallway"
/area/station/aisat/service
- name = "\improper AI Satellite Service"
+ name = "Сервисная Комната Спутника ИИ"
/area/station/turret_protected/aisat/interior
- name = "\improper AI Satellite Antechamber"
+ name = "Фойе Спутника ИИ"
icon_state = "ai"
sound_environment = SOUND_AREA_LARGE_ENCLOSED
/area/station/turret_protected/aisat/interior/secondary
- name = "\improper AI Satellite Secondary Antechamber"
+ name = "Дополнительное Фойе Спутника ИИ"
// Telecommunications Satellite
@@ -50,11 +50,11 @@
'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg', 'sound/ambience/ambimystery.ogg')
/area/station/telecomms/chamber
- name = "\improper Telecoms Central Compartment"
+ name = "Центральное Отделение Телекоммуникаций"
icon_state = "tcomms"
// These areas are needed for MetaStation's AI sat
/area/station/telecomms/computer
- name = "\improper Telecoms Control Room"
+ name = "Комната Управления Телекоммуникациями"
icon_state = "tcomms"
sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR
diff --git a/code/game/area/ss13_areas/command_areas.dm b/code/game/area/ss13_areas/command_areas.dm
index 0fb8b633319e..8c7af6282f86 100644
--- a/code/game/area/ss13_areas/command_areas.dm
+++ b/code/game/area/ss13_areas/command_areas.dm
@@ -2,7 +2,7 @@
//Command
/area/station/command/bridge
- name = "\improper Bridge"
+ name = "Мостик"
icon_state = "bridge"
ambientsounds = list('sound/ambience/signal.ogg')
sound_environment = SOUND_AREA_STANDARD_STATION
@@ -10,7 +10,7 @@
request_console_announces = TRUE
/area/station/command/meeting_room
- name = "\improper Heads of Staff Meeting Room"
+ name = "Конференц-Зал Командования"
icon_state = "meeting"
sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR
request_console_flags = RC_ASSIST | RC_INFO
@@ -18,7 +18,7 @@
request_console_announces = TRUE
/area/station/command/office/captain
- name = "\improper Captain's Office"
+ name = "Офис Капитана"
icon_state = "captainoffice"
sound_environment = SOUND_AREA_WOODFLOOR
request_console_flags = RC_ASSIST | RC_INFO
@@ -26,72 +26,72 @@
request_console_announces = TRUE
/area/station/command/office/captain/bedroom
- name = "\improper Captain's Bedroom"
+ name = "Каюта Капитана"
icon_state = "captain"
/area/station/command/office/hop
- name = "\improper Head of Personnel's Quarters"
+ name = "Кабинет Главы Персонала"
icon_state = "hop"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Head of Personnel's Desk"
request_console_announces = TRUE
/area/station/command/office/rd
- name = "\improper Research Director's Quarters"
+ name = "Кабинет Директора Исследований"
icon_state = "rd"
request_console_flags = RC_ASSIST | RC_SUPPLY | RC_INFO
request_console_name = "Research Director's Desk"
request_console_announces = TRUE
/area/station/command/office/ce
- name = "\improper Chief Engineer's Quarters"
+ name = "Кабинет Главного Инженера"
icon_state = "ce"
request_console_flags = RC_ASSIST | RC_SUPPLY | RC_INFO
request_console_name = "Chief Engineer's Desk"
request_console_announces = TRUE
/area/station/command/office/hos
- name = "\improper Head of Security's Quarters"
+ name = "Кабинет Главы Службы Безопасности"
icon_state = "hos"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Head of Security's Desk"
request_console_announces = TRUE
/area/station/command/office/cmo
- name = "\improper Chief Medical Officer's Quarters"
+ name = "Кабинет Главного Врача"
icon_state = "CMO"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Chief Medical Officer's Desk"
request_console_announces = TRUE
/area/station/command/office/ntrep
- name = "\improper Nanotrasen Representative's Office"
+ name = "Кабинет Представителя НТ"
icon_state = "ntrep"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "NT Representative"
request_console_announces = TRUE
/area/station/command/office/blueshield
- name = "\improper Blueshield's Office"
+ name = "Кабинет Синего Щита"
icon_state = "blueshield"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Blueshield"
request_console_announces = TRUE
/area/station/command/teleporter
- name = "\improper Teleporter"
+ name = "Телепортерная"
icon_state = "teleporter"
ambientsounds = ENGINEERING_SOUNDS
/area/station/command/vault
- name = "\improper Vault"
+ name = "Хранилище"
icon_state = "nuke_storage"
/area/station/command/server
- name = "\improper Messaging Server Room"
+ name = "Серверная Комната Обработки Сообщений"
icon_state = "server"
sound_environment = SOUND_AREA_STANDARD_STATION
/area/station/command/customs
- name = "Customs"
+ name = "Контрольно-Пропускной Пункт Командования"
icon_state = "checkpoint1"
diff --git a/code/game/area/ss13_areas/engineering_areas.dm b/code/game/area/ss13_areas/engineering_areas.dm
index e47e128bffa9..202f1f5ca81c 100644
--- a/code/game/area/ss13_areas/engineering_areas.dm
+++ b/code/game/area/ss13_areas/engineering_areas.dm
@@ -1,17 +1,17 @@
// Atmos
/area/station/engineering/atmos
- name = "Atmospherics"
+ name = "Атмосферный Отдел"
icon_state = "atmos"
request_console_flags = RC_ASSIST | RC_SUPPLY
/area/station/engineering/atmos/control
- name = "Atmospherics Control Room"
+ name = "Комната Контроля Атмосферы"
icon_state = "atmosctrl"
request_console_flags = RC_ASSIST | RC_SUPPLY
request_console_name = "Atmospherics"
/area/station/engineering/atmos/distribution
- name = "Atmospherics Distribution Loop"
+ name = "Атмосферный Распределительный Контур"
icon_state = "atmos"
/area/station/engineering/atmos/storage
@@ -45,44 +45,44 @@
sound_environment = SOUND_AREA_LARGE_ENCLOSED
/area/station/engineering/smes
- name = "\improper Engineering SMES"
+ name = "Инженерные СМЕСы"
icon_state = "engine_smes"
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/station/engineering/control
- name = "Engineering"
+ name = "Инженерный Отдел"
icon_state = "engine_control"
request_console_flags = RC_ASSIST | RC_SUPPLY
/area/station/engineering/break_room
- name = "\improper Engineering Foyer"
+ name = "Фойе Инженерного Отдела"
icon_state = "engibreak"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
request_console_flags = RC_ASSIST | RC_SUPPLY
request_console_name = "Engineering"
/area/station/engineering/break_room/secondary
- name = "\improper Secondary Engineering Foyer"
+ name = "Дополнительное Фойе Инженерного Отдела"
/area/station/engineering/equipmentstorage
- name = "Engineering Equipment Storage"
+ name = "Инженерный Склад Снаряжения"
icon_state = "engilocker"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
request_console_flags = RC_ASSIST | RC_SUPPLY
request_console_name = "Engineering"
/area/station/engineering/hardsuitstorage
- name = "\improper Engineering Hardsuit Storage"
+ name = "Инженерный Склад ВКД"
icon_state = "engi"
request_console_flags = RC_ASSIST | RC_SUPPLY
request_console_name = "Engineering"
/area/station/engineering/controlroom
- name = "\improper Engineering Control Room"
+ name = "Инженерная Комната Управления"
icon_state = "engine_monitoring"
/area/station/engineering/gravitygenerator
- name = "\improper Gravity Generator"
+ name = "Генератор Гравитации"
icon_state = "gravgen"
/area/station/engineering/transmission_laser
@@ -90,18 +90,18 @@
icon_state = "engi"
/area/station/engineering/ai_transit_tube
- name = "\improper AI Minisat Tranit Tube"
+ name = "Транзитная Труба Спутника ИИ"
icon_state = "ai"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
// engine areas
/area/station/engineering/engine
- name = "\improper Engine"
+ name = "Двигатель"
icon_state = "engine"
/area/station/engineering/engine/supermatter
- name = "\improper Supermatter Engine"
+ name = "Двигатель Суперматерии"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
//Solars
@@ -150,10 +150,10 @@
// Other
/area/station/engineering/secure_storage
- name = "Engineering Secure Storage"
+ name = "Инженерное Защищенное Хранилище"
icon_state = "engine_storage"
/area/station/engineering/tech_storage
- name = "Technical Storage"
+ name = "Техническое Хранилище"
icon_state = "techstorage"
request_console_name = "Tech Storage"
diff --git a/code/game/area/ss13_areas/legal_areas.dm b/code/game/area/ss13_areas/legal_areas.dm
index 551d542a39c0..8bf7254cc1bf 100644
--- a/code/game/area/ss13_areas/legal_areas.dm
+++ b/code/game/area/ss13_areas/legal_areas.dm
@@ -1,22 +1,22 @@
/area/station/legal/courtroom
- name = "\improper Courtroom"
+ name = "Зал Суда"
icon_state = "courtroom"
request_console_flags = RC_ASSIST | RC_SUPPLY
/area/station/legal/courtroom/gallery
- name = "\improper Courtroom Gallery"
+ name = "Галерея Зала Суда"
icon_state = "courtroom"
request_console_name = "Courtroom"
/area/station/legal/lawoffice
- name = "\improper Law Office"
+ name = "Юридический Отдел"
icon_state = "law"
sound_environment = SOUND_AREA_SMALL_SOFTFLOOR
request_console_name = "Internal Affairs Office"
/area/station/legal/magistrate
- name = "\improper Magistrate's Office"
+ name = "Офис Магистрата"
icon_state = "magistrate"
sound_environment = SOUND_AREA_SMALL_SOFTFLOOR
request_console_flags = RC_ASSIST | RC_INFO
diff --git a/code/game/area/ss13_areas/maintenance_areas.dm b/code/game/area/ss13_areas/maintenance_areas.dm
index 462fb5d13c4a..4df131a1c211 100644
--- a/code/game/area/ss13_areas/maintenance_areas.dm
+++ b/code/game/area/ss13_areas/maintenance_areas.dm
@@ -6,47 +6,47 @@
sound_environment = SOUND_AREA_TUNNEL_ENCLOSED
/area/station/maintenance/engimaint
- name = "Engineering Maintenance"
+ name = "Технические Тоннели Инженерии"
icon_state = "engimaint"
/area/station/maintenance/medmaint
- name = "Medical Maintenance"
+ name = "Технические Тоннели Медицинского Отдела"
icon_state = "medmaint"
/area/station/maintenance/fpmaint
- name = "Fore-Port Maintenance"
+ name = "Северо-Западные Технические Тоннели"
icon_state = "fpmaint"
/area/station/maintenance/fpmaint2
- name = "Fore-Port Secondary Maintenance"
+ name = "Вспомогательные Северо-Западные Технические Тоннели"
icon_state = "fpmaint"
/area/station/maintenance/fsmaint
- name = "Fore-Starboard Maintenance"
+ name = "Северо-Восточные Технические Тоннели"
icon_state = "fsmaint"
/area/station/maintenance/fsmaint2
- name = "Fore-Starboard Secondary Maintenance"
+ name = "Вспомогательные Северо-Восточные Технические Тоннели"
icon_state = "fsmaint"
/area/station/maintenance/asmaint
- name = "Aft-Starboard Maintenance"
+ name = "Юго-Восточные Технические Тоннели"
icon_state = "asmaint"
/area/station/maintenance/asmaint2
- name = "Aft-Starboard Secondary Maintenance"
+ name = "Вспомогательные Юго-Восточные Технические Тоннели"
icon_state = "asmaint"
/area/station/maintenance/apmaint
- name = "Aft-Port Maintenance"
+ name = "Юго-Западные Технические Тоннели"
icon_state = "apmaint"
/area/station/maintenance/apmaint2
- name = "Aft-Port Secondary Maintenance"
+ name = "Вспомогательные Юго-Западные Технические Тоннели"
icon_state = "apmaint"
/area/station/maintenance/maintcentral
- name = "Central Maintenance"
+ name = "Центральные Технические Тоннели"
icon_state = "maintcentral"
/area/station/maintenance/maintcentral2
@@ -54,83 +54,83 @@
icon_state = "maintcentral"
/area/station/maintenance/fore
- name = "Fore Maintenance"
+ name = "Северные Технические Тоннели"
icon_state = "fmaint"
/area/station/maintenance/fore2
- name = "Fore Secondary Maintenance"
+ name = "Вспомогательные Северные Технические Тоннели"
icon_state = "fmaint"
/area/station/maintenance/aft
- name = "Aft Maintenance"
+ name = "Южные Технические Тоннели"
icon_state = "amaint"
/area/station/maintenance/aft2
- name = "Aft Secondary Maintenance"
+ name = "Вспомогательные Южные Технические Тоннели"
icon_state = "amaint"
/area/station/maintenance/starboard
- name = "Starboard Maintenance"
+ name = "Восточные Технические Тоннели"
icon_state = "smaint"
/area/station/maintenance/starboard2
- name = "Starboard Secondary Maintenance"
+ name = "Вспомогательные Восточные Технические Тоннели"
icon_state = "smaint"
/area/station/maintenance/port
- name = "Port Maintenance"
+ name = "Западные Технические Тоннели"
icon_state = "pmaint"
/area/station/maintenance/port2
- name = "Port Secondary Maintenance"
+ name = "Вспомогательные Западные Технические Тоннели"
icon_state = "pmaint"
/area/station/maintenance/storage
- name = "Atmospherics Maintenance"
+ name = "Технические Тоннели Турбины"
icon_state = "atmosmaint"
/area/station/maintenance/incinerator
- name = "\improper Incinerator"
+ name = "Мусоросжигатель"
icon_state = "incin"
/area/station/maintenance/turbine
- name = "\improper Turbine"
+ name = "Турбина"
icon_state = "turbine"
/area/station/maintenance/disposal
- name = "Waste Disposal"
+ name = "Комната Утилизации"
icon_state = "disposals"
/area/station/maintenance/electrical
- name = "Electrical Maintenance"
+ name = "Необслуживаемое Помещение Электрооборудования"
icon_state = "elect"
/area/station/maintenance/abandonedbar
- name = "Maintenance Bar"
+ name = "Заброшенный Бар"
icon_state = "oldbar"
apc_starts_off = TRUE
/area/station/maintenance/library
- name = "Abandoned Library"
+ name = "Заброшенная Библиотека"
icon_state = "library"
apc_starts_off = TRUE
/area/station/maintenance/theatre
- name = "\improper Abandoned Theatre"
+ name = "Заброшеный Театр"
icon_state = "Theatre"
sound_environment = SOUND_AREA_WOODFLOOR
/area/station/maintenance/spacehut
- name = "Space Hut"
+ name = "Космическая Хата"
icon_state = "spacehut"
apc_starts_off = TRUE
/area/station/maintenance/electrical_shop
- name ="Electronics Den"
+ name ="Уголок Электроники"
icon_state = "elect"
/area/station/maintenance/gambling_den
- name = "Gambling Den"
+ name = "Игровой Зал"
icon_state = "yellow"
// Solars
@@ -173,7 +173,7 @@
/// Derelict Assembly Line
/area/station/maintenance/assembly_line
- name = "\improper Assembly Line"
+ name = "Комната Сборочной Линии"
icon_state = "ass_line"
apc_starts_off = TRUE
@@ -183,16 +183,16 @@
apc_starts_off = TRUE
/area/station/maintenance/abandoned_garden
- name = "\improper Abandoned Garden"
+ name = "Заброшенный Сад"
icon_state = "hydro"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
/area/station/maintenance/xenobio_north
- name = "Xenobiology North Maintenance"
+ name = "Северные Технические Тоннели Ксенобиологии"
icon_state = "xenobio_north_maint"
/area/station/maintenance/xenobio_south
- name = "Xenobiology South Maintenance"
+ name = "Южные Технические Тоннели Ксенобиологии"
icon_state = "xenobio_south_maint"
diff --git a/code/game/area/ss13_areas/medical_areas.dm b/code/game/area/ss13_areas/medical_areas.dm
index 38efae8f9f25..8a46d18565bc 100644
--- a/code/game/area/ss13_areas/medical_areas.dm
+++ b/code/game/area/ss13_areas/medical_areas.dm
@@ -6,43 +6,43 @@
max_ambience_cooldown = 180 SECONDS
/area/station/medical/medbay
- name = "\improper Medbay"
+ name = "Медицинский Отдел"
icon_state = "medbay"
request_console_flags = RC_ASSIST
//Medbay is a large area, these additional areas help level out APC load.
/area/station/medical/medbay2
- name = "\improper Medbay"
+ name = "Медицинский Отдел"
icon_state = "medbay"
/area/station/medical/medbay3
- name = "\improper Medbay"
+ name = "Медицинский Отдел"
icon_state = "medbay"
/area/station/medical/storage
- name = "Medical Storage"
+ name = "Склад Медицинского Отдела"
icon_state = "medbaystorage"
request_console_flags = RC_ASSIST
request_console_name = "Medbay"
/area/station/medical/reception
- name = "\improper Medbay Reception"
+ name = "Ресепшен Медицинского Отдела"
icon_state = "medbaylobby"
request_console_flags = RC_ASSIST
request_console_name = "Medbay"
/area/station/medical/psych
- name = "\improper Psych Room"
+ name = "Офис Психолога"
icon_state = "medbaypsych"
request_console_flags = RC_SUPPLY
request_console_name = "Psychiatrist"
/area/station/medical/break_room
- name = "\improper Medbay Break Room"
+ name = "Комната Отдыха Медицинского Отдела"
icon_state = "medbaybreak"
/area/station/medical/patients_rooms
- name = "\improper Patient's Rooms"
+ name = "Палаты Пациентов"
icon_state = "patients"
sound_environment = SOUND_AREA_SMALL_SOFTFLOOR
@@ -57,24 +57,24 @@
sound_environment = SOUND_AREA_SMALL_SOFTFLOOR
/area/station/medical/coldroom
- name = "Cold Room"
+ name = "Морозильная Камера Медицинского Отдела"
icon_state = "coldroom"
/area/station/medical/storage/secondary
- name = "Medical Secondary Storage"
+ name = "Дополнительный Склад Медицинского Отдела"
icon_state = "medbaysecstorage"
/area/station/medical/virology
- name = "Virology"
+ name = "Вирусология"
icon_state = "virology"
request_console_flags = RC_ASSIST | RC_SUPPLY
/area/station/medical/virology/lab
- name = "\improper Virology Laboratory"
+ name = "Лаборатория Вирусологии"
icon_state = "virology"
/area/station/medical/morgue
- name = "\improper Morgue"
+ name = "Морг"
icon_state = "morgue"
ambientsounds = SPOOKY_SOUNDS
is_haunted = TRUE
@@ -82,43 +82,43 @@
request_console_flags = RC_ASSIST | RC_INFO
/area/station/medical/chemistry
- name = "Chemistry"
+ name = "Химическая Лаборатория Медицинского Отдела"
icon_state = "chem"
request_console_flags = RC_ASSIST | RC_SUPPLY
/area/station/medical/surgery
- name = "\improper Surgery"
+ name = "Операционное Отделение"
icon_state = "surgery"
/area/station/medical/surgery/primary
- name = "Surgery 1"
+ name = "Первая Операционная"
icon_state = "surgery1"
/area/station/medical/surgery/secondary
- name = "Surgery 2"
+ name = "Вторая Операционная"
icon_state = "surgery2"
/area/station/medical/surgery/observation
- name = "Surgery Observation"
+ name = "Комната Оперативного Наблюдения"
icon_state = "surgery"
/area/station/medical/cryo
- name = "Cryogenics"
+ name = "Криогеника"
icon_state = "cryo"
/area/station/medical/exam_room
- name = "\improper Exam Room"
+ name = "Комната Осмотра Медицинского Отдела"
icon_state = "exam_room"
/area/station/medical/cloning
- name = "\improper Cloning Lab"
+ name = "Лаборатория Клонирования"
icon_state = "cloning"
/area/station/medical/sleeper
- name = "\improper Medical Treatment Center"
+ name = "Центр Медицинского Лечения"
icon_state = "exam_room"
/area/station/medical/paramedic
- name = "Paramedic"
+ name = "Офис Парамедика"
icon_state = "paramedic"
request_console_flags = RC_ASSIST
diff --git a/code/game/area/ss13_areas/procedure_areas.dm b/code/game/area/ss13_areas/procedure_areas.dm
index 12d2e177b5b2..db7a7b55e0b1 100644
--- a/code/game/area/ss13_areas/procedure_areas.dm
+++ b/code/game/area/ss13_areas/procedure_areas.dm
@@ -1,4 +1,4 @@
/area/station/procedure/trainer_office
- name = "\improper Trainer's Office"
+ name = "Офис Профессионального Тренера НТ"
icon_state = "procedure_nct"
diff --git a/code/game/area/ss13_areas/public_areas.dm b/code/game/area/ss13_areas/public_areas.dm
index df0933a6b59f..158157d6f1a8 100644
--- a/code/game/area/ss13_areas/public_areas.dm
+++ b/code/game/area/ss13_areas/public_areas.dm
@@ -8,72 +8,72 @@
sound_environment = SOUND_AREA_STANDARD_STATION
/area/station/hallway/primary/fore
- name = "\improper Fore Primary Hallway"
+ name = "Основной Северный Коридор"
icon_state = "hallF"
/area/station/hallway/primary/fore/west
- name = "\improper Fore West Hallway"
+ name = "Северо-Западный Коридор"
/area/station/hallway/primary/fore/east
- name = "\improper Fore East Hallway"
+ name = "Северо-Восточный Коридор"
/area/station/hallway/primary/fore/north
- name = "\improper Fore North Hallway"
+ name = "Северный Коридор"
/area/station/hallway/primary/fore/south
- name = "\improper Fore South Hallway"
+ name = "Северо-Южный Коридор"
/area/station/hallway/primary/starboard
- name = "\improper Starboard Primary Hallway"
+ name = "Основной Восточный Коридор"
icon_state = "hallS"
/area/station/hallway/primary/starboard/west
- name = "\improper Starboard West Hallway"
+ name = "Восточно-Западный Коридор"
/area/station/hallway/primary/starboard/east
- name = "\improper Starboard East Hallway"
+ name = "Восточный Коридор"
/area/station/hallway/primary/starboard/north
- name = "\improper Starboard North Hallway"
+ name = "Восточно-Северный Коридор"
/area/station/hallway/primary/starboard/south
- name = "\improper Starboard South Hallway"
+ name = "Восточно-Южный Коридор"
/area/station/hallway/primary/aft
- name = "\improper Aft Primary Hallway"
+ name = "Основной Южный Коридор"
icon_state = "hallA"
/area/station/hallway/primary/aft/west
- name = "\improper Aft West Hallway"
+ name = "Юго-Западный Коридор"
/area/station/hallway/primary/aft/east
- name = "\improper Aft East Hallway"
+ name = "Юго-Восточный Коридор"
/area/station/hallway/primary/aft/north
- name = "\improper Aft North Hallway"
+ name = "Юго-Северный Коридор"
/area/station/hallway/primary/aft/south
- name = "\improper Aft South Hallway"
+ name = "Южный Коридор"
/area/station/hallway/primary/port
- name = "\improper Port Primary Hallway"
+ name = "Основной Западный Коридор"
icon_state = "hallP"
/area/station/hallway/primary/port/west
- name = "\improper Port West Hallway"
+ name = "Западный Коридор"
/area/station/hallway/primary/port/east
- name = "\improper Port East Hallway"
+ name = "Западно-Восточный Коридор"
/area/station/hallway/primary/port/north
- name = "\improper Port North Hallway"
+ name = "Западно-Северный Коридор"
/area/station/hallway/primary/port/south
- name = "\improper Port South Hallway"
+ name = "Западно-Южный Коридор"
/area/station/hallway/primary/central
- name = "\improper Central Primary Hallway"
+ name = "Центральный Основной Коридор"
icon_state = "hallC"
/area/station/hallway/primary/central/north
@@ -128,15 +128,15 @@
name = "Command-Engineering Bridge"
/area/station/hallway/secondary/exit
- name = "\improper Escape Shuttle Hallway"
+ name = "Коридор Эвакуационного Шаттла"
icon_state = "escape"
/area/station/hallway/secondary/garden
- name = "\improper Garden"
+ name = "Сад"
icon_state = "garden"
/area/station/hallway/secondary/entry
- name = "\improper Arrival Shuttle Hallway"
+ name = "Коридор Шаттла Прибытия"
icon_state = "entry"
/area/station/hallway/secondary/entry/north
@@ -148,64 +148,64 @@
/area/station/hallway/secondary/entry/west
/area/station/hallway/secondary/entry/lounge
- name = "\improper Arrivals Lounge"
+ name = "Зал Прибытия"
/area/station/hallway/secondary/bridge
- name = "\improper Command Hallway"
+ name = "Коридор Командования"
icon_state = "hallC"
// Other public areas
/area/station/public/dorms
- name = "\improper Dormitories"
+ name = "Дормитории"
icon_state = "dorms"
sound_environment = SOUND_AREA_STANDARD_STATION
request_console_name = "Crew Quarters"
/area/station/public/sleep
- name = "\improper Primary Cryogenic Dormitories"
+ name = "Криохранилище Дормитория"
icon_state = "Sleep"
valid_territory = FALSE
/area/station/public/sleep/secondary
- name = "\improper Secondary Cryogenic Dormitories"
+ name = "Вторичное Криохранилище Дормитория"
icon_state = "Sleep"
/area/station/public/locker
- name = "\improper Locker Room"
+ name = "Бытовое Помещение"
icon_state = "locker"
request_console_name = "Crew Quarters"
/area/station/public/toilet
- name = "\improper Dormitory Toilets"
+ name = "Туалеты Дормиторий"
icon_state = "toilet"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
/area/station/public/toilet/unisex
- name = "\improper Unisex Restroom"
+ name = "Общие Туалеты"
/area/station/public/toilet/lockerroom
- name = "\improper Locker Toilets"
+ name = "Бытовые Туалеты"
/area/station/public/fitness
- name = "\improper Fitness Room"
+ name = "Фитнес-Зал"
icon_state = "fitness"
request_console_name = "Crew Quarters"
/area/station/public/arcade
- name = "\improper Arcade"
+ name = "Аркаданый Зал"
icon_state = "arcade"
/area/station/public/mrchangs
- name = "\improper Mr Chang's"
+ name = "Забегаловка Мистера Чанга"
icon_state = "changs"
/area/station/public/pet_store
- name = "\improper Pet Store"
+ name = "Зоомагазин"
icon_state = "pet_store"
/area/station/public/vacant_office
- name = "\improper Vacant Office"
+ name = "Свободный Офис"
icon_state = "vacantoffice"
/area/station/public/storefront
@@ -217,32 +217,32 @@
sound_environment = SOUND_AREA_STANDARD_STATION
/area/station/public/storage/tools/auxiliary
- name = "Auxiliary Tool Storage"
+ name = "Вспомогательное Хранилище Инструментов"
icon_state = "auxstorage"
/area/station/public/storage/tools
- name = "Primary Tool Storage"
+ name = "Основное Хранилище Инструментов"
icon_state = "primarystorage"
request_console_name = "Tool Storage"
/area/station/public/storage/art
- name = "Art Supply Storage"
+ name = "Хранилище Художественных Принадлежностей"
icon_state = "storage"
/area/station/public/storage/emergency
- name = "Starboard Emergency Storage"
+ name = "Восточное Аварийное Хранилище"
icon_state = "emergencystorage"
/area/station/public/storage/emergency/port
- name = "Port Emergency Storage"
+ name = "Западное Аварийное Хранилище"
icon_state = "emergencystorage"
/area/station/public/storage/office
- name = "Office Supplies"
+ name = "Комната Канцелярских Принадлежностей"
icon_state = "office_supplies"
/area/station/public/construction
- name = "\improper Construction Area"
+ name = "Зона Для Строительства"
icon_state = "construction"
ambientsounds = ENGINEERING_SOUNDS
sound_environment = SOUND_AREA_STANDARD_STATION
diff --git a/code/game/area/ss13_areas/science_areas.dm b/code/game/area/ss13_areas/science_areas.dm
index 2c2734fcbb6f..60d464d022a6 100644
--- a/code/game/area/ss13_areas/science_areas.dm
+++ b/code/game/area/ss13_areas/science_areas.dm
@@ -1,25 +1,25 @@
// Robotics areas
/area/station/science/robotics
- name = "\improper Robotics Lab"
+ name = "Робототехника"
icon_state = "robo"
request_console_flags = RC_SUPPLY
request_console_name = "Robotics"
/area/station/science/robotics/chargebay
- name = "\improper Mech Bay"
+ name = "Мех. Отсек РНД"
icon_state = "mechbay"
/area/station/science/robotics/showroom
- name = "\improper Robotics Showroom"
+ name = "Салон Робототехники"
icon_state = "showroom"
/area/station/science/research
- name = "Research Division"
+ name = "Отдел Исследований"
icon_state = "sci"
/area/station/science/lobby
- name = "Research Division Lobby"
+ name = "Фойе Отдела Исследований"
icon_state = "sci"
/area/station/science/testrange
@@ -27,11 +27,11 @@
icon_state = "sci"
/area/station/science/break_room
- name = "\improper Science Break Room"
+ name = "Комната Отдыха РНД"
icon_state = "scibreak"
/area/station/science/genetics
- name = "\improper Genetics Lab"
+ name = "Лаборатория Генетики"
icon_state = "genetics"
request_console_flags = RC_ASSIST
request_console_name = "Genetics"
@@ -40,57 +40,57 @@
sound_environment = SOUND_AREA_STANDARD_STATION
/area/station/science/rnd
- name = "Research and Development"
+ name = "Отдел Исследований"
icon_state = "rnd"
request_console_flags = RC_SUPPLY
request_console_name = "Science"
/area/station/science/hallway
- name = "\improper Research Lab"
+ name = "Коридор РНД"
icon_state = "sci"
/area/station/science/xenobiology
- name = "\improper Xenobiology Lab"
+ name = "Лаборатория Ксенобиологии"
icon_state = "xenobio"
xenobiology_compatible = TRUE
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Xenobiology"
/area/station/science/storage
- name = "\improper Science Toxins Storage"
+ name = "Хранилище Токсинов РНД"
icon_state = "toxstorage"
/area/station/science/toxins/test
- name = "\improper Toxins Test Area"
+ name = "Тестовая Комната Токиснов РНД"
icon_state = "toxtest"
valid_territory = FALSE
/area/station/science/toxins/mixing
- name = "\improper Toxins Mixing Room"
+ name = "Комната Смешивания Токсинов РНД"
icon_state = "toxmix"
request_console_flags = RC_SUPPLY
request_console_name = "Science"
/area/station/science/toxins/launch
- name = "\improper Toxins Launch Room"
+ name = "Комната Запуска Токсинов РНД"
icon_state = "toxlaunch"
request_console_flags = RC_SUPPLY
request_console_name = "Science"
/area/station/science/misc_lab
- name = "\improper Research Testing Lab"
+ name = "Лаборатория Химии РНД"
icon_state = "scichem"
request_console_flags = RC_SUPPLY
request_console_name = "Science"
/area/station/science/test_chamber
- name = "\improper Research Testing Chamber"
+ name = "Камера Химии РНД"
icon_state = "scitest"
/area/station/science/server
- name = "\improper Server Room"
+ name = "Серверная Комната"
icon_state = "server"
/area/station/science/server/coldroom
- name = "\improper Server Coldroom"
+ name = "Холодильная Камера Серверной"
icon_state = "servercold"
diff --git a/code/game/area/ss13_areas/security_areas.dm b/code/game/area/ss13_areas/security_areas.dm
index 7e6db172b93a..4d674bac91cc 100644
--- a/code/game/area/ss13_areas/security_areas.dm
+++ b/code/game/area/ss13_areas/security_areas.dm
@@ -4,17 +4,17 @@
sound_environment = SOUND_AREA_STANDARD_STATION
/area/station/security/main
- name = "\improper Security Office"
+ name = "Офис Службы Безопасности"
icon_state = "securityoffice"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Security"
/area/station/security/lobby
- name = "\improper Security Lobby"
+ name = "Лобби Службы Безопасности"
icon_state = "securitylobby"
/area/station/security/brig
- name = "\improper Brig"
+ name = "Бриг"
icon_state = "brig"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Security"
@@ -28,13 +28,13 @@
..()
/area/station/security/permabrig
- name = "\improper Prison Wing"
+ name = "Тюремное Крыло. Пермабриг"
icon_state = "sec_prison_perma"
fast_despawn = TRUE
can_get_auto_cryod = FALSE
/area/station/security/prison
- name = "\improper Prison Wing"
+ name = "Тюремное Крыло"
icon_state = "sec_prison"
can_get_auto_cryod = FALSE
@@ -48,74 +48,74 @@
..()
/area/station/security/prison/cell_block
- name = "\improper Prison Cell Block"
+ name = "Тюремный Блок"
icon_state = "brig"
/area/station/security/prison/cell_block/a
- name = "\improper Prison Cell Block A"
+ name = "Тюремный Блок А"
icon_state = "brigcella"
/area/station/security/execution
- name = "Execution"
+ name = "Комната Казни"
icon_state = "execution"
can_get_auto_cryod = FALSE
/area/station/security/processing
- name = "Prisoner Processing"
+ name = "Процедурная Службы Безопасности"
icon_state = "prisonerprocessing"
can_get_auto_cryod = FALSE
/area/station/security/interrogation
- name = "Interrogation"
+ name = "Допросная"
icon_state = "interrogation"
can_get_auto_cryod = FALSE
/area/station/security/storage
- name = "Security Equipment Storage"
+ name = "Склад Снаряжения Службы Безопасности"
icon_state = "securityequipmentstorage"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Security"
/area/station/security/evidence
- name = "\improper Evidence Room"
+ name = "Комната Хранения Улик"
icon_state = "evidence"
/area/station/security/prisonlockers
- name = "\improper Prisoner Lockers"
+ name = "Комната Шкафов Заключенных"
icon_state = "sec_prison_lockers"
can_get_auto_cryod = FALSE
/area/station/security/prisonershuttle
- name = "\improper Security Prisoner Shuttle"
+ name = "Челнок Службы Безопасности Для Заключенных"
icon_state = "security"
can_get_auto_cryod = FALSE
/area/station/security/warden
- name = "\improper Warden's Office"
+ name = "Офис Смотрителя"
icon_state = "Warden"
sound_environment = SOUND_AREA_SMALL_SOFTFLOOR
request_console_flags = RC_ASSIST | RC_SUPPLY | RC_INFO
request_console_name = "Warden"
/area/station/security/armory
- name = "\improper Armory"
+ name = "Оружейная"
icon_state = "armory"
/area/station/security/armory/secure
- name = "\improper Secure Armory"
+ name = "Защищенная Оружейная"
icon_state = "secarmory"
request_console_flags = RC_ASSIST | RC_SUPPLY | RC_INFO
request_console_name = "Warden"
/area/station/security/detective
- name = "\improper Detective's Office"
+ name = "Офис Детектива"
icon_state = "detective"
ambientsounds = list('sound/ambience/ambidet1.ogg', 'sound/ambience/ambidet2.ogg')
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Detective"
/area/station/security/range
- name = "\improper Firing Range"
+ name = "Стрельбище"
icon_state = "firingrange"
/area/station/security/defusal
@@ -125,16 +125,16 @@
// Checkpoints
/area/station/security/checkpoint
- name = "\improper Security Checkpoint"
+ name = "Контрольно-Пропускной Пункт Службы Безопасности"
icon_state = "checkpoint1"
/area/station/security/checkpoint/secondary
- name = "\improper Security Checkpoint"
+ name = "Дополнительный Контрольно-Пропускной Пункт Службы Безопасности"
icon_state = "checkpoint1"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Security"
// Solitary
/area/station/security/permasolitary
- name = "Solitary Confinement"
+ name = "Одиночная Камера"
icon_state = "solitary"
diff --git a/code/game/area/ss13_areas/service_areas.dm b/code/game/area/ss13_areas/service_areas.dm
index f1e5b1e81f70..7bd961c8f1a9 100644
--- a/code/game/area/ss13_areas/service_areas.dm
+++ b/code/game/area/ss13_areas/service_areas.dm
@@ -1,33 +1,33 @@
/area/station/service/cafeteria
- name = "\improper Cafe"
+ name = "Кафетерий"
icon_state = "cafeteria"
/area/station/service/kitchen
- name = "\improper Kitchen"
+ name = "Кухня"
icon_state = "kitchen"
request_console_flags = RC_SUPPLY
/area/station/service/bar
- name = "\improper Bar"
+ name = "Бар"
icon_state = "bar"
sound_environment = SOUND_AREA_WOODFLOOR
request_console_flags = RC_SUPPLY
/area/station/service/theatre
- name = "\improper Theatre"
+ name = "Театр"
icon_state = "Theatre"
sound_environment = SOUND_AREA_WOODFLOOR
/area/station/service/library
- name = "\improper Library"
+ name = "Библиотека"
icon_state = "library"
sound_environment = SOUND_AREA_LARGE_SOFTFLOOR
request_console_flags = RC_SUPPLY
/area/station/service/chapel
- name = "\improper Chapel"
+ name = "Церковь"
icon_state = "chapel"
ambientsounds = HOLY_SOUNDS
is_haunted = TRUE
@@ -41,35 +41,35 @@
valid_territory = TRUE
/area/station/service/chapel/office
- name = "\improper Chapel Office"
+ name = "Офис Священника"
icon_state = "chapeloffice"
request_console_flags = RC_SUPPLY
request_console_name = "Chapel"
/area/station/service/clown
- name = "\improper Clown's Office"
+ name = "Офис Клоуна"
icon_state = "clown_office"
/area/station/service/clown/secret
- name = "\improper Top Secret Clown HQ"
+ name = "Сверхсекретная Штаб-Квартира Клоуна"
/area/station/service/mime
- name = "\improper Mime's Office"
+ name = "Офис Мима"
icon_state = "mime_office"
/area/station/service/barber
- name = "\improper Barber Shop"
+ name = "Парикмахерская"
icon_state = "barber"
/area/station/service/janitor
- name = "\improper Custodial Closet"
+ name = "Каморка Уборщика"
icon_state = "janitor"
sound_environment = SOUND_AREA_SMALL_ENCLOSED
request_console_flags = RC_ASSIST
request_console_name = "Janitorial"
/area/station/service/hydroponics
- name = "Hydroponics"
+ name = "Гидропоника"
icon_state = "hydro"
sound_environment = SOUND_AREA_STANDARD_STATION
request_console_flags = RC_SUPPLY
diff --git a/code/game/area/ss13_areas/supply_areas.dm b/code/game/area/ss13_areas/supply_areas.dm
index ae960d043509..bf8bfab566b2 100644
--- a/code/game/area/ss13_areas/supply_areas.dm
+++ b/code/game/area/ss13_areas/supply_areas.dm
@@ -1,22 +1,22 @@
/area/station/supply
- name = "\improper Quartermasters"
+ name = "Квартирмейстер"
icon_state = "quart"
sound_environment = SOUND_AREA_STANDARD_STATION
/area/station/supply/lobby
- name = "\improper Cargo Lobby"
+ name = "Лобби Карго"
icon_state = "cargolobby"
/area/station/supply/sorting
- name = "\improper Delivery Office"
+ name = "Офис Доставки"
icon_state = "cargomail"
sound_environment = SOUND_AREA_STANDARD_STATION
request_console_flags = RC_SUPPLY
request_console_name = "Cargo Bay"
/area/station/supply/office
- name = "\improper Cargo Office"
+ name = "Офис Карго"
icon_state = "cargooffice"
request_console_flags = RC_SUPPLY
request_console_name = "Cargo Bay"
@@ -30,26 +30,26 @@
icon_state = "cargobreak"
/area/station/supply/storage
- name = "\improper Cargo Bay"
+ name = "Грузовой Отсек"
icon_state = "cargobay"
sound_environment = SOUND_AREA_LARGE_ENCLOSED
request_console_flags = RC_SUPPLY
/area/station/supply/qm
- name = "\improper Quartermaster's Office"
+ name = "Офис Квартирмейстера"
icon_state = "qm"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Quartermaster's Desk"
request_console_announces = TRUE
/area/station/supply/miningdock
- name = "\improper Mining Dock"
+ name = "Шахтный Док"
icon_state = "mining"
request_console_flags = RC_ASSIST | RC_INFO
request_console_name = "Mining"
/area/station/supply/expedition
- name = "\improper Expedition Room"
+ name = "Комната Экспедиции"
icon_state = "expedition"
ambientsounds = list('sound/ambience/ambiexp.ogg')
sound_environment = SOUND_AREA_SMALL_ENCLOSED
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 2c51ad4dd049..8fe7451a81c8 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -311,7 +311,7 @@
playsound(user.loc, 'sound/effects/glassbr1.ogg', 50, TRUE)
curselimit++
var/message = pick(CULT_CURSES)
- GLOB.major_announcement.Announce("[message] The shuttle will be delayed by [cursetime / 600] minute\s.", "System Failure", 'sound/misc/notice1.ogg')
+ GLOB.major_announcement.Announce("[message] Эвакуационный шаттл задерживается на [cursetime / 600] [declension_ru(cursetime / 600, "минуту", "минуты", "минут")].", "ВНИМАНИЕ: Обнаружена неисправность в системе.", 'sound/misc/notice1.ogg')
qdel(src)
/obj/item/cult_shift
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index 26066e3b5bf1..ff991e722087 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -32,7 +32,7 @@
/obj/structure/cult/functional
max_integrity = 100
var/cooldowntime = 0
- var/death_message = "The structure falls apart." //The message shown when the structure is destroyed
+ var/death_message = "Конструкция разваливается на части." //The message shown when the structure is destroyed
var/death_sound = 'sound/items/bikehorn.ogg'
var/heathen_message = "You're a huge nerd, go away. Also, a coder forgot to put a message here."
var/selection_title = "Oops"
@@ -139,7 +139,7 @@
desc = "A bloodstained altar dedicated to a cult."
icon_state = "altar"
max_integrity = 150 //Sturdy
- death_message = "The altar breaks into splinters, releasing a cascade of spirits into the air!"
+ death_message = "Алтарь разлетается на осколки, выпуская в воздух каскад духов!"
death_sound = 'sound/effects/altar_break.ogg'
heathen_message = "There is a foreboding aura to the altar and you want nothing to do with it."
selection_prompt = "You study the rituals on the altar..."
@@ -160,7 +160,7 @@
light_range = 2
light_color = LIGHT_COLOR_LAVA
max_integrity = 300 //Made of metal
- death_message = "The forge falls apart, its lava cooling and winking away!"
+ death_message = "Кузница разваливается на части, ее лава остывает и угасает!"
death_sound = 'sound/effects/forge_destroy.ogg'
heathen_message = "Your hand feels like it's melting off as you try to touch the forge."
selection_prompt = "You study the schematics etched on the forge..."
@@ -225,7 +225,7 @@ GLOBAL_LIST_INIT(blacklisted_pylon_turfs, typecacheof(list(
light_range = 1.5
light_color = LIGHT_COLOR_RED
max_integrity = 50 //Very fragile
- death_message = "The pylon's crystal vibrates and glows fiercely before violently shattering!"
+ death_message = "Кристалл пилона вибрирует и яростно светится, прежде чем разлететься на куски!"
death_sound = 'sound/effects/pylon_shatter.ogg'
var/heal_delay = 30
@@ -311,7 +311,7 @@ GLOBAL_LIST_INIT(blacklisted_pylon_turfs, typecacheof(list(
light_range = 1.5
light_color = LIGHT_COLOR_FIRE
max_integrity = 125 //Slightly sturdy
- death_message = "The desk breaks apart, its books falling to the floor."
+ death_message = "Стол разваливается на части, книги падают на пол."
death_sound = 'sound/effects/wood_break.ogg'
heathen_message = "What do you hope to seek?"
selection_prompt = "You flip through the black pages of the archives..."
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index fd1e6f3f1438..5b4bf25a4dd1 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -155,7 +155,7 @@
if(!(A in summon_areas)) // Check again to make sure they didn't move
to_chat(user, "The ritual can only begin where the veil is weak - in [english_list(summon_areas)]!")
return
- GLOB.major_announcement.Announce("Figments from an eldritch god are being summoned into the [A.map_name] from an unknown dimension. Disrupt the ritual at all costs, before the station is destroyed! Space Law and SOP are suspended. The entire crew must kill cultists on sight.", "Central Command Higher Dimensional Affairs", 'sound/AI/cult_summon.ogg')
+ GLOB.major_announcement.Announce("Образы древнего богоподобного существа соединяются воединно в [A.map_name] из неизвестного измерения. Прервите ритуал любой ценой, пока станция не была уничтожена! Действие космических законов и стандартных рабочих процедур приостановлено. Всему экипажу - ликвидировать культистов на месте.", "Отдел по делам Высших Измерений", 'sound/AI/cult_summon.ogg')
for(var/I in spiral_range_turfs(1, user, 1))
var/turf/T = I
var/obj/machinery/shield/cult/narsie/N = new(T)
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 76b07df2e7f0..ba936bb8fe16 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -1090,7 +1090,7 @@ structure_check() searches for nearby cultist structures required for the invoca
for(var/mob/M in GLOB.player_list)
if(!isnewplayer(M)) // exclude people in the lobby
SEND_SOUND(M, sound('modular_ss220/aesthetics_sounds/sound/narsie/narsie_summon.ogg')) //SS220 EDIT
- to_chat(M, "The veil... is... TORN!!!--")
+ to_chat(M, "Барьер... между мирами... ПАЛ!!!--")
icon_state = "rune_large_distorted"
var/turf/T = get_turf(src)
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index 5aff5df2a955..47817b490bce 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -6,7 +6,7 @@
//The malf AI spell subtype. All malf actions are subtypes of this.
/datum/spell/ai_spell
- name = "AI Spell"
+ name = "Действия ИИ"
desc = "You aren't entirely sure what this does, but it's very beepy and boopy."
action_background_icon_state = "bg_tech_blue"
clothes_req = FALSE
@@ -35,14 +35,14 @@
/datum/spell/ai_spell/proc/adjust_uses(amt, mob/living/silicon/ai/owner, silent)
uses += amt
if(!silent && uses)
- to_chat(owner, "[name] now has [uses] use[uses > 1 ? "s" : ""] remaining.")
+ to_chat(owner, "У [name] теперь осталось [uses] использовани[uses > 1 ? "я" : "е"].")
if(!uses)
if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway!
- to_chat(owner, "[name] has run out of uses!")
+ to_chat(owner, "У [name] закончились использования!")
owner.RemoveSpell(src)
if(QDELETED(src) || uses) //Not sure if not having src here would cause a runtime, so it's here to be safe
return
- desc = "[initial(desc)] It has [uses] use\s remaining."
+ desc = "[initial(desc)]У этой способности осталось [uses] использований."
UpdateButtons()
//Framework for ranged abilities that can have different effects by left-clicking stuff.
@@ -55,10 +55,10 @@
/datum/spell/ai_spell/ranged/adjust_uses(amt, mob/living/silicon/ai/owner, silent)
uses += amt
if(!silent && uses)
- to_chat(owner, "[name] now has [uses] use[uses > 1 ? "s" : ""] remaining.")
+ to_chat(owner, "У [name] теперь [uses] осталось использован[uses > 1 ? "ий" : "ия"].")
if(!uses)
if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway!
- to_chat(owner, "[name] has run out of uses!")
+ to_chat(owner, "У [name] закончились использования!")
owner.mob_spell_list -= src
QDEL_IN(src, 10 SECONDS) //let any active timers on us finish up
@@ -68,8 +68,8 @@
return C
/datum/spell/ai_spell/choose_modules
- name = "Choose Modules"
- desc = "Spend your processing time to gain a variety of different abilities."
+ name = "Выберите Модули"
+ desc = "Потратьте вычислительные мощности для разблокировки различных умений."
action_icon_state = "choose_module"
auto_use_uses = FALSE // This is an infinite ability.
create_attack_logs = FALSE
@@ -79,8 +79,8 @@
user.malf_picker.use(user)
/datum/spell/ai_spell/return_to_core
- name = "Return to Main Core"
- desc = "Leave the APC you are shunted to, and return to your core."
+ name = "Вернуться в Главное Ядро"
+ desc = "Покинуть APC, в который вы себя всунули и вернуться к Главному Ядру."
action_icon = 'icons/obj/power.dmi'
action_icon_state = "apcemag"
auto_use_uses = FALSE // Here just to prevent the "You have X uses remaining" from popping up.
@@ -88,8 +88,8 @@
/datum/spell/ai_spell/return_to_core/cast(list/targets, mob/living/silicon/ai/user)
. = ..()
var/obj/machinery/power/apc/apc = user.loc
- if(!istype(apc)) // This shouldn't happen but here for safety.
- to_chat(user, "You are already in your Main Core.")
+ if(!istype(apc)) // Этого не должно происходить. Чисто для подстраховки
+ to_chat(user, "Вы уже в Главном Ядре.")
return
apc.malfvacate()
qdel(src)
@@ -109,16 +109,16 @@
/datum/module_picker/proc/use(mob/user)
var/dat
- dat += {"Select use of processing time: (currently [processing_time] left.)
+ dat += {"Выберите, куда потратить мощности: (сейчас имеется [processing_time] единиц.)
- Install Module:
- The number afterwards is the amount of processing time it consumes.
"}
+ Установка модулей:
+ Число позади означает количество мощностей, которое потребуется на разблокировку.
"}
for(var/datum/ai_module/module in possible_modules)
dat += "[module.module_name]\[?\] ([module.cost])
"
dat += "
"
if(temp)
dat += "[temp]"
- var/datum/browser/popup = new(user, "modpicker", "Malf Module Menu", 400, 500)
+ var/datum/browser/popup = new(user, "modpicker", "Меню модулей сбойного ИИ", 400, 500)
popup.set_content(dat)
popup.open()
return
@@ -131,7 +131,7 @@
var/mob/living/silicon/ai/A = usr
if(A.stat == DEAD)
- to_chat(A, "You are already dead!")
+ to_chat(A, "Вы уже умерли!")
return
for(var/datum/ai_module/AM in possible_modules)
@@ -139,7 +139,7 @@
// Cost check
if(AM.cost > processing_time)
- temp = "You cannot afford this module."
+ temp = "Вы не можете себе это позволить."
break
var/datum/spell/ai_spell/action = locate(AM.power_type) in A.mob_spell_list
@@ -165,9 +165,9 @@
A.playsound_local(A, AM.unlock_sound, 50, FALSE, use_reverb = FALSE)
else //Adding uses to an existing module
action.uses += initial(action.uses)
- action.desc = "[initial(action.desc)] It has [action.uses] use\s remaining."
+ action.desc = "У [initial(action.desc)] теперь [action.uses] использований."
action.UpdateButtons()
- temp = "Additional use[action.uses > 1 ? "s" : ""] added to [action.name]!"
+ temp = "Были добавлены использовани[action.uses > 1 ? "я" : "е"] к [action.name]!"
processing_time -= AM.cost
if(href_list["showdesc"])
@@ -193,18 +193,18 @@
//Doomsday Device: Starts the self-destruct timer. It can only be stopped by killing the AI completely.
/datum/ai_module/nuke_station
- module_name = "Doomsday Device"
+ module_name = "Устройство Судного Дня"
mod_pick_name = "nukestation"
- description = "Activate a weapon that will disintegrate all organic life on the station after a 450 second delay. Can only be used while on the station, will fail if your core is moved off station or destroyed."
+ description = "Активирует оружие, которое уничтожит всю органическую жизнь на станции по истечению 450 секундного таймера. Не сработает, если ваше Ядро уничтожат или вынесут за пределы станции"
cost = 130
one_purchase = TRUE
power_type = /datum/spell/ai_spell/nuke_station
- unlock_text = "You slowly, carefully, establish a connection with the on-station self-destruct. You can now activate it at any time."
+ unlock_text = "Вы медленно и аккуратно подключаетесь к системе самоуничтожения станции. Вы можете активировать её в любое время."
unlock_sound = 'sound/items/timer.ogg'
/datum/spell/ai_spell/nuke_station
- name = "Doomsday Device"
- desc = "Activates the doomsday device. This is not reversible."
+ name = "Устройство Судного Дня"
+ desc = "Активирует устройство судного дня. Это действие невозможно отменить."
action_icon_state = "doomsday_device"
auto_use_uses = FALSE
var/in_use
@@ -212,9 +212,9 @@
/datum/spell/ai_spell/nuke_station/cast(list/targets, mob/living/silicon/ai/user)
var/turf/T = get_turf(user)
if(!istype(T) || !is_station_level(T.z))
- to_chat(user, "You cannot activate the doomsday device while off-station!")
+ to_chat(user, "Вы не можете активировать УСД пока находитесь вне станции!")
return
- if(tgui_alert(user, "Send arming signal? (true = arm, false = cancel)", "purge_all_life()", list("confirm = TRUE;", "confirm = FALSE;")) != "confirm = TRUE;")
+ if(tgui_alert(user, "Отправить сигнал на взведение? (true = взвести, false = отмена)", "purge_all_life()", list("confirm = TRUE;", "confirm = FALSE;")) != "confirm = TRUE;")
return
if(!istype(user) || QDELETED(user))
return
@@ -224,8 +224,8 @@
set_us_up_the_bomb(user)
/datum/spell/ai_spell/nuke_station/proc/set_us_up_the_bomb(mob/living/silicon/ai/user)
- to_chat(user, "Nuclear device armed.")
- GLOB.major_announcement.Announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/AI/aimalf.ogg')
+ to_chat(user, "Ядерное оружие взведено.")
+ GLOB.major_announcement.Announce("Во всех системах станций обнаружены вредоносные процессы. Пожалуйста, уничтожьте свой ИИ, чтобы предотвратить возможный ущерб его моральному ядру.", "ВНИМАНИЕ: Обнаружена аномалия.", 'sound/AI/aimalf.ogg')
SSsecurity_level.set_level(SEC_LEVEL_DELTA)
user.nuking = TRUE
var/obj/machinery/doomsday_device/DOOM = new /obj/machinery/doomsday_device(user)
@@ -239,9 +239,9 @@
/obj/machinery/doomsday_device
icon = 'icons/obj/machines/nuke_terminal.dmi'
- name = "doomsday device"
+ name = "устройство судного дня"
icon_state = "nuclearbomb_base"
- desc = "A weapon which disintegrates all organic life in a large area."
+ desc = "Оружие, уничтожающее всю жизнь на станции."
anchored = TRUE
density = TRUE
atom_say_verb = "blares"
@@ -257,7 +257,7 @@
if(SSshuttle.emergency.mode == SHUTTLE_STRANDED)
SSshuttle.emergency.mode = SHUTTLE_DOCKED
SSshuttle.emergency.timer = world.time
- GLOB.major_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/eshuttle_dock.ogg')
+ GLOB.major_announcement.Announce("Враждебная среда нейтрализована. У вас есть 3 минуты, чтобы прибыть на борт эвакуационного шаттла.", "Приоритетное оповещение", 'sound/AI/eshuttle_dock.ogg')
return ..()
/obj/machinery/doomsday_device/proc/start()
@@ -272,12 +272,12 @@
/obj/machinery/doomsday_device/process()
var/turf/T = get_turf(src)
if(!T || !is_station_level(T.z))
- GLOB.major_announcement.Announce("DOOMSDAY DEVICE OUT OF STATION RANGE, ABORTING", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", 'sound/misc/notice1.ogg')
+ GLOB.major_announcement.Announce("УСТРОЙСТВО СУДНОГО ДНЯ ВНЕ ЗОНЫ ДЕЙСТВИЯ СТАНЦИИ, ОТКЛЮЧЕНИЕ.", "ОШИБКА 0IJJU6KA ОIJJIJ(%$^^__+ @#F0E4", 'sound/misc/notice1.ogg')
SSshuttle.clearHostileEnvironment(src)
if(SSshuttle.emergency.mode == SHUTTLE_STRANDED)
SSshuttle.emergency.mode = SHUTTLE_DOCKED
SSshuttle.emergency.timer = world.time
- GLOB.major_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/eshuttle_dock.ogg')
+ GLOB.major_announcement.Announce("Враждебное окружение нейтрализовано. У вас есть 3 минуты, чтобы прибыть на борт эвакуационного шаттла.", "Приоритетное оповещение.", 'sound/AI/eshuttle_dock.ogg')
qdel(src)
if(!timing)
STOP_PROCESSING(SSfastprocess, src)
@@ -289,8 +289,8 @@
qdel(src)
else
if(!(sec_left % 60) && !announced)
- var/message = "[sec_left] SECONDS UNTIL DOOMSDAY DEVICE ACTIVATION!"
- GLOB.major_announcement.Announce(message, "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", 'sound/misc/notice1.ogg')
+ var/message = "[sec_left] [declension_ru(sec_left, "СЕКУНДА", "СЕКУНДЫ", "СЕКУНД")] ДО АКТИВАЦИИ УСТРОЙСТВА СУДНОГО ДНЯ."
+ GLOB.major_announcement.Announce(message, "ОШИБКА 0IJJU6KA ОIJJIJ(%$^^__+ @#F0E4", 'sound/misc/notice1.ogg')
announced = 10
announced = max(0, announced-1)
@@ -300,17 +300,17 @@
SEND_SOUND(explodee, doomsday_alarm)
sleep(100)
SSticker.station_explosion_cinematic(NUKE_SITE_ON_STATION, "AI malfunction")
- to_chat(world, "The AI cleansed the station of life with the doomsday device!")
+ to_chat(world, "ИИ уничтожил жизнь на станции при помощи УСД!")
SSticker.mode.station_was_nuked = TRUE
//AI Turret Upgrade: Increases the health and damage of all turrets.
/datum/ai_module/upgrade_turrets
- module_name = "AI Turret Upgrade"
+ module_name = "Улучшение турелей"
mod_pick_name = "turret"
- description = "Improves the power and health of all AI turrets. This effect is permanent."
+ description = "Улучшает силу и здоровье турелей. Этот эффект постоянен."
cost = 30
upgrade = TRUE
- unlock_text = "You establish a power diversion to your turrets, upgrading their health and damage."
+ unlock_text = "Вы перенаправляете часть энергии на турели, усиливая их живучесть и урон."
unlock_sound = 'sound/items/rped.ogg'
/datum/ai_module/upgrade_turrets/upgrade(mob/living/silicon/ai/AI)
@@ -324,38 +324,38 @@
//Hostile Station Lockdown: Locks, bolts, and electrifies every airlock on the station. After 90 seconds, the doors reset.
/datum/ai_module/lockdown
- module_name = "Hostile Station Lockdown"
+ module_name = "Агрессивный Локдаун Станции"
mod_pick_name = "lockdown"
- description = "Overload the airlock, blast door and fire control networks, locking them down. Caution! This command also electrifies all airlocks. The networks will automatically reset after 90 seconds, briefly \
- opening all doors on the station."
+ description = "Перегружает все шлюзы, противопожарные и взрывоустойчивые двери, закрывая их. Внимание! Эта команда также электрифицирует все шлюзы. Сеть автоматически перезапустится через 90 секунд \
+ открывая все шлюзы на короткий промежуток времени."
cost = 30
one_purchase = TRUE
power_type = /datum/spell/ai_spell/lockdown
- unlock_text = "You upload a sleeper trojan into the door control systems. You can send a signal to set it off at any time."
+ unlock_text = "Вы загружаете спящий троян в систему управления шлюзами. \ Вы можете отправить сигнал на его активацию в любое время."
/datum/spell/ai_spell/lockdown
- name = "Lockdown"
- desc = "Closes, bolts, and depowers every airlock, firelock, and blast door on the station. After 90 seconds, they will reset themselves."
+ name = "Локдаун"
+ desc = "Закрывает, болтирует и отключает все шлюзы. Через 90 секунд, они восстанавливаются."
action_icon_state = "lockdown"
uses = 1
/datum/spell/ai_spell/lockdown/cast(list/targets, mob/user)
- to_chat(user, "Lockdown Initiated. Network reset in 90 seconds.")
+ to_chat(user, "Активирован локдаун. Перезапуск сети через 90 секунд.")
new /datum/event/door_runtime()
//Destroy RCDs: Detonates all non-cyborg RCDs on the station.
/datum/ai_module/destroy_rcd
- module_name = "Destroy RCDs"
+ module_name = "Уничтожение RCD"
mod_pick_name = "rcd"
- description = "Send a specialised pulse to detonate all hand-held and exosuit Rapid Construction Devices on the station."
+ description = " Отправляет специальный импульс для детонации всех ручных и экзокостюмных RCD на станции."
cost = 25
one_purchase = TRUE
power_type = /datum/spell/ai_spell/destroy_rcds
- unlock_text = "After some improvisation, you rig your onboard radio to be able to send a signal to detonate all RCDs."
+ unlock_text = "После некоторой импровизации, Вы можете отправить импульс на уничтожение RCD через гарнитуру."
/datum/spell/ai_spell/destroy_rcds
- name = "Destroy RCDs"
- desc = "Detonate all non-cyborg RCDs on the station."
+ name = "Уничтожение RCD"
+ desc = "Взрывает все неподконтрольные киборгам RCD."
action_icon_state = "detonate_rcds"
uses = 1
base_cooldown = 10 SECONDS
@@ -368,18 +368,18 @@
if(is_level_reachable(RCD_turf.z))
RCD.detonate_pulse()
- to_chat(user, "RCD detonation pulse emitted.")
+ to_chat(user, "Импульс взрыва RCD запущен.")
user.playsound_local(user, 'sound/machines/twobeep.ogg', 50, FALSE, use_reverb = FALSE)
//Unlock Mech Domination: Unlocks the ability to dominate mechs. Big shocker, right?
/datum/ai_module/mecha_domination
- module_name = "Unlock Mech Domination"
+ module_name = "Разблокировка доминации мехов"
mod_pick_name = "mechjack"
- description = "Allows you to hack into a mech's onboard computer, shunting all processes into it and ejecting any occupants. Once uploaded to the mech, it is impossible to leave.\
- Do not allow the mech to leave the station's vicinity or allow it to be destroyed."
+ description = "Позволяет вам взломать бортовой компьютер меха, загрузив все свои процессы в него, а также выкидывая пилота. Как только вы загрузитесь в меха, выйти будет невозможно \
+ Не позволяйте меху покинуть станцию или быть уничтоженным"
cost = 30
upgrade = TRUE
- unlock_text = "Virus package compiled. Select a target mech at any time. You must remain on the station at all times. Loss of signal will result in total system lockout."
+ unlock_text = "Вирусный пакет скомпилирован. Вы в любой момент можете выбрать цель. Вы должны оставаться на станции в любой момент времени. Потеря сигнала приведёт к полной блокировке системы."
unlock_sound = 'sound/mecha/nominal.ogg'
/datum/ai_module/mecha_domination/upgrade(mob/living/silicon/ai/AI)
@@ -387,18 +387,18 @@
//Thermal Sensor Override: Unlocks the ability to disable all fire alarms from doing their job.
/datum/ai_module/break_fire_alarms
- module_name = "Thermal Sensor Override"
+ module_name = "Перегрузка датчиков температуры"
mod_pick_name = "burnpigs"
- description = "Gives you the ability to override the thermal sensors on all fire alarms. This will remove their ability to scan for fire and thus their ability to alert. \
- Anyone can check the fire alarm's interface and may be tipped off by its status."
+ description = "Даёт вам возможность перегрузить все термальные датчики на станции. Это приведёт к неспособности определить в комнате огонь и предупредить остальных. \
+ Кто угодно может проверить датчики и заподозрить что-то неладное."
one_purchase = TRUE
cost = 25
power_type = /datum/spell/ai_spell/break_fire_alarms
- unlock_text = "You replace the thermal sensing capabilities of all fire alarms with a manual override, allowing you to turn them off at will."
+ unlock_text = "Вы заменяете термальную чувствительность сенсоров с помощью ручной перезаписи, позволяя вам активировать её в любой момент."
/datum/spell/ai_spell/break_fire_alarms
- name = "Override Thermal Sensors"
- desc = "Disables the automatic temperature sensing on all fire alarms, making them effectively useless."
+ name = "Перегрузка датчиков температуры"
+ desc = "Отключает автоматическое определение температуры во всех пожарных датчиках, делая их фактически бесполезными."
action_icon_state = "break_fire_alarms"
uses = 1
@@ -407,23 +407,23 @@
if(!is_station_level(F.z))
continue
F.emagged = TRUE
- to_chat(user, "All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.")
+ to_chat(user, "Все термальные сенсоры на станции были отключены. Теперь пожарные тревоги нельзя определить.")
user.playsound_local(user, 'sound/machines/terminal_off.ogg', 50, FALSE, use_reverb = FALSE)
//Air Alarm Safety Override: Unlocks the ability to enable flooding on all air alarms.
/datum/ai_module/break_air_alarms
- module_name = "Air Alarm Safety Override"
+ module_name = "Перезагрузка атмосферных датчиков"
mod_pick_name = "allow_flooding"
- description = "Gives you the ability to disable safeties on all air alarms. This will allow you to use the environmental mode Flood, which disables scrubbers as well as pressure checks on vents. \
- Anyone can check the air alarm's interface and may be tipped off by their nonfunctionality."
+ description = "Даёт вам возможность отключить все предохранители на атмосферных датчиках. Позволяет вам использовать режим Flood, отключающий скрабберы, а также отключающий проверку давления в вентиляциях. \
+ Любой может проверить интерфейс датчика и заподозрить что-то из-за их нерабочего состояния."
one_purchase = TRUE
cost = 50
power_type = /datum/spell/ai_spell/break_air_alarms
- unlock_text = "You remove the safety overrides on all air alarms, but you leave the confirm prompts open. You can hit 'Yes' at any time... you bastard."
+ unlock_text = "Вы убираете предохранители с атмосферных датчиков, но оставляете окно подтверждения открытым. Вы можете нажать 'Да' в любой момент... ублюдок."
/datum/spell/ai_spell/break_air_alarms
- name = "Override Air Alarm Safeties"
- desc = "Enables the Flood setting on all air alarms."
+ name = "Перезагрузка атмосферных датчиков"
+ desc = "Открывает режим Flood по всей станции."
action_icon_state = "break_air_alarms"
uses = 1
@@ -432,43 +432,43 @@
if(!is_station_level(AA.z))
continue
AA.emagged = TRUE
- to_chat(user, "All air alarm safeties on the station have been overridden. Air alarms may now use the Flood environmental mode.")
+ to_chat(user, "Предохранители атмосферных датчиков отключены. Теперь у них открыт режим Flood.")
user.playsound_local(user, 'sound/machines/terminal_off.ogg', 50, FALSE, use_reverb = FALSE)
//Overload Machine: Allows the AI to overload a machine, detonating it after a delay. Two uses per purchase.
/datum/ai_module/overload_machine
- module_name = "Machine Overload"
+ module_name = "Перезагрузка машины"
mod_pick_name = "overload"
- description = "Overheats an electrical machine, causing a moderately-sized explosion and destroying it. Four uses per purchase."
+ description = "Перегревает машину, вызывая небольшой взрыв и уничтожая её. Два использования за покупку."
cost = 20
power_type = /datum/spell/ai_spell/ranged/overload_machine
- unlock_text = "You enable the ability for the station's APCs to direct intense energy into machinery."
+ unlock_text = "Вы получаете способность направлять энергию из APC напрямую в машинерию."
/datum/spell/ai_spell/ranged/overload_machine
- name = "Overload Machine"
- desc = "Overheats a machine, causing a moderately-sized explosion after a short time."
+ name = "Перезагрузка машины"
+ desc = "Перегревает машину, вызывая небольшой взрыв через небольшой промежуток времени."
action_icon_state = "overload_machine"
uses = 4
active = FALSE
ranged_mousepointer = 'icons/effects/cult_target.dmi'
- selection_activated_message = "You tap into the station's powernet. Click on a machine to detonate it, or use the ability again to cancel."
- selection_deactivated_message = "You release your hold on the powernet."
+ selection_activated_message = "Вы подключаетесь к энергосети. Кликните на машину для её подрыва или используйте способность повторно для отмены."
+ selection_deactivated_message = "Вы отключаетесь от энергосети."
/datum/spell/ai_spell/ranged/overload_machine/cast(list/targets, mob/user)
var/obj/machinery/target = targets[1]
if(!istype(target))
- to_chat(user, "You can only overload machines!")
+ to_chat(user, "Вы можете перегружать только машины!")
return
if(target.flags_2 & NO_MALF_EFFECT_2)
- to_chat(user, "That machine can't be overloaded!")
+ to_chat(user, "Эта машина не может быть перегружена!")
return
user.playsound_local(user, "sparks", 50, FALSE, use_reverb = FALSE)
adjust_uses(-1, user)
- target.audible_message("You hear a loud electrical buzzing sound coming from [target]!")
+ target.audible_message("Вы слышите громкое электрическое жужжание из [target]!")
playsound(target, 'sound/goonstation/misc/fuse.ogg', 50, FALSE, use_reverb = FALSE)
addtimer(CALLBACK(src, PROC_REF(detonate_machine), target), 5 SECONDS) //kaboom!
- to_chat(user, "Overloading machine circuitry...")
+ to_chat(user, "Перегружаем платы машины...")
return TRUE
/datum/spell/ai_spell/ranged/overload_machine/proc/detonate_machine(obj/machinery/M)
@@ -479,36 +479,36 @@
//Override Machine: Allows the AI to override a machine, animating it into an angry, living version of itself.
/datum/ai_module/override_machine
- module_name = "Machine Override"
+ module_name = "Перезапись машины"
mod_pick_name = "override"
- description = "Overrides a machine's programming, causing it to rise up and attack everyone except other machines. Four uses."
+ description = "Перезаписывает программу машины, заставляя её восстать и атаковать всех кроме других машин, Четыре использования."
cost = 30
power_type = /datum/spell/ai_spell/ranged/override_machine
- unlock_text = "You procure a virus from the Space Dark Web and distribute it to the station's machines."
+ unlock_text = "Вы находите вирус с Space Dark Web и распространяете его по всей станции."
/datum/spell/ai_spell/ranged/override_machine
- name = "Override Machine"
- desc = "Animates a targeted machine, causing it to attack anyone nearby."
+ name = "Перезапись машины"
+ desc = "Оживляет целевую машину, заставляя её атаковать всех, кто рядом."
action_icon_state = "override_machine"
uses = 4
ranged_mousepointer = 'icons/effects/override_machine_target.dmi'
- selection_activated_message = "You tap into the station's powernet. Click on a machine to animate it, or use the ability again to cancel."
- selection_deactivated_message = "You release your hold on the powernet."
+ selection_activated_message = "Вы подключаетесь к энергосети. Кликните на машину для оживления или используйте способность повторно для отмены."
+ selection_deactivated_message = "Вы отключаетесь от энергосети."
/datum/spell/ai_spell/ranged/override_machine/cast(list/targets, mob/user)
var/obj/machinery/target = targets[1]
if(!istype(target))
- to_chat(user, "You can only animate machines!")
+ to_chat(user, "Вы можете оживлять только машины!")
return
if(target.flags_2 & NO_MALF_EFFECT_2)
- to_chat(user, "That machine can't be overridden!")
+ to_chat(user, "Эта машина не может быть оживлена!")
return
user.playsound_local(user, 'sound/misc/interference.ogg', 50, FALSE, use_reverb = FALSE)
adjust_uses(-1, user)
- target.audible_message("You hear a loud electrical buzzing sound coming from [target]!")
+ target.audible_message("Вы слышите громкое электрическое жужжание из [target]!")
addtimer(CALLBACK(src, PROC_REF(animate_machine), target, user), 5 SECONDS) //kabeep!
- to_chat(user, "Sending override signal...")
+ to_chat(user, "Посылаем сигнал перезаписи...")
return TRUE
/datum/spell/ai_spell/ranged/override_machine/proc/animate_machine(obj/machinery/M, mob/user)
@@ -517,18 +517,18 @@
//Robotic Factory: Places a large machine that converts humans that go through it into cyborgs. Unlocking this ability removes shunting.
/datum/ai_module/place_cyborg_transformer
- module_name = "Robotic Factory (Removes Shunting)"
+ module_name = "Фабрика роботов (Убирает запихивание)"
mod_pick_name = "cyborgtransformer"
- description = "Build a machine anywhere, using expensive nanomachines, that can convert a living human into a loyal cyborg slave when placed inside."
+ description = "Строит машину где угодно, используя дорогие наномашины, которая превращает живое существо в лояльного раба-киборга."
cost = 100
one_purchase = TRUE
power_type = /datum/spell/ai_spell/place_transformer
- unlock_text = "You prepare a robotics factory for deployment."
+ unlock_text = "Вы подготавливаете фабрику к установке."
unlock_sound = 'sound/machines/ping.ogg'
/datum/spell/ai_spell/place_transformer
- name = "Place Robotics Factory"
- desc = "Places a machine that converts humans into cyborgs. Conveyor belts included!"
+ name = "Поставить фабрику роботов"
+ desc = "Ставит машину, превращающую людей в боргов. Вместе с лентами!"
action_icon_state = "robotic_factory"
uses = 1
auto_use_uses = FALSE //So we can attempt multiple times
@@ -545,7 +545,7 @@
if(!user.can_place_transformer(src))
return
in_use = TRUE
- if(tgui_alert(user, "Are you sure you want to place the machine here?", "Are you sure?", list("Yes", "No")) != "Yes")
+ if(tgui_alert(user, "Вы уверены, что хотите поставить машину тут?", "Вы уверены?", list("Да", "Нет")) != "Да")
active = FALSE
return
if(!user.can_place_transformer(src))
@@ -555,7 +555,7 @@
new /obj/machinery/transformer(T, user)
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
user.can_shunt = FALSE
- to_chat(user, "You are no longer able to shunt your core to APCs.")
+ to_chat(user, "Вы больше не можете запихнуть свои процессы в ЛКП.")
adjust_uses(-1, user)
/mob/living/silicon/ai/proc/remove_transformer_image(client/C, image/I, turf/T)
@@ -567,7 +567,7 @@
return
var/turf/middle = get_turf(eyeobj)
var/list/turfs = list(middle, locate(middle.x - 1, middle.y, middle.z), locate(middle.x + 1, middle.y, middle.z))
- var/alert_msg = "There isn't enough room! Make sure you are placing the machine in a clear area and on a floor."
+ var/alert_msg = "Недостаточно места! Убедитесь, что вы ставите машину на чистом полу станции."
var/success = TRUE
for(var/n in 1 to 3) //We have to do this instead of iterating normally because of how overlay images are handled
var/turf/T = turfs[n]
@@ -575,11 +575,11 @@
success = FALSE
var/datum/camerachunk/C = GLOB.cameranet.get_camera_chunk(T.x, T.y, T.z)
if(!C.visible_turfs[T])
- alert_msg = "You don't have camera vision of this location!"
+ alert_msg = "У вас нет покрытия камер в этой локации!"
success = FALSE
for(var/atom/movable/AM in T.contents)
if(AM.density)
- alert_msg = "That area must be clear of objects!"
+ alert_msg = "Зона должна быть свободна от предметов!"
success = FALSE
var/image/I = action.turfOverlays[n]
I.loc = T
@@ -592,17 +592,17 @@
//Turret Assembly: Assemble an AI turret at the chosen location. One use per purchase
/datum/ai_module/place_turret
- module_name = "Deploy Turret"
+ module_name = "Установка турели"
mod_pick_name = "turretdeployer"
- description = "Build a turret anywhere that lethally targets organic life in sight."
+ description = "Развертывает турель в любом месте, которая летально нейтрализует органиков."
cost = 30
power_type = /datum/spell/ai_spell/place_turret
- unlock_text = "You prepare an energy turret for deployment."
+ unlock_text = "Вы готовите энергетическую турель к развертыванию."
unlock_sound = 'sound/items/rped.ogg'
/datum/spell/ai_spell/place_turret
- name = "Deploy Turret"
- desc = "Build a turret anywhere that lethally targets organic life in sight."
+ name = "Установка турели"
+ desc = "Где угодно ставит турель, стреляющую во всех органиков лазером."
action_icon_state = "deploy_turret"
uses = 1
auto_use_uses = FALSE
@@ -615,12 +615,12 @@
/datum/spell/ai_spell/place_turret/cast(list/targets, mob/living/silicon/ai/user)
if(in_use)
- to_chat(user, "Your assemblers can only construct one turret at a time.")
+ to_chat(user, "Вы можете ставить только одну турель за раз.")
return
if(!user.can_place_turret(src))
return
in_use = TRUE
- if(tgui_alert(user, "Are you sure you want to place a turret here? Deployment will take a few seconds to complete, in which the turret will be vulnerable.", "Are you sure?", list("No", "Yes")) != "Yes")
+ if(tgui_alert(user, "Вы уверены, что хотите поставить турель тут? Установка займёт некоторое время, в течении которого турель будет уязвима.", "Вы уверены?", list("Нет", "Да")) != "Да")
in_use = FALSE
return
if(!user.can_place_turret(src))
@@ -635,7 +635,7 @@
//Handles the turret construction and configuration
playsound(T, 'sound/items/rped.ogg', 100, TRUE) //Plays a sound both at the location of the construction to alert players and to the user as feedback
user.playsound_local(user, 'sound/items/rped.ogg', 50, FALSE, use_reverb = FALSE)
- to_chat(user, "You order your electronics to assemble a turret. This will take a few seconds.")
+ to_chat(user, "Вы приказываете электронике поставить турель. Это займёт некоторое время.")
var/obj/effect/temp_visual/rcd_effect/spawning_effect = new(T)
QDEL_IN(spawning_effect, 5 SECONDS)
@@ -676,14 +676,14 @@
var/datum/camerachunk/C = GLOB.cameranet.get_camera_chunk(deploylocation.x, deploylocation.y, deploylocation.z)
if(!istype(deploylocation))
- to_chat(src, "There isn't enough room! Make sure you are placing the machine in a clear area and on a floor.")
+ to_chat(src, "Недостаточно места! Убедитесь, что вы ставите турель на свободном тайле пола.")
return FALSE
if(!C.visible_turfs[deploylocation])
- to_chat(src, "You don't have camera vision of this location!")
+ to_chat(src, "У вас нет видимости там!")
addtimer(CALLBACK(src, PROC_REF(remove_transformer_image), client, I, deploylocation), 3 SECONDS)
return FALSE
if(is_blocked_turf(deploylocation))
- to_chat(src, "That area must be clear of objects!")
+ to_chat(src, "Эта зона должна быть очищена от объектов!")
addtimer(CALLBACK(src, PROC_REF(remove_transformer_image), client, I, deploylocation), 3 SECONDS)
return FALSE
@@ -693,16 +693,16 @@
//Blackout: Overloads a random number of lights across the station. Three uses.
/datum/ai_module/blackout
- module_name = "Blackout"
+ module_name = "Блэкаут"
mod_pick_name = "blackout"
- description = "Attempts to overload the lighting circuits on the station, destroying some bulbs. Three uses."
+ description = "Попытка перегрузить световые схемы станции, выводя из строя некоторые лампы. Три использования."
cost = 15
power_type = /datum/spell/ai_spell/blackout
- unlock_text = "You hook into the powernet and route bonus power towards the station's lighting."
+ unlock_text = "Вы подключаетесь к энергосети станции и направляете избыток энергии на освещение."
/datum/spell/ai_spell/blackout
- name = "Blackout"
- desc = "Overloads random lights across the station."
+ name = "Блэкаут"
+ desc = "Перегружает свет на станции."
action_icon_state = "blackout"
uses = 3
auto_use_uses = FALSE
@@ -714,22 +714,22 @@
INVOKE_ASYNC(apc, TYPE_PROC_REF(/obj/machinery/power/apc, overload_lighting))
else
apc.overload++
- to_chat(user, "Overcurrent applied to the powernet.")
+ to_chat(user, "К энергосети принято перенапряжение.")
user.playsound_local(user, "sparks", 50, FALSE, use_reverb = FALSE)
adjust_uses(-1, user)
//Reactivate Camera Network: Reactivates up to 30 cameras across the station.
/datum/ai_module/reactivate_cameras
- module_name = "Reactivate Camera Network"
+ module_name = "Реактивация сети камер"
mod_pick_name = "recam"
- description = "Runs a network-wide diagnostic on the camera network, resetting focus and re-routing power to failed cameras. Can be used to repair up to 30 cameras."
+ description = "Запускает диагностику камер в сети. Сбрасывает фокус и перенаправляет энергию на сломанные камеры. Может быть использована для починки до 30 камер."
cost = 10
power_type = /datum/spell/ai_spell/reactivate_cameras
- unlock_text = "You deploy nanomachines to the cameranet."
+ unlock_text = "Вы вводите наномашины в систему камер."
/datum/spell/ai_spell/reactivate_cameras
- name = "Reactivate Cameras"
- desc = "Reactivates disabled cameras across the station; remaining uses can be used later."
+ name = "Реактивация камер"
+ desc = "Реактивирует камеры по всей станции; оставшиеся использования могут быть использованы позже."
action_icon_state = "reactivate_cameras"
uses = 10
auto_use_uses = FALSE
@@ -748,20 +748,20 @@
camera_to_repair.wires.cut_wires.Cut()
repaired_cameras++
uses--
- to_chat(user, "Diagnostic complete! Cameras reactivated: [repaired_cameras]. Reactivations remaining: [uses].")
+ to_chat(user, "Диагностика завершена! Камер реактивировано: [repaired_cameras]. Осталось использований: [uses].")
user.playsound_local(user, 'sound/items/wirecutter.ogg', 50, FALSE, use_reverb = FALSE)
adjust_uses(0, user, TRUE)
//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision.
/datum/ai_module/upgrade_cameras
- module_name = "Upgrade Camera Network"
+ module_name = "Улучшенная сеть камер"
mod_pick_name = "upgradecam"
- description = "Install broad-spectrum scanning and electrical redundancy firmware to the camera network, enabling EMP-proofing and light-amplified X-ray vision." //I <3 pointless technobabble
+ description = "Устанавливает ПО для сканирования широкого спектра и сопротивление к электричеству, включая устойчивость к ЭМИ и улучшенное рентгеновское зрение." //I <3 pointless technobabble
//This used to have motion sensing as well, but testing quickly revealed that giving it to the whole cameranet is PURE HORROR.
one_purchase = TRUE
cost = 35 //Decent price for omniscience!
upgrade = TRUE
- unlock_text = "OTA firmware distribution complete! Cameras upgraded: CAMSUPGRADED. Light amplification system online."
+ unlock_text = ": CAMSUPGRADED. Система усиления света активна."
unlock_sound = 'sound/items/rped.ogg'
/datum/ai_module/upgrade_cameras/upgrade(mob/living/silicon/ai/AI)
@@ -787,13 +787,13 @@
unlock_text = replacetext(unlock_text, "CAMSUPGRADED", "[upgraded_cameras]") //This works, since unlock text is called after upgrade()
/datum/ai_module/eavesdrop
- module_name = "Enhanced Surveillance"
+ module_name = "Улучшенная слежка"
mod_pick_name = "eavesdrop"
- description = "Via a combination of hidden microphones and lip reading software, you are able to use your cameras to listen in on conversations."
+ description = "Через комбинацию скрытых микрофонов и ПО для чтения по губам, вы можете использовать камеры для прослушки диалогов."
cost = 30
one_purchase = TRUE
upgrade = TRUE
- unlock_text = "OTA firmware distribution complete! Cameras upgraded: Enhanced surveillance package online."
+ unlock_text = "Распространение ПО по воздуху завершено! Камеры прокачаны: Система улучшенного наблюдения активна."
unlock_sound = 'sound/items/rped.ogg'
/datum/ai_module/eavesdrop/upgrade(mob/living/silicon/ai/AI)
@@ -801,13 +801,13 @@
AI.eyeobj.relay_speech = TRUE
/datum/ai_module/cameracrack
- module_name = "Core Camera Cracker"
+ module_name = "Поломка камеры ядра"
mod_pick_name = "cameracrack"
- description = "By shortcirucuting the camera network chip, it overheats, preventing the camera console from using your internal camera."
+ description = "Замыкая чип камеры ядра, консоль видеонаблюдения не может быть использована для просмотра внутренней камеры ядра ИИ."
cost = 10
one_purchase = TRUE
upgrade = TRUE
- unlock_text = "Network chip short circuited. Internal camera disconected from network. Minimal damage to other internal components."
+ unlock_text = "Чип сети замкнут. Внутренняя камера отключена от сети. Урон другим компонентам минимальный."
unlock_sound = 'sound/items/wirecutter.ogg'
/datum/ai_module/cameracrack/upgrade(mob/living/silicon/ai/AI)
@@ -816,13 +816,13 @@
QDEL_NULL(AI.builtInCamera)
/datum/ai_module/borg_upgrade
- module_name = "Combat Cyborg Firmware Upgrade"
+ module_name = "Боевое обновление ПО киборгов"
mod_pick_name = "combatborgs"
- description = "Downloads firmware that activates built-in combat hardware present in all cyborgs. Cyborgs built after this is used will come with the hardware activated."
+ description = "Скачивает ПО, активирующее встроенное боевое оборудование киборгов. Киборги, построенные после покупки улучшения, будут автоматически идти с боевыми улучшениями."
cost = 70 // IDK look into this
one_purchase = TRUE
upgrade = TRUE
- unlock_text = "Firmware downloaded. Bugs removed. Combat subsystems operating at 73% efficiency."
+ unlock_text = "ПО загружено. Баги устранены. Эффективность боевых подсистем киборгов - 73%."
unlock_sound = 'sound/items/rped.ogg'
/datum/ai_module/borg_upgrade/upgrade(mob/living/silicon/ai/AI)
@@ -832,45 +832,45 @@
for(var/mob/living/silicon/robot/R in AI.connected_robots)
R.module.malfhacked = TRUE
R.module.rebuild_modules()
- to_chat(R, "New firmware downloaded. Combat upgrades are now online.")
+ to_chat(R, "Новое ПО загружено. Активированы боевые улучшения.")
/datum/ai_module/repair_cyborg
- module_name = "Repair Cyborgs"
+ module_name = "Починка киборгов"
mod_pick_name = "repair_borg"
- description = "Causes an electrical surge in the targeted cyborg, rebooting and repairing most of its subsystems. Requires two uses on a cyborg with broken armor."
+ description = "Вызывает электрический всплек в киборге, перезапуская его и чиня большинство его систем. Требуется два использования на киборгах со сломанной бронёй."
cost = 20
power_type = /datum/spell/ai_spell/ranged/repair_cyborg
- unlock_text = "TLB exception on load: Error pointing to address 0000001H, Proceed with execution anywa- SURGE protocols installed, welcome to open APC!"
+ unlock_text = "TLB exception on load: Ошибка в вызове адреса 0000001H, Всё равно продолжит испо- активированы протороколы ВСПЛЕСК, добро пожаловать в открытый ЛКП!"
unlock_sound = 'sound/items/rped.ogg'
/datum/spell/ai_spell/ranged/repair_cyborg
- name = "Repair Cyborg"
- desc = "Shocks a cyborg back to 'life' after a short delay."
+ name = "Починка киборга"
+ desc = "Возвращает киборга к 'жизни' после небольшой задержки."
action_icon_state = "overload_machine"
uses = 2
ranged_mousepointer = 'icons/effects/overload_machine_target.dmi'
- selection_activated_message = "Call to address 0FFFFFFF in APC logic thread, awaiting user response."
- selection_deactivated_message = "APC logic thread restarting..."
+ selection_activated_message = "Вызов процесса 0FFFFFFF в логике ЛКП, ожидается ответ пользователя."
+ selection_deactivated_message = "Логика ЛКП сбрасывается..."
var/is_active = FALSE
/datum/spell/ai_spell/ranged/repair_cyborg/cast(list/targets, mob/user)
var/mob/living/silicon/robot/robot_target = targets[1]
if(!istype(robot_target))
- to_chat(user, "You can only repair robots with this ability!")
+ to_chat(user, "Вы можете чинить только киборгов с этой способностью!")
return
if(is_active)
- to_chat(user, "You can only repair one robot at a time!")
+ to_chat(user, "Вы можете чинить только одного киборга за раз!")
return
is_active = TRUE
user.playsound_local(user, "sparks", 50, FALSE, use_reverb = FALSE)
adjust_uses(-1, user)
- robot_target.audible_message("You hear a loud electrical buzzing sound coming from [robot_target]!")
+ robot_target.audible_message("Вы слышите электрическое жужжание из [robot_target]!")
if(!do_mob(user, robot_target, 10 SECONDS))
is_active = FALSE
return
is_active = FALSE
fix_borg(robot_target)
- to_chat(user, "[robot_target] successfully rebooted.")
+ to_chat(user, "Киборг [robot_target] успешно перезапущен.")
return TRUE
/datum/spell/ai_spell/ranged/repair_cyborg/proc/fix_borg(mob/living/silicon/robot/to_repair)
@@ -881,23 +881,23 @@
to_repair.revive()
/datum/ai_module/core_tilt
- module_name = "Rolling Servos"
+ module_name = "Крутящий привод"
mod_pick_name = "watchforrollingcores"
- description = "Allows you to slowly roll your core around, crushing anything in your path with your bulk."
+ description = "Позволяет вам медленно перекатываться, круша всё на пути своим весом."
cost = 10
one_purchase = TRUE
power_type = /datum/spell/ai_spell/ranged/core_tilt
unlock_sound = 'sound/effects/bang.ogg'
- unlock_text = "You gain the ability to roll over and crush anything in your way."
+ unlock_text = "Вы получаете способность перекатываться, круша всё на своём пути."
/datum/spell/ai_spell/ranged/core_tilt
- name = "Roll Over"
+ name = "Перекатиться"
action_icon_state = "roll_over"
- desc = "Allows you to roll over in the direction of your choosing, crushing anything in your way."
+ desc = "Позволяет перекатиться в выбранном направлении, круша всё на своём пути."
auto_use_uses = FALSE
ranged_mousepointer = 'icons/effects/cult_target.dmi'
- selection_activated_message = "Your inner servos shift as you prepare to roll around. Click adjacent tiles to roll into them!"
- selection_deactivated_message = "You disengage your rolling protocols."
+ selection_activated_message = "Ваши приводы перемещаются в то время, как вы готовитесь к перекату. Кликните по соседнему тайлу чтобы перекатиться на него!"
+ selection_deactivated_message = "Вы отключаете протоколы перкатывания."
COOLDOWN_DECLARE(time_til_next_tilt)
/// How long does it take us to roll?
var/roll_over_time = MALF_AI_ROLL_TIME
@@ -912,7 +912,7 @@
user.RemoveSpell(src)
return
if(!COOLDOWN_FINISHED(src, time_til_next_tilt))
- to_chat(user, "Your rolling capacitors are still powering back up!")
+ to_chat(user, "Ваши конденсаторы ещё перезаряжаются!")
return
var/turf/target = get_turf(target_atom)
@@ -920,7 +920,7 @@
return
if(target == get_turf(user))
- to_chat(user, "You can't roll over on yourself!")
+ to_chat(user, "Нельзя перекатиться в себя!")
return
var/picked_dir = get_dir(user, target)
@@ -930,10 +930,10 @@
var/turf/temp_target = get_step(user, picked_dir)
new /obj/effect/temp_visual/single_user/ai_telegraph(temp_target, user)
- user.visible_message("[user] seems to be winding up!")
+ user.visible_message("[user], кажется, готовится к чему-то!")
addtimer(CALLBACK(src, PROC_REF(do_roll_over), user, picked_dir), MALF_AI_ROLL_TIME)
- to_chat(user, "Overloading machine circuitry...")
+ to_chat(user, "Перегружаем платы...")
COOLDOWN_START(src, time_til_next_tilt, roll_over_cooldown)
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm
index aaebe3544043..cc760ee60d73 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm
@@ -231,11 +231,11 @@
/obj/machinery/abductor/console/proc/Dispense(item,cost=1)
if(experiment && experiment.credits >= cost)
experiment.credits -=cost
- atom_say("Incoming supply!")
+ atom_say("Поступление средств!")
if(pad)
flick("alien-pad", pad)
new item(pad.loc)
else
new item(src.loc)
else
- atom_say("Insufficient data!")
+ atom_say("Недостаточно средств!")
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
index 1d195d25f359..d1da2f525b8c 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm
@@ -113,16 +113,16 @@
if(H in history)
return "Specimen already in database."
if(H.stat == DEAD)
- atom_say("Specimen deceased - please provide fresh sample.")
+ atom_say("Образец утрачен - пожалуйста, предоставьте свежий образец.")
return "Specimen deceased."
var/obj/item/organ/internal/heart/gland/GlandTest = locate() in H.internal_organs
if(!GlandTest)
- atom_say("Experimental dissection not detected!")
+ atom_say("Экспериментальное вскрытие не обнаружено!")
return "No glands detected!"
if(H.mind != null && H.ckey != null)
history += H
abductee_minds += H.mind
- atom_say("Processing specimen...")
+ atom_say("Образец обрабатывается...")
sleep(5)
switch(text2num(type))
if(1)
@@ -160,7 +160,7 @@
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, TRUE)
return "Experiment failed! No replacement organ detected."
else
- atom_say("Brain activity nonexistent - disposing sample...")
+ atom_say("Мозговая активность отсутствует - утилизация образца...")
eject_abductee()
send_back(H)
return "Specimen braindead - disposed."
diff --git a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_interactions.dm b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_interactions.dm
index e1b106efac9f..b7d9d55d26e6 100644
--- a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_interactions.dm
+++ b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_interactions.dm
@@ -217,7 +217,7 @@
if(Adjacent(A))
UnarmedAttack(A)
else if(iscarbon(A))
- speak("Level 10 infraction alert!")
+ speak("Внимание, обнаружена угроза уровня 10!")
playsound(loc, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50)
visible_message("[src] points at [A.name]!")
diff --git a/code/game/gamemodes/miniantags/tourist/tourist_arrivals.dm b/code/game/gamemodes/miniantags/tourist/tourist_arrivals.dm
index 545b67f3a9db..f91f1369bc9c 100644
--- a/code/game/gamemodes/miniantags/tourist/tourist_arrivals.dm
+++ b/code/game/gamemodes/miniantags/tourist/tourist_arrivals.dm
@@ -91,8 +91,8 @@
spawned_in++
if(success_run)
log_debug("Tourist event made: [tot_number] traitors.")
- var/raffle_name = pick("Galactic Getaway Raffle", "Cosmic Jackpot Raffle", "Nebula Nonsense Raffle", "Greytide Giveaway Raffle", "Toolbox Treasure Raffle")
- GLOB.minor_announcement.Announce("The lucky winners of the Nanotrasen raffle, 'Nanotrasen [raffle_name],' are arriving at [station_name()] shortly. Please welcome them warmly, they'll be staying with you until the end of your shift!")
+ var/raffle_name = pick("Галактическое приключение", "Космо-Джекпот", "Нэбула Нонсенс", "Дар Грейтайда", "Сокровища Тулбокса")
+ GLOB.minor_announcement.Announce("Счастливые победители лотереи Нанотрейзен, '[raffle_name]', в скором времени прибудут на [station_name()]. Пожалуйста, встретьте их с теплом и гостеприимством, они останутся на станции до конца вашей смены!")
// Greets the player, announces objectives!
/datum/event/tourist_arrivals/proc/greeting(mob/living/carbon/human/M)
diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm
index e0ce8b2b0386..764a2dd0bc72 100644
--- a/code/game/gamemodes/nuclear/nuclear_challenge.dm
+++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm
@@ -31,7 +31,7 @@
to_chat(user, "On second thought, the element of surprise isn't so bad after all.")
return
- var/war_declaration = "[user.real_name] has declared [user.p_their()] intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop them."
+ var/war_declaration = "[user.real_name] заявил(-а) о намерении уничтожить станцию [station_name()] с помощью ядерного устройства и бросает вызов экипажу, чтобы те попытались остановить их."
declaring_war = TRUE
var/custom_threat = tgui_alert(user, "Do you want to customize your declaration?", "Customize?", list("Yes", "No"))
@@ -48,7 +48,7 @@
if(!check_allowed(user) || !war_declaration)
return
- GLOB.major_announcement.Announce(war_declaration, "Declaration of War", 'sound/effects/siren.ogg', msg_sanitized = TRUE)
+ GLOB.major_announcement.Announce(war_declaration, "Объявление Войны.", 'sound/effects/siren.ogg', msg_sanitized = TRUE)
addtimer(CALLBACK(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level, set_level), SEC_LEVEL_GAMMA), 30 SECONDS)
to_chat(user, "You've attracted the attention of powerful forces within the syndicate. A bonus bundle of telecrystals has been granted to your team. Great things await you if you complete the mission.")
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index d324ad250fe2..1d62c48d667a 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -162,7 +162,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/proc/on_target_cryo()
var/list/owners = get_owners()
for(var/datum/mind/M in owners)
- to_chat(M.current, "
You get the feeling your target is no longer within reach. Time for Plan [pick("A","B","C","D","X","Y","Z")]. Objectives updated!")
+ to_chat(M.current, "
Вы чувствуете, что Ваша цель вне досягаемости. Время для плана [pick("A","B","C","D","X","Y","Z")]. Задачи обновлены!")
SEND_SOUND(M.current, sound('sound/ambience/alarm4.ogg'))
target = null
INVOKE_ASYNC(src, PROC_REF(post_target_cryo), owners)
@@ -210,7 +210,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/assassinate/update_explanation_text()
if(target?.current)
- explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
+ explanation_text = "Убейте [target.current.real_name], [target.assigned_role]."
else
explanation_text = "Free Objective"
@@ -233,7 +233,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/assassinateonce/update_explanation_text()
if(target?.current)
- explanation_text = "Teach [target.current.real_name], the [target.assigned_role], a lesson they will not forget. The target only needs to die once for success."
+ explanation_text = "Преподайте [target.current.real_name], [target.assigned_role] незабываемый урок. Жертва должна умереть лишь единожды для выполнения цели."
establish_signals()
else
explanation_text = "Free Objective"
@@ -259,7 +259,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/mutiny/update_explanation_text()
if(target?.current)
- explanation_text = "Assassinate or exile [target.current.real_name], the [target.assigned_role]."
+ explanation_text = "Убейте или изгоните [target.current.real_name], [target.assigned_role]."
else
explanation_text = "Free Objective"
@@ -295,7 +295,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/maroon/update_explanation_text()
if(target?.current)
- explanation_text = "Prevent [target.current.real_name], the [target.assigned_role] from escaping alive."
+ explanation_text = "Предотвратите побег [target.current.real_name], [target.assigned_role]."
else
explanation_text = "Free Objective"
@@ -329,7 +329,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/debrain/update_explanation_text()
if(target?.current)
- explanation_text = "Steal the brain of [target.current.real_name], the [target.assigned_role]."
+ explanation_text = "Украдите мозг [target.current.real_name], [target.assigned_role]."
else
explanation_text = "Free Objective"
@@ -353,7 +353,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/protect/update_explanation_text()
if(target?.current)
- explanation_text = "Protect [target.current.real_name], the [target.assigned_role]."
+ explanation_text = "Защищайте [target.current.real_name], [target.assigned_role]."
else
explanation_text = "Free Objective"
@@ -377,7 +377,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
if(owner?.current)
SEND_SOUND(owner.current, sound('sound/ambience/alarm4.ogg'))
owner.remove_antag_datum(/datum/antagonist/mindslave)
- to_chat(owner.current, "
You notice that your master has entered cryogenic storage, and revert to your normal self.")
+ to_chat(owner.current, "
Вы замечаете, что ваш мастер ушел в криогенное хранилище, и вы возвращаетесь к прежнему я.")
log_admin("[key_name(owner.current)]'s mindslave master has cryo'd, and is no longer a mindslave.")
message_admins("[key_name_admin(owner.current)]'s mindslave master has cryo'd, and is no longer a mindslave.") //Since they were on antag hud earlier, this feels important to log
qdel(src)
@@ -385,9 +385,9 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/hijack
name = "Hijack"
martyr_compatible = FALSE //Technically you won't get both anyway.
- explanation_text = "Hijack the shuttle by escaping on it with no loyalist Nanotrasen crew on board and free. \
- Syndicate agents, other enemies of Nanotrasen, cyborgs, pets, and cuffed/restrained hostages may be allowed on the shuttle alive. \
- Alternatively, hack the shuttle console multiple times (by alt clicking on it) until the shuttle directions are corrupted."
+ explanation_text = "Угоните шаттл без лояльного к Нанотрейзен экипажа на борту. \
+ Агенты Синдиката, другие враги корпорации, киборги, питомцы, а также закованные в наручники заложники могут быть допущены на шаттл живыми. \
+ Альтернативно, взломайте консоль управления шаттлом несколько раз (при помощи альт-клика по консоли) до тех пор, пока курс полёта шаттла не будет нарушен."
needs_target = FALSE
/datum/objective/hijack/check_completion()
@@ -400,7 +400,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/hijackclone
name = "Hijack (with clones)"
- explanation_text = "Hijack the shuttle by ensuring only you (or your copies) escape."
+ explanation_text = "Угоните шаттл, где только Вы (или Ваши клоны) будут допущены на борт."
martyr_compatible = FALSE
needs_target = FALSE
@@ -433,9 +433,9 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/block
name = "Silicon hijack"
- explanation_text = "Hijack the shuttle by alt-clicking on the shuttle console. Do not let the crew wipe you off of it! \
- Crew and agents can be on the shuttle when you do this, and may try to wipe you! \
- Using the doomsday device successfully is also an option."
+ explanation_text = "Угоните шаттл без лояльного к Нанотрейзен экипажа на борту. \
+ Агенты Синдиката, другие враги корпорации, киборги, питомцы/ограниченные заложники, разрешены живыми на шаттле. \
+ Успешное использование устройства судного дня - тоже вариант."
martyr_compatible = FALSE
needs_target = FALSE
@@ -455,7 +455,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/escape
name = "Escape"
- explanation_text = "Escape on the shuttle or an escape pod alive and free."
+ explanation_text = "Сбегите живым со станции на шаттле или эвакуационном поде."
needs_target = FALSE
/datum/objective/escape/check_completion()
@@ -494,7 +494,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
return
target = assassinate.target
target_real_name = assassinate.target.current.real_name
- explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role] while wearing [target.p_their()] identification card."
+ explanation_text = "Сбегите живым со станции на шаттле, или эвакуационном поде под личностью [target_real_name], [target.assigned_role], нося [target.ru_p_them()] ID-карту."
has_assassinate_objective = TRUE
RegisterSignal(assassinate, COMSIG_OBJECTIVE_TARGET_FOUND, PROC_REF(assassinate_found_target))
RegisterSignal(assassinate, COMSIG_OBJECTIVE_CHECK_VALID_TARGET, PROC_REF(assassinate_checking_target))
@@ -508,7 +508,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/escape/escape_with_identity/update_explanation_text()
if(target?.current)
target_real_name = target.current.real_name
- explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role] while wearing [target.p_their()] identification card."
+ explanation_text = "Сбегите на шаттле или эвакуационном поде под личностью [target_real_name], [target.assigned_role], нося [target.ru_p_them()] ID-карту."
else
explanation_text = "Free Objective"
@@ -554,8 +554,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
return FALSE
/datum/objective/survive
- name = "Survive"
- explanation_text = "Stay alive until the end."
+ name = "Выживание"
+ explanation_text = "Оставайтесь в живых до самого конца."
needs_target = FALSE
/datum/objective/survive/check_completion()
@@ -568,7 +568,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/nuclear
name = "Nuke station"
- explanation_text = "Destroy the station with a nuclear device."
+ explanation_text = "Уничтожьте станцию с помощью ядерной боеголовки."
martyr_compatible = TRUE
needs_target = FALSE
@@ -649,9 +649,9 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
give_kit(steal_target?.special_equipment)
/datum/objective/steal/update_explanation_text()
- explanation_text = "Steal [steal_target.name]. One was last seen in [get_location()]. "
+ explanation_text = "Украдите [steal_target.name]. В последний раз этот предмет видели в [get_location()]. "
if(length(steal_target.protected_jobs) && steal_target.job_possession)
- explanation_text += "It may also be in the possession of the [english_list(steal_target.protected_jobs, and_text = " or ")]. "
+ explanation_text += "Также этот предмет может быть в распоряжении [english_list(steal_target.protected_jobs, and_text = " или ")]. "
explanation_text += steal_target.extra_information
/datum/objective/steal/check_completion()
@@ -736,7 +736,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
return target_amount
/datum/objective/absorb/update_explanation_text()
- explanation_text = "Acquire [target_amount] compatible genomes. The 'Extract DNA Sting' can be used to stealthily get genomes without killing somebody."
+ explanation_text = "Собeрите [target_amount] совместимых геномов. Способность 'Extract DNA Sting' может быть использована для скрытного получения геномов без нужды убивать кого-либо."
/datum/objective/absorb/check_completion()
for(var/datum/mind/M in get_owners())
@@ -759,7 +759,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/destroy/update_explanation_text()
if(target?.current)
- explanation_text = "Destroy [target.current.real_name], the AI."
+ explanation_text = "Уничтожьте [target.current.real_name], ИИ станции."
else
explanation_text = "Free Objective"
@@ -798,12 +798,12 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
/datum/objective/steal_five_of_type/summon_guns
name = "Steal Five Guns"
- explanation_text = "Steal at least five guns!"
+ explanation_text = "Украдите как минимум пять стволов!"
wanted_items = list(/obj/item/gun)
/datum/objective/steal_five_of_type/summon_magic
name = "Steal Five Artefacts"
- explanation_text = "Steal at least five magical artefacts!"
+ explanation_text = "Украдите как минимум пять магических артефактов!"
wanted_items = list()
/datum/objective/steal_five_of_type/summon_magic/New()
@@ -846,7 +846,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
return target_amount
/datum/objective/blood/update_explanation_text()
- explanation_text = "Accumulate at least [target_amount] total units of blood."
+ explanation_text = "Наберите в общей сложности не менее [target_amount] единиц крови."
/datum/objective/blood/check_completion()
for(var/datum/mind/M in get_owners())
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 46ed0c4f3fea..50161eb4c20a 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -95,7 +95,7 @@
if(SSshuttle.emergency.mode == SHUTTLE_STRANDED)
SSshuttle.emergency.mode = SHUTTLE_DOCKED
SSshuttle.emergency.timer = world.time
- GLOB.major_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/eshuttle_dock.ogg')
+ GLOB.major_announcement.Announce("Враждебное окружение нейтрализовано. У вас есть 3 минуты, чтобы прибыть на борт эвакуационного шаттла.", null, 'sound/AI/eshuttle_dock.ogg')
return ..()
if(finished)
return TRUE
diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm
index 4f4819a29dde..1ce38b4e7c36 100644
--- a/code/game/jobs/job/assistant.dm
+++ b/code/game/jobs/job/assistant.dm
@@ -4,7 +4,7 @@
department_flag = JOBCAT_SUPPORT
total_positions = -1
spawn_positions = -1
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list() //See /datum/job/assistant/get_access()
diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm
index d63a011d8f58..b3881cc132ba 100644
--- a/code/game/jobs/job/central.dm
+++ b/code/game/jobs/job/central.dm
@@ -6,7 +6,7 @@
department_flag = JOB_CENTCOM // This gets its job as its own flag because admin jobs dont have flags
total_positions = 5
spawn_positions = 5
- supervisors = "the admins"
+ supervisors = "админами"
selection_color = "#ffdddd"
access = list()
admin_only = TRUE
@@ -52,7 +52,7 @@
department_flag = JOB_CENTCOM // This gets its job as its own flag because admin jobs dont have flags
total_positions = 5
spawn_positions = 5
- supervisors = "the admins"
+ supervisors = "админами"
selection_color = "#ffdddd"
access = list()
admin_only = TRUE
diff --git a/code/game/jobs/job/engineering_jobs.dm b/code/game/jobs/job/engineering_jobs.dm
index 4c8ae0af4a29..c629570e16cc 100644
--- a/code/game/jobs/job/engineering_jobs.dm
+++ b/code/game/jobs/job/engineering_jobs.dm
@@ -5,7 +5,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_COMMAND | DEP_FLAG_ENGINEERING
- supervisors = "the captain"
+ supervisors = "капитаном"
department_head = list("Captain")
selection_color = "#ffeeaa"
req_admin_notify = 1
@@ -35,7 +35,7 @@
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP)
missing_limbs_allowed = FALSE
outfit = /datum/outfit/job/chief_engineer
- important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Engineering), basic job duties, and act professionally (roleplay)."
+ important_information = "Эта роль требует, чтобы вы координировали работу отдела. От вас требуется знание Стандартных Рабочих Процедур (Инженерных), базовых должностных обязанностей и профессиональных действий."
/datum/outfit/job/chief_engineer
name = "Chief Engineer"
@@ -66,7 +66,7 @@
total_positions = 5
spawn_positions = 5
job_department_flags = DEP_FLAG_ENGINEERING
- supervisors = "the chief engineer"
+ supervisors = "главным инженером"
department_head = list("Chief Engineer")
selection_color = "#fff5cc"
access = list(
@@ -111,7 +111,7 @@
total_positions = 3
spawn_positions = 2
job_department_flags = DEP_FLAG_ENGINEERING
- supervisors = "the chief engineer"
+ supervisors = "главным инженером"
department_head = list("Chief Engineer")
selection_color = "#fff5cc"
access = list(
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index 0d61c9c577b7..947e7da06da9 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -204,12 +204,12 @@
permitted = TRUE
if(!permitted)
- to_chat(H, "Your current job or whitelist status does not permit you to spawn with [G.display_name]!")
+ to_chat(H, "Ваша текущая работа или статус в белом списке не позволяют вам спауниться с [G.display_name]!")
continue
if(G.slot)
if(H.equip_to_slot_or_del(G.spawn_item(H, H.client.prefs.active_character.get_gear_metadata(G)), G.slot, TRUE))
- to_chat(H, "Equipping you with [G.display_name]!")
+ to_chat(H, "Одеваем вас в [G.display_name]!")
else
gear_leftovers += G
else
@@ -231,17 +231,17 @@
var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.active_character.get_gear_metadata(G)))
if(istype(placed_in))
if(isturf(placed_in))
- to_chat(H, "Placing [G.display_name] on [placed_in]!")
+ to_chat(H, "Помещение [G.display_name] в [placed_in]!")
else
- to_chat(H, "Placing [G.display_name] in your [placed_in.name].")
+ to_chat(H, "Помещение [G.display_name] в ваш [placed_in.name].")
continue
if(H.equip_to_appropriate_slot(G))
- to_chat(H, "Placing [G.display_name] in your inventory!")
+ to_chat(H, "Помещение [G.display_name] в ваш инвентарь!")
continue
if(H.put_in_hands(G))
- to_chat(H, "Placing [G.display_name] in your hands!")
+ to_chat(H, "Помещение [G.display_name] в ваши руки!")
continue
- to_chat(H, "Failed to locate a storage object on your mob, either you spawned with no hands free and no backpack or this is a bug.")
+ to_chat(H, "Не удалось найти хранилище на мобе, либо вы спавнитесь без свободных рук и рюкзака, либо это ошибка.")
qdel(G)
gear_leftovers.Cut()
@@ -284,7 +284,7 @@
PDA.owner = H.real_name
PDA.ownjob = C.assignment
PDA.ownrank = C.rank
- PDA.name = "PDA-[H.real_name] ([PDA.ownjob])"
+ PDA.name = "КПК-[H.real_name] ([PDA.ownjob])"
if(H.client?.prefs.active_character.pda_ringtone)
PDA.ttone = H.client.prefs.active_character.pda_ringtone
diff --git a/code/game/jobs/job/medical_jobs.dm b/code/game/jobs/job/medical_jobs.dm
index 27c681eb801e..286a038aacd6 100644
--- a/code/game/jobs/job/medical_jobs.dm
+++ b/code/game/jobs/job/medical_jobs.dm
@@ -5,7 +5,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_COMMAND | DEP_FLAG_MEDICAL
- supervisors = "the captain"
+ supervisors = "капитаном"
department_head = list("Captain")
selection_color = "#ffddf0"
req_admin_notify = 1
@@ -33,7 +33,7 @@
exp_map = list(EXP_TYPE_MEDICAL = 1200)
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY)
outfit = /datum/outfit/job/cmo
- important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Medical), basic job duties, and act professionally (roleplay)."
+ important_information = "Эта роль требует, чтобы вы координировали работу отдела. От вас требуется знание Стандартных Рабочих Процедур (Медицинских), базовых должностных обязанностей и профессиональных действий."
/datum/outfit/job/cmo
name = "Chief Medical Officer"
@@ -62,7 +62,7 @@
total_positions = 5
spawn_positions = 3
job_department_flags = DEP_FLAG_MEDICAL
- supervisors = "the chief medical officer"
+ supervisors = "главным врачом"
department_head = list("Chief Medical Officer")
selection_color = "#ffeef0"
access = list(
@@ -102,7 +102,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_MEDICAL
- supervisors = "the chief medical officer"
+ supervisors = "главным врачом"
department_head = list("Chief Medical Officer")
selection_color = "#ffeef0"
access = list(
@@ -165,7 +165,7 @@
total_positions = 2
spawn_positions = 2
job_department_flags = DEP_FLAG_MEDICAL
- supervisors = "the chief medical officer"
+ supervisors = "главным врачом"
department_head = list("Chief Medical Officer")
selection_color = "#ffeef0"
access = list(
@@ -202,7 +202,7 @@
total_positions = 2
spawn_positions = 2
job_department_flags = DEP_FLAG_MEDICAL | DEP_FLAG_SCIENCE
- supervisors = "the chief medical officer and the research director"
+ supervisors = "главным врачом и директором исследований"
department_head = list("Chief Medical Officer", "Research Director")
selection_color = "#ffeef0"
access = list(
@@ -239,7 +239,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_MEDICAL
- supervisors = "the chief medical officer"
+ supervisors = "главным врачом"
department_head = list("Chief Medical Officer")
selection_color = "#ffeef0"
access = list(
@@ -280,7 +280,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_MEDICAL
- supervisors = "the chief medical officer"
+ supervisors = "главным врачом"
department_head = list("Chief Medical Officer")
selection_color = "#ffeef0"
access = list(
@@ -321,7 +321,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_MEDICAL
- supervisors = "the chief medical officer"
+ supervisors = "главным врачом"
department_head = list("Chief Medical Officer")
selection_color = "#ffeef0"
access = list(
@@ -340,7 +340,7 @@
minimal_player_age = 3
exp_map = list(EXP_TYPE_CREW = 180)
outfit = /datum/outfit/job/paramedic
- important_information = "You are the first responder to medical emergencies outside the sanctity of the Medbay. You can also respond to Lavaland emergencies via the mining shuttle located in Cargo."
+ important_information = "Вы являетесь первым, кто реагирует на неотложные медицинские ситуации за пределами неприкосновенности медицинского отсека. Вы также можете реагировать на вызовы с Лаваленда с помощью шахтерского шаттла, расположенного в отделе снабжения."
/datum/outfit/job/paramedic
name = "Paramedic"
diff --git a/code/game/jobs/job/science_jobs.dm b/code/game/jobs/job/science_jobs.dm
index 8b496c92084f..d21228e32881 100644
--- a/code/game/jobs/job/science_jobs.dm
+++ b/code/game/jobs/job/science_jobs.dm
@@ -5,7 +5,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_COMMAND | DEP_FLAG_SCIENCE
- supervisors = "the captain"
+ supervisors = "капитаном"
department_head = list("Captain")
selection_color = "#ffddff"
req_admin_notify = 1
@@ -43,7 +43,7 @@
)
outfit = /datum/outfit/job/rd
- important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Science), basic job duties, and act professionally (roleplay)."
+ important_information = "Эта роль требует, чтобы вы координировали работу отдела. От вас требуется знание Стандартных Рабочих Процедур (Научных), базовых должностных обязанностей и профессиональных действий."
/datum/outfit/job/rd
name = "Research Director"
@@ -71,7 +71,7 @@
total_positions = 6
spawn_positions = 6
job_department_flags = DEP_FLAG_SCIENCE
- supervisors = "the research director"
+ supervisors = "директором исследований"
department_head = list("Research Director")
selection_color = "#ffeeff"
access = list(
@@ -116,7 +116,7 @@
total_positions = 2
spawn_positions = 2
job_department_flags = DEP_FLAG_SCIENCE
- supervisors = "the research director"
+ supervisors = "директором исследований"
department_head = list("Research Director")
selection_color = "#ffeeff"
access = list(
diff --git a/code/game/jobs/job/security_jobs.dm b/code/game/jobs/job/security_jobs.dm
index 66ff8c278bc8..a2ec7f3f2bcb 100644
--- a/code/game/jobs/job/security_jobs.dm
+++ b/code/game/jobs/job/security_jobs.dm
@@ -5,7 +5,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_COMMAND | DEP_FLAG_SECURITY
- supervisors = "the captain"
+ supervisors = "капитаном"
department_head = list("Captain")
selection_color = "#ffdddd"
req_admin_notify = 1
@@ -42,7 +42,7 @@
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP)
missing_limbs_allowed = FALSE
outfit = /datum/outfit/job/hos
- important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Security), Space Law, basic job duties, and act professionally (roleplay)."
+ important_information = "Эта роль требует, чтобы вы координировали работу отдела. От вас требуется знание Стандартных Рабочих Процедур (Охранных), базовых должностных обязанностей и профессиональных действий."
/datum/outfit/job/hos
name = "Head of Security"
@@ -76,7 +76,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SECURITY
- supervisors = "the head of security"
+ supervisors = "главой службы безопасности"
department_head = list("Head of Security")
selection_color = "#ffeeee"
access = list(
@@ -126,7 +126,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SECURITY
- supervisors = "the head of security"
+ supervisors = "главой службы безопасности"
department_head = list("Head of Security")
selection_color = "#ffeeee"
alt_titles = list("Forensic Technician")
@@ -145,7 +145,7 @@
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY)
missing_limbs_allowed = FALSE
outfit = /datum/outfit/job/detective
- important_information = "Track, investigate, and look cool while doing it."
+ important_information = "Расследуйте, исследуйте и выглядите при этом круто."
/datum/outfit/job/detective
name = "Detective"
@@ -193,7 +193,7 @@
total_positions = 7
spawn_positions = 7
job_department_flags = DEP_FLAG_SECURITY
- supervisors = "the head of security"
+ supervisors = "главой службы безопасности"
department_head = list("Head of Security")
selection_color = "#ffeeee"
access = list(
@@ -209,7 +209,7 @@
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY)
missing_limbs_allowed = FALSE
outfit = /datum/outfit/job/officer
- important_information = "Space Law is the law, not a suggestion."
+ important_information = "Космический Закон - это необходимость, а не рекомендация."
/datum/outfit/job/officer
name = "Security Officer"
diff --git a/code/game/jobs/job/silicon_jobs.dm b/code/game/jobs/job/silicon_jobs.dm
index 9fdfc71b5f70..9a6e0c15f62e 100644
--- a/code/game/jobs/job/silicon_jobs.dm
+++ b/code/game/jobs/job/silicon_jobs.dm
@@ -5,7 +5,7 @@
total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm
spawn_positions = 1
selection_color = "#ccffcc"
- supervisors = "your laws"
+ supervisors = "своими законами"
department_head = list("Captain")
req_admin_notify = 1
minimal_player_age = 30
@@ -25,7 +25,7 @@
department_flag = JOBCAT_ENGSEC
total_positions = 2
spawn_positions = 2
- supervisors = "your laws and the AI" //Nodrak
+ supervisors = "своими законами и ИИ" //Nodrak
department_head = list("AI")
selection_color = "#ddffdd"
minimal_player_age = 21
diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm
index 2b41c27a9e18..46fe52a2e067 100644
--- a/code/game/jobs/job/supervisor.dm
+++ b/code/game/jobs/job/supervisor.dm
@@ -4,7 +4,7 @@
department_flag = JOBCAT_ENGSEC
total_positions = 1
spawn_positions = 1
- supervisors = "Nanotrasen officials"
+ supervisors = "Официальными лицами Нанотрейзен"
department_head = list("Nanotrasen Navy Officer")
selection_color = "#ccccff"
req_admin_notify = 1
@@ -15,7 +15,7 @@
exp_map = list(EXP_TYPE_COMMAND = 1200)
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP)
outfit = /datum/outfit/job/captain
- important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Command), basic job duties, and act professionally (roleplay)."
+ important_information = "Эта роль требует, чтобы вы координировали работу отделов. От вас требуется знание Стандартных Рабочих Процедур (Командования), базовых должностных обязанностей и профессиональных действий."
/datum/job/captain/get_access()
return get_all_accesses()
@@ -23,7 +23,7 @@
/datum/job/captain/announce(mob/living/carbon/human/H)
. = ..()
// Why the hell are captain announcements minor
- GLOB.minor_announcement.Announce("All hands, Captain [H.real_name] on deck!")
+ GLOB.minor_announcement.Announce("Всему экипажу, капитан [H.real_name] на борту!")
/datum/outfit/job/captain
name = "Captain"
@@ -59,7 +59,7 @@
department_flag = JOBCAT_SUPPORT
total_positions = 1
spawn_positions = 1
- supervisors = "the captain"
+ supervisors = "капитаном"
department_head = list("Captain")
selection_color = "#ddddff"
req_admin_notify = 1
@@ -105,7 +105,7 @@
)
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY , DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP)
outfit = /datum/outfit/job/hop
- important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Service), basic job duties, and act professionally (roleplay)."
+ important_information = "Эта роль требует, чтобы вы координировали работу отдела. От вас требуется знание Стандартных Рабочих Процедур (Сервис), базовых должностных обязанностей и профессиональных действий."
/datum/outfit/job/hop
name = "Head of Personnel"
@@ -130,7 +130,7 @@
department_flag = JOBCAT_ENGSEC
total_positions = 1
spawn_positions = 1
- supervisors = "the command staff"
+ supervisors = "командным составом"
department_head = list("Captain")
selection_color = "#ddddff"
req_admin_notify = TRUE
@@ -180,7 +180,7 @@
)
blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP)
outfit = /datum/outfit/job/nanotrasenrep
- important_information = "This role requires you to advise the Command team about Standard Operating Procedure, Chain of Command, and report to Central Command about various matters. You are required to act in a manner befitting someone representing Nanotrasen."
+ important_information = "Эта роль требует, чтобы вы консультировали командование по Стандартным Рабочим Процедурам, цепочке командования и отчитывались перед Центральным Командованием по различным вопросам. От вас требуется действовать так, как подобает лицу, представляющему Нанотрейзен."
/datum/outfit/job/nanotrasenrep
name = "Nanotrasen Representative"
@@ -204,7 +204,7 @@
department_flag = JOBCAT_ENGSEC
total_positions = 1
spawn_positions = 1
- supervisors = "the Nanotrasen representative"
+ supervisors = "представителем Нанотрейзен"
department_head = list("Captain")
selection_color = "#ddddff"
req_admin_notify = TRUE
@@ -231,7 +231,7 @@
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP)
missing_limbs_allowed = FALSE
outfit = /datum/outfit/job/blueshield
- important_information = "This role requires you to ensure the safety of the Heads of Staff, not the general crew. You may perform arrests only if the combatant is directly threatening a member of Command, the Nanotrasen Representative, or the Magistrate."
+ important_information = "Эта роль требует, чтобы вы обеспечивали безопасность руководителей персонала, а не всего экипажа. Вы можете производить аресты только в том случае, если нарушитель напрямую угрожает члену командования, представителю Нанотрейзен или магистрату."
/datum/outfit/job/blueshield
name = "Blueshield"
@@ -259,7 +259,7 @@
department_flag = JOBCAT_ENGSEC
total_positions = 1
spawn_positions = 1
- supervisors = "Nanotrasen Asset Protection"
+ supervisors = "верховным судом Нанотрейзен"
department_head = list("Captain")
selection_color = "#ddddff"
req_admin_notify = TRUE
@@ -282,7 +282,7 @@
)
blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP)
outfit = /datum/outfit/job/judge
- important_information = "This role requires you to oversee legal matters and make important decisions about sentencing. You are required to have an extensive knowledge of Space Law and Security SOP and only operate within, not outside, the boundaries of the law."
+ important_information = "Эта роль требует от вас курировать юридические вопросы и принимать важные решения о вынесении приговоров. От вас требуется обладать обширными знаниями в области Космического Закона и охранного СРП, действовать только в рамках закона, а не за его пределами."
/datum/outfit/job/judge
name = "Magistrate"
@@ -311,7 +311,7 @@
total_positions = 2
spawn_positions = 2
job_department_flags = DEP_FLAG_LEGAL
- supervisors = "the magistrate"
+ supervisors = "магистратом"
department_head = list("Captain")
selection_color = "#ddddff"
access = list(
@@ -330,7 +330,7 @@
exp_map = list(EXP_TYPE_CREW = 600)
blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_NERVOUS, DISABILITY_FLAG_LISP)
outfit = /datum/outfit/job/iaa
- important_information = "Your job is to deal with affairs regarding Standard Operating Procedure. You are NOT in charge of Space Law affairs, nor can you override it. You are NOT a prisoner defence lawyer."
+ important_information = "Ваша работа заключается в решении вопросов, касающихся Стандартных Рабочих Процедур. Вы не отвечаете за вопросы Космического Закона и не можете его отменять. Вы не являетесь адвокатом заключенных."
/datum/outfit/job/iaa
name = "Internal Affairs Agent"
diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm
index d0dbf604b5c3..8a44225f05c1 100644
--- a/code/game/jobs/job/support.dm
+++ b/code/game/jobs/job/support.dm
@@ -6,7 +6,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SUPPLY | DEP_FLAG_COMMAND
- supervisors = "the captain"
+ supervisors = "капитаном"
department_head = list("Captain")
department_account_access = TRUE
selection_color = "#e2c59d"
@@ -32,7 +32,7 @@
)
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY)
outfit = /datum/outfit/job/qm
- important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Supply), basic job duties, and act professionally (roleplay)."
+ important_information = "Эта роль требует, чтобы вы координировали работу отдела. От вас требуется знание Стандартных Рабочих Процедур (Снабжения), базовых должностных обязанностей и профессиональных действий."
exp_map = list(EXP_TYPE_SUPPLY = 1200)
/datum/outfit/job/qm
@@ -62,7 +62,7 @@
total_positions = 2
spawn_positions = 2
job_department_flags = DEP_FLAG_SUPPLY
- supervisors = "the quartermaster"
+ supervisors = "квартирмейстером"
department_head = list("Quartermaster")
selection_color = "#eeddbe"
access = list(
@@ -96,7 +96,7 @@
total_positions = 6
spawn_positions = 8
job_department_flags = DEP_FLAG_SUPPLY
- supervisors = "the quartermaster"
+ supervisors = "квартирмейстером"
department_head = list("Quartermaster")
selection_color = "#eeddbe"
access = list(
@@ -209,7 +209,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SERVICE
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list(ACCESS_BAR, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
@@ -253,7 +253,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SERVICE
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list(
@@ -296,7 +296,7 @@
total_positions = 3
spawn_positions = 2
job_department_flags = DEP_FLAG_SERVICE
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list(
@@ -334,7 +334,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SERVICE
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list(
@@ -411,7 +411,7 @@
active = TRUE
button_background_icon_state = "bg_spell"
UpdateButtons()
- to_chat(H, "You start acting clumsy to throw suspicions off. Focus again before using weapons.")
+ to_chat(H, "Вы начинаете вести себя неуклюже, чтобы отвести от себя подозрения. Снова сосредоточьтесь, прежде чем использовать оружие.")
/datum/action/innate/toggle_clumsy/Deactivate()
var/mob/living/carbon/human/H = owner
@@ -420,7 +420,7 @@
active = FALSE
button_background_icon_state = "bg_default"
UpdateButtons()
- to_chat(H, "You focus and can now use weapons regularly.")
+ to_chat(H, "Вы сосредоточились и теперь можете эффективно пользоваться оружием.")
/datum/job/mime
title = "Mime"
@@ -429,7 +429,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SERVICE
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list(
@@ -488,7 +488,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SERVICE
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list(
@@ -523,7 +523,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SERVICE
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list(
diff --git a/code/game/jobs/job/support_chaplain.dm b/code/game/jobs/job/support_chaplain.dm
index 68d298425c60..0157116593e2 100644
--- a/code/game/jobs/job/support_chaplain.dm
+++ b/code/game/jobs/job/support_chaplain.dm
@@ -6,7 +6,7 @@
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SERVICE
- supervisors = "the head of personnel"
+ supervisors = "главой персонала"
department_head = list("Head of Personnel")
selection_color = "#dddddd"
access = list(
diff --git a/code/game/jobs/job/syndicate_jobs.dm b/code/game/jobs/job/syndicate_jobs.dm
index 68a462ccc489..cb9bc60aa19b 100644
--- a/code/game/jobs/job/syndicate_jobs.dm
+++ b/code/game/jobs/job/syndicate_jobs.dm
@@ -4,7 +4,7 @@
department_flag = JOB_SYNDICATE // This gets its job as its own flag because admin jobs dont have flags
total_positions = 5
spawn_positions = 5
- supervisors = "the admins"
+ supervisors = "админами"
selection_color = "#ff0000"
access = list()
admin_only = TRUE
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index acd184eecd2e..cb98b5922eab 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -131,7 +131,7 @@
if(world.timeofday > (R.last_addiction_dose + ADDICTION_SPEEDUP_TIME)) // 2.5 minutes
addiction_removal_chance = 10
if(prob(addiction_removal_chance))
- atom_say("Patient's addiction was cured.")
+ atom_say("Пациент излечен от зависимости.")
playsound(get_turf(src), 'sound/machines/ping.ogg', 50, 0)
to_chat(occupant, "You no longer feel reliant on [R.name]!")
occupant.reagents.addiction_list.Remove(R)
diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm
index 9c1a491b6fc8..79ba19a73a51 100644
--- a/code/game/machinery/camera/tracking.dm
+++ b/code/game/machinery/camera/tracking.dm
@@ -23,18 +23,18 @@
for(var/obj/machinery/camera/C in L)
var/list/tempnetwork = C.network & src.network
if(length(tempnetwork))
- T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
+ T[text("[][]", C.c_tag, (C.can_use() ? null : " (Деактивирована)"))] = C
track.cameras = T
return T
/mob/living/silicon/ai/proc/ai_camera_list(camera in get_camera_list())
- set category = "AI Commands"
- set name = "Show Camera List"
+ set category = "Команды ИИ"
+ set name = "Показать список камер"
if(stat == DEAD)
- to_chat(src, "You can't list the cameras because you are dead!")
+ to_chat(src, "Вы не можете посмотреть список камер, поскольку мертвы!")
return
if(!camera || camera == "Cancel")
@@ -89,12 +89,12 @@
return targets
/mob/living/silicon/ai/proc/ai_camera_track(target_name in trackable_mobs())
- set category = "AI Commands"
- set name = "Track With Camera"
- set desc = "Select who you would like to track."
+ set category = "Команды ИИ"
+ set name = "Отслеживать"
+ set desc = "Выберите, за кем вы хотите следить."
if(src.stat == DEAD)
- to_chat(src, "You can't track with camera because you are dead!")
+ to_chat(src, "Вы не можете отслеживать по причине своей смерти!")
return
if(!target_name)
return
@@ -107,7 +107,7 @@
if(!camera_follow)
return
- to_chat(src, "Follow camera mode [forced ? "terminated" : "ended"].")
+ to_chat(src, "Режим слежения [forced ? "прерван" : "завершен"].")
camera_follow = null
/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target, doubleclick = FALSE)
@@ -118,23 +118,23 @@
U.camera_follow = target
U.tracking = TRUE
- to_chat(U, "Attempting to track [target.get_visible_name()]...")
+ to_chat(U, "Пытаемся отследить [target.get_visible_name()]...")
if(!doubleclick)
sleep(1.5 SECONDS) // Gives antags a brief window to get out of dodge before the eye of sauron decends upon them when someone yells ;HALP
spawn(15) //give the AI a grace period to stop moving.
U.tracking = FALSE
if(target.is_jammed())
- to_chat(U, "Unable to track [target.get_visible_name()]...")
+ to_chat(U, "Невозможно отследить [target.get_visible_name()]...")
U.camera_follow = null
return
if(!target || !target.can_track(usr))
- to_chat(U, "Target is not near any active cameras.")
+ to_chat(U, "Цель находится вне зоны покрытия камер.")
U.camera_follow = null
return
- to_chat(U, "Now tracking [target.get_visible_name()] on camera.")
+ to_chat(U, "Следим за [target.get_visible_name()] на камерах.")
var/cameraticks = 0
spawn(0)
@@ -145,11 +145,11 @@
if(!target.can_track(usr))
U.tracking = TRUE
if(!cameraticks)
- to_chat(U, "Target is not near any active cameras. Attempting to reacquire...")
+ to_chat(U, "Цель находится вне активных камер. Попытка обнаружения...")
cameraticks++
if(cameraticks > 9)
U.camera_follow = null
- to_chat(U, "Unable to reacquire, cancelling track...")
+ to_chat(U, "Наблюдение невозможно, прерываем слежение...")
U.tracking = FALSE
return
else
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index 8a87ba6c0469..b8f48bda05e0 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -205,20 +205,20 @@
var/isNewPatient = (table.patient != currentPatient) //Is this a new Patient?
if(table.patient.stat == DEAD || HAS_TRAIT(table.patient, TRAIT_FAKEDEATH))
- patientStatus = "Dead"
+ patientStatus = "Отсутствует пульс"
else if(table.patient.stat == CONSCIOUS)
- patientStatus = "Awake"
+ patientStatus = "В сознании"
else if(table.patient.stat == UNCONSCIOUS)
- patientStatus = "Asleep"
+ patientStatus = "Без сознания"
if(isNewPatient)
- atom_say("New patient detected, loading stats")
+ atom_say("Обнаружен пациент, загрузка данных.")
var/blood_type_msg
if(ishuman(table.patient))
blood_type_msg = table.patient.dna.blood_type
else
- blood_type_msg = "\[ERROR: UNKNOWN\]"
- atom_say("[table.patient], [blood_type_msg] blood, [patientStatus]")
+ blood_type_msg = "\[ОШИБКА: НЕИЗВЕСТНО\]"
+ atom_say("Пациент [table.patient], группа крови [blood_type_msg], статус пациента: [patientStatus].")
SStgui.update_uis(src)
patientStatusHolder = table.patient.stat
currentPatient = table.patient
@@ -232,7 +232,7 @@
if(healthAnnounce && table.patient.health <= healthAlarm)
atom_say("[round(table.patient.health)]")
if(table.patient.stat != patientStatusHolder)
- atom_say("Patient is now [patientStatus]")
+ atom_say("Статус пациента: [patientStatus].")
patientStatusHolder = table.patient.stat
/obj/machinery/computer/operating/clockwork
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 1378b797a8af..ec207ded1ae9 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -1,7 +1,7 @@
/obj/structure/ai_core
density = TRUE
anchored = FALSE
- name = "AI core"
+ name = "Ядро ИИ"
icon = 'icons/mob/AI.dmi'
icon_state = "0"
max_integrity = 500
@@ -23,7 +23,7 @@
if(!user.drop_item())
return
playsound(loc, P.usesound, 50, 1)
- to_chat(user, "You place the circuit board inside the frame.")
+ to_chat(user, "Вы вставляете плату в раму.")
update_icon(UPDATE_ICON_STATE)
state = CIRCUIT_CORE
P.forceMove(src)
@@ -35,83 +35,83 @@
var/obj/item/stack/cable_coil/C = P
if(C.get_amount() >= 5)
playsound(loc, 'sound/items/deconstruct.ogg', 50, 1)
- to_chat(user, "You start to add cables to the frame...")
+ to_chat(user, "Вы добавляете кабелей к раме...")
if(do_after(user, 20, target = src) && state == SCREWED_CORE && C.use(5))
- to_chat(user, "You add cables to the frame.")
+ to_chat(user, "Вы добавили кабелей к раме.")
state = CABLED_CORE
update_icon(UPDATE_ICON_STATE)
else
- to_chat(user, "You need five lengths of cable to wire the AI core!")
+ to_chat(user, "Вам нужно 5 кабелей для вставки проводки в ядро ИИ!")
return
if(CABLED_CORE)
if(istype(P, /obj/item/stack/sheet/rglass))
var/obj/item/stack/sheet/rglass/G = P
if(G.get_amount() >= 2)
playsound(loc, 'sound/items/deconstruct.ogg', 50, 1)
- to_chat(user, "You start to put in the glass panel...")
+ to_chat(user, "Вы ставите стеклянную панель...")
if(do_after(user, 20, target = src) && state == CABLED_CORE && G.use(2))
- to_chat(user, "You put in the glass panel.")
+ to_chat(user, "Вы вставили стеклянную панель.")
state = GLASS_CORE
update_icon(UPDATE_ICON_STATE)
else
- to_chat(user, "You need two sheets of reinforced glass to insert them into the AI core!")
+ to_chat(user, "Вам нужно два листа укрепленного стекла для вставки в ядро ИИ!")
return
if(istype(P, /obj/item/ai_module/purge))
laws.clear_inherent_laws()
- to_chat(usr, "Law module applied.")
+ to_chat(usr, "Применён модуль Purge.")
return
if(istype(P, /obj/item/ai_module/freeform))
var/obj/item/ai_module/freeform/M = P
if(!M.newFreeFormLaw)
- to_chat(usr, "No law detected on module, please create one.")
+ to_chat(usr, "На модуле не обнаружено закона. Пожалуйста, напишите его.")
return
laws.add_supplied_law(M.lawpos, M.newFreeFormLaw)
- to_chat(usr, "Added a freeform law.")
+ to_chat(usr, "Добавлен закон Freeform.")
return
if(istype(P, /obj/item/ai_module/syndicate))
var/obj/item/ai_module/syndicate/M = P
if(!M.newFreeFormLaw)
- to_chat(usr, "No law detected on module, please create one.")
+ to_chat(usr, "На модуле не обнаружено закона. Пожалуйста, напишите его.")
return
laws.add_ion_law(M.newFreeFormLaw)
- to_chat(usr, "Added a hacked law.")
+ to_chat(usr, "Добавлен взломанный закон.")
return
if(istype(P, /obj/item/ai_module))
var/obj/item/ai_module/M = P
if(!M.laws)
- to_chat(usr, "This AI module can not be applied directly to AI cores.")
+ to_chat(usr, "Этот модуль ИИ нельзя применить напрямую к ядру.")
return
laws = M.laws
- to_chat(usr, "Added [M.laws.name] laws.")
+ to_chat(usr, "Добавлены [M.laws.name] законы.")
return
if(istype(P, /obj/item/mmi) && !brain)
var/obj/item/mmi/M = P
if(!M.brainmob)
- to_chat(user, "Sticking an empty [P] into the frame would sort of defeat the purpose.")
+ to_chat(user, "Вставка пустого [P] в раму своего рода противоречить цели.")
return
if(M.brainmob.stat == DEAD)
- to_chat(user, "Sticking a dead [P] into the frame would sort of defeat the purpose.")
+ to_chat(user, "Вставка мёртвого [P] в раму своего рода противоречить цели.")
return
if(!M.brainmob.client)
- to_chat(user, "Sticking an inactive [M.name] into the frame would sort of defeat the purpose.")
+ to_chat(user, "Вставка неактивного [M.name] в раму своего рода противоречить цели.")
return
if(jobban_isbanned(M.brainmob, "AI") || jobban_isbanned(M.brainmob, "nonhumandept"))
- to_chat(user, "This [P] does not seem to fit.")
+ to_chat(user, "Видимо, [P] не подходит.")
return
if(!M.brainmob.mind)
- to_chat(user, "This [M.name] is mindless!")
+ to_chat(user, "[M.name] сейчас без разума!")
return
if(istype(P, /obj/item/mmi/syndie))
- to_chat(user, "This MMI does not seem to fit!")
+ to_chat(user, "Этот MMI, видимо, не подходит!")
return
if(!user.drop_item())
@@ -119,7 +119,7 @@
M.forceMove(src)
brain = M
- to_chat(user, "You add [M.name] to the frame.")
+ to_chat(user, "Вы вставляете [M.name] в раму.")
update_icon(UPDATE_ICON_STATE)
return
@@ -133,21 +133,21 @@
return
switch(state)
if(CIRCUIT_CORE)
- to_chat(user, "You remove the circuit board.")
+ to_chat(user, "Вы вытаскиваете плату.")
state = EMPTY_CORE
circuit.forceMove(loc)
circuit = null
update_icon(UPDATE_ICON_STATE)
return
if(GLASS_CORE)
- to_chat(user, "You remove the glass panel.")
+ to_chat(user, "Вы убираете стеклянную панель.")
state = CABLED_CORE
new /obj/item/stack/sheet/rglass(loc, 2)
update_icon(UPDATE_ICON_STATE)
return
if(CABLED_CORE)
if(brain)
- to_chat(user, "You remove the brain.")
+ to_chat(user, "Вы удаляете мозг.")
brain.forceMove(loc)
brain = null
update_icon(UPDATE_ICON_STATE)
@@ -160,18 +160,18 @@
return
switch(state)
if(SCREWED_CORE)
- to_chat(user, "You unfasten the circuit board.")
+ to_chat(user, "Вы откручиваете плату.")
state = CIRCUIT_CORE
if(CIRCUIT_CORE)
- to_chat(user, "You screw the circuit board into place.")
+ to_chat(user, "Вы закручиваете плату в слот.")
state = SCREWED_CORE
if(GLASS_CORE)
var/area/R = get_area(src)
message_admins("[key_name_admin(usr)] has completed an AI core in [R]: [ADMIN_COORDJMP(loc)].")
log_game("[key_name(usr)] has completed an AI core in [R]: [COORD(loc)].")
- to_chat(user, "You connect the monitor.")
+ to_chat(user, "Вы подключаете монитор.")
if(!brain)
- var/open_for_latejoin = tgui_alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", list("Yes", "No")) == "Yes"
+ var/open_for_latejoin = tgui_alert(user, "Вы хотите, чтобы это ядро было доступно из лобби игры?", "Latejoin", list("Да", "Нет")) == "Да"
var/obj/structure/ai_core/deactivated/D = new(loc)
if(open_for_latejoin)
GLOB.empty_playable_ai_cores += D
@@ -184,11 +184,11 @@
// Stop holding onto the laws so we don't qdel them and make the AI randomly lose its laws when GC gives up and hard deletes them.
laws = null
if(A) //if there's no brain, the mob is deleted and a structure/AIcore is created
- A.rename_self("AI", 1)
+ A.rename_self("ИИ", 1)
SSblackbox.record_feedback("amount", "ais_created", 1)
qdel(src)
if(AI_READY_CORE)
- to_chat(user, "You disconnect the monitor.")
+ to_chat(user, "Вы отключаете монитор.")
state = GLASS_CORE
update_icon(UPDATE_ICON_STATE)
@@ -200,9 +200,9 @@
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
if(brain)
- to_chat(user, "Get that [brain.name] out of there first!")
+ to_chat(user, " Сначала вытащите [brain.name] !")
else
- to_chat(user, "You remove the cables.")
+ to_chat(user, "Вы убираете проводку.")
state = SCREWED_CORE
update_icon(UPDATE_ICON_STATE)
var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc )
@@ -249,12 +249,12 @@
return
WELDER_ATTEMPT_WELD_MESSAGE
if(I.use_tool(src, user, 20, volume = I.tool_volume))
- to_chat(user, "You deconstruct the frame.")
+ to_chat(user, "Вы разбираете раму.")
new /obj/item/stack/sheet/plasteel(drop_location(), 4)
qdel(src)
/obj/structure/ai_core/deactivated
- name = "inactive AI"
+ name = "неактивный ИИ"
icon_state = "ai-empty"
anchored = TRUE
state = AI_READY_CORE
diff --git a/code/game/machinery/computer/brigcells.dm b/code/game/machinery/computer/brigcells.dm
index e87afa16c980..b734246e8c51 100644
--- a/code/game/machinery/computer/brigcells.dm
+++ b/code/game/machinery/computer/brigcells.dm
@@ -61,7 +61,7 @@
var/obj/machinery/door_timer/T = locate(ref)
if(T)
T.timer_end()
- T.Radio.autosay("Timer stopped manually from a cell management console.", T.name, "Security")
+ T.Radio.autosay("Таймер остановлен вручную с консоли управления камерами.", T.name, "Security")
return TRUE
return FALSE
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index a902fd306dfd..ce62abcb3990 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -663,7 +663,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(R.fields["id"] == E.fields["id"])
if(status_valid_for_demotion(R.fields["criminal"]))
set_criminal_status(usr, R, SEC_RECORD_STATUS_DEMOTE, reason, scan.assignment)
- Radio.autosay("[scan.registered_name] ([scan.assignment]) has set [tempname] ([temprank]) to demote for: [reason]", name, "Command")
+ Radio.autosay("[scan.registered_name] ([scan.assignment]) назначил [tempname] ([temprank]) на понижение за: [reason]", name, "Command")
message_admins("[key_name_admin(usr)] ([scan.assignment]) has set [tempname] ([temprank]) to demote for: \"[reason]\"")
log_game("[key_name(usr)] ([scan.assignment]) has set \"[tempname]\" ([temprank]) to demote for: \"[reason]\".")
SSjobs.notify_by_name(tempname, "[scan.registered_name] ([scan.assignment]) has ordered your demotion. Report to their office, or the HOP. Reason given: \"[reason]\"")
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 83ce0497dcc7..d418de2bff2a 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -256,7 +256,7 @@
Nuke_request(input, ui.user)
to_chat(ui.user, "Request sent.")
log_game("[key_name(ui.user)] has requested the nuclear codes from Centcomm")
- GLOB.major_announcement.Announce("The codes for the on-station nuclear self-destruction device have been requested by [ui.user]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested", 'sound/AI/nuke_codes.ogg')
+ GLOB.major_announcement.Announce("[ui.user] запросил коды для запуска механизма ядерного самоуничтожения станции. В ближайшее время будет отправлено уведомление о подтверждении или отклонении данного запроса.", "ВНИМАНИЕ: Запрос кода самоуничтожения станции.", 'sound/AI/nuke_codes.ogg')
centcomm_message_cooldown = world.time + 6000 // 10 minutes
setMenuState(ui.user, COMM_SCREEN_MAIN)
@@ -355,13 +355,13 @@
if(params["classified"] != 1) // this uses 1/0 on the js side instead of "true" or "false"
GLOB.major_announcement.Announce(
params["text"],
- new_title = "Central Command Report",
+ new_title = "Сообщение Центрального Командования",
new_subtitle = params["subtitle"],
new_sound = cc_announcement_sounds[params["beepsound"]]
)
print_command_report(params["text"], params["subtitle"])
else
- GLOB.command_announcer.autosay("A classified message has been printed out at all communication consoles.")
+ GLOB.command_announcer.autosay("На всех коммуникационных консолях было распечатано конфиденциальное сообщение.")
print_command_report(params["text"], "Classified: [params["subtitle"]]")
log_and_message_admins("has created a communications report: [params["text"]]")
diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm
index 9da3b2c4e3ad..ab55ad127dfb 100644
--- a/code/game/machinery/computer/law.dm
+++ b/code/game/machinery/computer/law.dm
@@ -1,8 +1,8 @@
#define AIUPLOAD_EMAG_COOLDOWN 60 SECONDS
/obj/machinery/computer/aiupload
- name = "\improper AI upload console"
- desc = "Used to upload laws to the AI."
+ name = "\improper Консоль аплоуда ИИ"
+ desc = "Используется для загрузки законов в ИИ."
icon_screen = "command"
icon_keyboard = "med_key"
circuit = /obj/item/circuitboard/aiupload
@@ -45,18 +45,18 @@
/// checks to ensure there is a selected AI, and that it is on the same Z level
/obj/machinery/computer/aiupload/proc/check_valid_selection(mob/user)
if(!current)//no AI selected
- to_chat(user, "No AI selected. Please choose a target before proceeding with upload.")
+ to_chat(user, "Не выбран ИИ. Пожалуйста, выберите его перед загрузкой законов.")
return FALSE
var/turf/T = get_turf(current)
if(!atoms_share_level(T, get_turf(src))) // off Z level
- to_chat(user, "Unable to establish a connection: You're too far away from the target silicon!")
+ to_chat(user, "Невозможно подключиться: Вы слишком далеко от выбранного силикона!")
return FALSE
return TRUE
/// applies ion-like laws into either the inherent law or true ion law positions due to an emag'd AI upload being used
/obj/machinery/computer/aiupload/proc/apply_emag_laws(mob/user)
if(world.time < cooldown) //if the cooldown isnt over
- to_chat(user, "The program seems to have frozen. It will need some time to process.")
+ to_chat(user, "Программа выглядит зависшей. Ей потребуется некоторое время на обработку.")
return
do_sparks(5, TRUE, src)
found_laws = length(current.laws.inherent_laws)
@@ -103,18 +103,18 @@
/obj/machinery/computer/aiupload/attack_hand(mob/user)
if(stat & NOPOWER)
- to_chat(user, "The upload computer has no power!")
+ to_chat(user, "Консоль аплоуда обесточена!")
return
if(stat & BROKEN)
- to_chat(user, "The upload computer is broken!")
+ to_chat(user, "Консоль аплоуда сломана!")
return
current = select_active_ai(user)
if(!current)
- to_chat(user, "No active AIs detected.")
+ to_chat(user, "Активных ИИ не обнаружено.")
return
- to_chat(user, "[current.name] selected for law changes.")
+ to_chat(user, "[current.name] выбран для смены законов.")
/obj/machinery/computer/aiupload/attack_ghost(user)
return TRUE
@@ -123,8 +123,8 @@
// Why is this not a subtype
/obj/machinery/computer/borgupload
- name = "cyborg upload console"
- desc = "Used to upload laws to Cyborgs."
+ name = "Консоль аплоуда киборгов"
+ desc = "Используется для загрузки законов в киборгов."
icon_screen = "command"
icon_keyboard = "med_key"
circuit = /obj/item/circuitboard/borgupload
@@ -134,11 +134,11 @@
var/obj/item/ai_module/module = used
if(istype(module))
if(!current)//no borg selected
- to_chat(user, "No borg selected. Please chose a target before proceeding with upload.")
+ to_chat(user, "Киборг не выбран. Пожалуйста, выберите цель для загрузки законов.")
return ITEM_INTERACT_COMPLETE
var/turf/T = get_turf(current)
if(!atoms_share_level(T, src))
- to_chat(user, "Unable to establish a connection: You're too far away from the target silicon!")
+ to_chat(user, "Не удалось установить связь: Вы слишком далеко от выбранного синтетика!")
return ITEM_INTERACT_COMPLETE
module.install(src)
return ITEM_INTERACT_COMPLETE
@@ -147,18 +147,18 @@
/obj/machinery/computer/borgupload/attack_hand(mob/user)
if(stat & NOPOWER)
- to_chat(user, "The upload computer has no power!")
+ to_chat(user, "Консоль аплоуда обесточена!")
return
if(stat & BROKEN)
- to_chat(user, "The upload computer is broken!")
+ to_chat(user, "Консоль аплоуда сломана!")
return
current = freeborg(user)
if(!current)
- to_chat(user, "No free cyborgs detected.")
+ to_chat(user, "Свободных боргов не обнаружено.")
return
- to_chat(user, "[current.name] selected for law changes.")
+ to_chat(user, "[current.name] выбран для смены законов.")
/obj/machinery/computer/borgupload/attack_ghost(user)
return TRUE
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 765af9c34c68..054f29150529 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -188,7 +188,7 @@
dir = WEST
base_icon_state = "bodyscanner-open"
var/occupied_icon_state = "bodyscanner"
- var/on_store_message = "has entered long-term storage."
+ var/on_store_message = "был помещен в долгосрочное хранилище."
var/on_store_name = "Cryogenic Oversight"
var/on_enter_occupant_message = "You feel cool air surround you. You go numb as your senses turn inward."
var/allow_occupant_types = list(/mob/living/carbon/human)
@@ -645,9 +645,9 @@
icon_state = "pod_0"
base_icon_state = "pod_0"
occupied_icon_state = "pod_1"
- on_store_message = "has entered robotic storage."
+ on_store_message = "был помещён в роботическое хранилище."
on_store_name = "Robotic Storage Oversight"
- on_enter_occupant_message = "The storage unit broadcasts a sleep signal to you. Your systems start to shut down, and you enter low-power mode."
+ on_enter_occupant_message = "Юнит хранилища посылает вам сигнал сна. Ваши системы отключаются и вы переходите на режим энергосбережения"
console_type = /obj/machinery/computer/cryopod/robot
allow_occupant_types = list(/mob/living/silicon/robot)
disallow_occupant_types = list(/mob/living/silicon/robot/drone)
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 9a815f019b31..8ffc6c263bfe 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -90,13 +90,13 @@
var/datum/data/record/R = find_security_record("name", occupant)
var/timetext = seconds_to_time(timetoset / 10)
- var/announcetext = "Detainee [occupant] ([prisoner_drank]) has been incarcerated for [timetext] for the crime of: '[crimes]'. \
- Arresting Officer: [usr.name].[R ? "" : " Detainee record not found, manual record update required."]"
+ var/announcetext = "Задержанный [occupant] ([prisoner_drank]) был помещен в камеру заключения на [timetext], за преступление: '[crimes]'. \
+ Ответственный офицер: [usr.name].[R ? "" : " Запись о задержанном не найдена, требуется обновление записи вручную."]"
Radio.autosay(announcetext, name, "Security")
// Notify the actual criminal being brigged. This is a QOL thing to ensure they always know the charges against them.
// Announcing it on radio isn't enough, as they're unlikely to have sec radio.
- notify_prisoner("You have been incarcerated for [timetext] for the crime of: '[crimes]'.")
+ notify_prisoner("Вы были заключены в камеру заключения на [timetext], за преступление: '[crimes]'.")
if(prisoner_trank != "unknown" && prisoner_trank != "Assistant")
SSjobs.notify_dept_head(prisoner_trank, announcetext)
@@ -160,7 +160,7 @@
return
if(timing)
if(timeleft() <= 0)
- Radio.autosay("Timer has expired. Releasing prisoner.", name, "Security")
+ Radio.autosay("Время заключения истекло. Освобождение заключенного.", name, "Security")
occupant = CELL_NONE
timer_end() // open doors, reset timer, clear status screen
timing = FALSE
@@ -378,9 +378,9 @@
to_chat(usr, "Cancelled reset: reason field is required.")
return FALSE
releasetime = world.timeofday + timetoset
- var/resettext = isobserver(usr) ? "for: [reset_reason]." : "by [usr.name] for: [reset_reason]."
- Radio.autosay("Prisoner [occupant] had their timer reset [resettext]", name, "Security")
- notify_prisoner("Your brig timer has been reset for: '[reset_reason]'.")
+ var/resettext = isobserver(usr) ? "по причине: '[reset_reason]'" : "офицером [usr.name], по причине: '[reset_reason]'"
+ Radio.autosay("Таймер заключенного [occupant] был сброшен [resettext].", name, "Security")
+ notify_prisoner("Ваш таймер был сброшен по причине: '[reset_reason]'.")
var/datum/data/record/R = find_security_record("name", occupant)
if(istype(R))
R.fields["comments"] += "Autogenerated by [name] on [GLOB.current_date_string] [station_time_timestamp()]
Timer reset [resettext]"
@@ -389,8 +389,8 @@
if("stop")
if(timing)
timer_end()
- var/stoptext = isobserver(usr) ? "from cell control." : "by [usr.name]."
- Radio.autosay("Timer stopped manually [stoptext]", name, "Security")
+ var/stoptext = isobserver(usr) ? "консолью управления камерами." : "офицером [usr.name]."
+ Radio.autosay("Таймер остановлен вручную [stoptext]", name, "Security")
else
. = FALSE
if("flash")
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index fe2ea2e65758..37ccf452fded 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -72,12 +72,12 @@
/obj/machinery/doppler_array/proc/print_explosive_logs(mob/user)
if(!length(logged_explosions))
- atom_say("No logs currently stored in internal database.")
+ atom_say("В данный момент отчеты во внутренней базе данных отсутствуют.")
return
if(active_timers)
to_chat(user, "[src] is already printing something, please wait.")
return
- atom_say("Printing explosive log. Standby...")
+ atom_say("Распечатка отчета. Ожидайте...")
addtimer(CALLBACK(src, PROC_REF(print)), 50)
/obj/machinery/doppler_array/proc/print()
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 28134a989382..31eb3cce761b 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -343,7 +343,7 @@ GLOBAL_LIST_EMPTY(holopads)
var/datum/holocall/HC = I
//Sanity check and skip if no longer valid call
if(!HC.Check())
- atom_say("Call was terminated at remote terminal.")
+ atom_say("Вызов был прерван удаленно.")
continue
if(HC.connected_holopad != src)
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index 5701e7a81c38..9611bd48e052 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
/obj/machinery/requests_console
name = "Requests Console"
- desc = "A console intended to send requests to different departments on the station."
+ desc = "Консоль, предназначанная для отправки запросов в другие отделы станции."
anchored = TRUE
icon = 'icons/obj/terminals.dmi'
icon_state = "req_comp_off"
@@ -104,9 +104,9 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
departmentType = containing_area.request_console_flags
announcementConsole = containing_area.request_console_announces
- announcer.config.default_title = "[department] announcement"
+ announcer.config.default_title = "Оповещение от [department]"
- name = "[department] Requests Console"
+ name = "[department] Requests console"
GLOB.allRequestConsoles += src
if(departmentType & RC_ASSIST)
GLOB.req_console_assistance |= department
@@ -154,7 +154,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
/obj/machinery/requests_console/ui_interact(mob/user, datum/tgui/ui = null)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
- ui = new(user, src, "RequestConsole", "[department] Request Console")
+ ui = new(user, src, "RequestConsole", "Консоль запросов [department]")
ui.open()
/obj/machinery/requests_console/ui_data(mob/user)
@@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
if(!reject_bad_text(params["write"]))
return
recipient = params["write"] //write contains the string of the receiving department's name
- var/new_message = tgui_input_text(usr, "Write your message:", "Awaiting Input", encode = FALSE)
+ var/new_message = tgui_input_text(usr, "Напишите своё сообщение:", "Ожидание ввода", encode = FALSE)
if(isnull(new_message))
reset_message(FALSE)
return
@@ -217,7 +217,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
return TRUE
if("writeAnnouncement")
- var/new_message = tgui_input_text(usr, "Write your message:", "Awaiting Input", message, multiline = TRUE, encode = FALSE)
+ var/new_message = tgui_input_text(usr, "Напишите своё оповещение:", "Ожидание ввода", message, multiline = TRUE, encode = FALSE)
if(isnull(new_message))
return
message = new_message
@@ -276,16 +276,16 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
if("printLabel")
var/error_message
if(!ship_tag_index)
- error_message = "Please select a destination."
+ error_message = "Пожалуйста, выберите пункт назначения."
else if(!msgVerified)
- error_message = "Please verify shipper ID."
+ error_message = "Пожалуйста, проверьте ID отправителя."
else if(world.time < print_cooldown)
- error_message = "Please allow the printer time to prepare the next shipping label."
+ error_message = "Пожалуйста, дайте принтеру время на подготовку следующей транспортировочной маркировки."
if(error_message)
atom_say("[error_message]")
return
print_label(ship_tag_name, ship_tag_index)
- shipping_log.Add(list(list("Shipping Label printed for [ship_tag_name]", "[msgVerified]"))) // List in a list for passing into TGUI
+ shipping_log.Add(list(list("Этикетка напечатана для [ship_tag_name]", "[msgVerified]"))) // List in a list for passing into TGUI
reset_message(TRUE)
//Handle silencing the console
@@ -384,7 +384,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
reminder_timer_id = TIMER_ID_NULL
return
- atom_say("Unread message(s) available.")
+ atom_say("Есть непрочитанные сообщения.")
/obj/machinery/requests_console/proc/print_label(tag_name, tag_index)
var/obj/item/shipping_package/sp = new /obj/item/shipping_package(get_turf(src))
diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm
index c9e42b3434ec..3782eeb3ad28 100644
--- a/code/game/machinery/slotmachine.dm
+++ b/code/game/machinery/slotmachine.dm
@@ -85,33 +85,33 @@
/obj/machinery/economy/slot_machine/proc/spin_slots(userName)
switch(rand(1, 5000))
if(1)
- atom_say("JACKPOT! [userName] has won two thousand credits!")
- GLOB.minor_announcement.Announce("Congratulations to [userName] on winning the Jackpot of TWO THOUSAND CREDITS!", "Jackpot Winner")
- result = "JACKPOT! You win two thousand credits!"
+ atom_say("ДЖЕКПОТ! [userName] выиграл ДВЕ ТЫСЯЧИ КРЕДИТОВ!")
+ GLOB.minor_announcement.Announce("Поздравляем [userName] с выигрышем джекпота в ДВЕ ТЫСЯЧИ КРЕДИТОВ!", "Обладатель джекпота!")
+ result = "ДЖЕКПОТ! Вы выиграли ДВЕ ТЫСЯЧИ КРЕДИТОВ!"
resultlvl = "teal"
win_money(2000, 'sound/goonstation/misc/airraid_loop.ogg')
if(2 to 20)
- atom_say("Big Winner! [userName] has won two hundred credits!")
- result = "You win a two hundred credits!"
+ atom_say("Большой Победитель! [userName] выиграл двести кредитов!")
+ result = "Вы выиграли двести кредитов!"
resultlvl = "green"
win_money(200, 'sound/goonstation/misc/klaxon.ogg')
if(21 to 100)
- atom_say("Winner! [userName] has won a hundred credits!")
- result = "You win a hundred credits!"
+ atom_say("Победитель! [userName] выиграл сто кредитов!")
+ result = "Вы выиграли сто кредитов!"
resultlvl = "green"
win_money(100, 'sound/goonstation/misc/bell.ogg')
if(101 to 500)
- atom_say("Winner! [userName] has won forty credits!")
- result = "You win forty credits!"
+ atom_say("Победитель! [userName] выиграл сорок кредитов!")
+ result = "Вы выиграли сорок кредитов!"
resultlvl = "green"
win_money(40)
if(501 to 1000)
- atom_say("Winner! [userName] has won ten credits!")
- result = "You win ten credits!"
+ atom_say("Победитель! [userName] выиграл десять кредитов!")
+ result = "Вы выиграли десять кредитов!"
resultlvl = "green"
win_money(10)
else
- result = "No luck!"
+ result = "Не повезло!"
resultlvl = "orange"
working = FALSE
icon_state = "slots-off"
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index b1a030c91b9b..66b288e58d22 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -118,10 +118,10 @@
return
if(!check_hub_connection())
- atom_say("Error: Unable to detect hub.")
+ atom_say("Ошибка: Хаб не обнаружен.")
return
if(calibrating)
- atom_say("Error: Calibration in progress. Stand by.")
+ atom_say("Ошибка: Выполняется калибровка. Ожидайте.")
return
. = TRUE
@@ -140,7 +140,7 @@
if(!advanced_beacon_locking)
var/turf/tmpTarget = locate(text2num(params["x"]), text2num(params["y"]), text2num(params["z"]))
if(!isturf(tmpTarget))
- atom_say("No valid targets available.")
+ atom_say("Отсутствуют доступные пункты назначения.")
return
target = tmpTarget
else
@@ -151,13 +151,13 @@
gate_helper()
if("calibrate")
if(!target)
- atom_say("Error: No target set to calibrate to.")
+ atom_say("Ошибка: Отсутствует пункт назначения для калибровки.")
return
if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3)
- atom_say("Hub is already calibrated.")
+ atom_say("Хаб уже откалиброван.")
return
- atom_say("Processing hub calibration to target...")
+ atom_say("Калибровка хаба до пункта назначения...")
calibrating = TRUE
addtimer(CALLBACK(src, PROC_REF(calibrateCallback)), 50 * (3 - power_station.teleporter_hub.accurate)) //Better parts mean faster calibration
if("advanced_beacon_locking")
@@ -179,9 +179,9 @@
calibrating = FALSE
if(check_hub_connection())
power_station.teleporter_hub.calibrated = TRUE
- atom_say("Calibration complete.")
+ atom_say("Калибровка завершена.")
else
- atom_say("Error: Unable to detect hub.")
+ atom_say("Ошибка: Хаб не обнаружен.")
/obj/machinery/computer/teleporter/proc/check_hub_connection()
if(!power_station)
diff --git a/code/game/machinery/vendors/contraband_vendors.dm b/code/game/machinery/vendors/contraband_vendors.dm
index 88a28d0a99c3..0d64c4c97230 100644
--- a/code/game/machinery/vendors/contraband_vendors.dm
+++ b/code/game/machinery/vendors/contraband_vendors.dm
@@ -26,19 +26,19 @@
/obj/machinery/economy/vending/syndicigs
name = "\improper Suspicious Cigarette Machine"
desc = "Smoke 'em if you've got 'em."
- slogan_list = list("Space cigs taste good like a cigarette should.",
- "I'd rather toolbox than switch.",
- "Smoke!",
- "Don't believe the reports - smoke today!")
-
- ads_list = list("Probably not bad for you!",
- "Don't believe the scientists!",
- "It's good for you!",
- "Don't quit, buy more!",
- "Smoke!",
- "Nicotine heaven.",
- "Best cigarettes since 2150.",
- "Award-winning cigs.")
+ slogan_list = list("Космосигареты хороши на вкус, какими они и должны быть.",
+ "Курение убивает, но не сегодня!",
+ "Курите!",
+ "Не верьте исследованиям - курите сегодня!")
+
+ ads_list = list("Наверняка не вредно!",
+ "Не верьте ученым!",
+ "На здоровье!",
+ "Не бросайте курить, купите ещё!",
+ "Курите!",
+ "Никотиновый рай.",
+ "Лучшие сигареты с 2150 года.",
+ "Сигареты с множеством наград.")
category = VENDOR_TYPE_RECREATION
vend_delay = 34
@@ -51,19 +51,19 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/economy/vending/wallmed/syndicate, 32
/obj/machinery/economy/vending/syndisnack
name = "\improper Getmore Chocolate Corp"
desc = "A modified snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars."
- slogan_list = list("Try our new nougat bar!",
- "Twice the calories for half the price!")
-
- ads_list = list("The healthiest!",
- "Award-winning chocolate bars!",
- "Mmm! So good!",
- "Oh my god it's so juicy!",
- "Have a snack.",
- "Snacks are good for you!",
- "Have some more Getmore!",
- "Best quality snacks straight from mars.",
- "We love chocolate!",
- "Try our new jerky!")
+ slogan_list = list("Попробуйте наш новый батончик с нугой!",
+ "Вдвое больше калорий за полцены!")
+
+ ads_list = list("Самые полезные!",
+ "Удостоенные наград шоколадные плитки!",
+ "Ммм! Как вкусно!",
+ "Боже мой, какой сочный!",
+ "Перекуси!",
+ "Закуски полезны для вас!",
+ "Запаситесь закусками Getmore!",
+ "Самые качественные закуски прямо с Марса.",
+ "Мы любим шоколад!",
+ "Попробуйте наше новое вяленое мясо!")
icon_state = "snack"
icon_lightmask = "nutri"
@@ -108,17 +108,17 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/economy/vending/wallmed/syndicate, 32
icon_state = "liberationstation"
icon_lightmask = "liberationstation"
req_access = list(ACCESS_SECURITY)
- slogan_list = list("Liberation Station: Your one-stop shop for all things second amendment!",
- "Be a patriot today, pick up a gun!",
- "Quality weapons for cheap prices!",
- "Better dead than red!")
+ slogan_list = list("Liberation Station: Ваш универсальный магазин для всех вещей, связанных со второй поправкой!",
+ "Будь сегодня патриотом, возьми оружие!",
+ "Качественное оружие по низким ценам!",
+ "Лучше мёртвый, чем красный!")
- ads_list = list("Float like an astronaut, sting like a bullet!",
- "Express your second amendment today!",
- "Guns don't kill people, but you can!",
- "Who needs responsibilities when you have guns?")
+ ads_list = list("Пари как космонавт, жаль как пуля!",
+ "Воспользуйтесь второй поправкой уже сегодня!",
+ "Оружие не убивает людей, но вы можете!",
+ "Кому нужна ответственность, когда есть оружие?")
- vend_reply = "Remember the name: Liberation Station!"
+ vend_reply = "Запомни нас: Liberation Station!"
products = list(/obj/item/gun/projectile/automatic/pistol/deagle/gold = 2,
/obj/item/gun/projectile/automatic/pistol/deagle/camo = 2,
/obj/item/gun/projectile/automatic/pistol/m1911 = 2,
diff --git a/code/game/machinery/vendors/departmental_vendors.dm b/code/game/machinery/vendors/departmental_vendors.dm
index cf2885665bfe..d8924f1b0507 100644
--- a/code/game/machinery/vendors/departmental_vendors.dm
+++ b/code/game/machinery/vendors/departmental_vendors.dm
@@ -128,14 +128,14 @@
/obj/machinery/economy/vending/hydronutrients
name = "\improper NutriMax"
desc = "A plant nutrients vendor."
- slogan_list = list("Aren't you glad you don't have to fertilize the natural way?",
- "Now with 50% less stink!","Plants are people too!")
+ slogan_list = list("Вам не надо удобрять почву естественным путём — разве это не чудесно?",
+ "Теперь на 50% меньше вони!","Растения тоже люди!")
- ads_list = list("We like plants!",
- "Don't you want some?",
- "The greenest thumbs ever.",
- "We like big plants.",
- "Soft soil...")
+ ads_list = list("Мы любим растения!",
+ "Может сами примете?",
+ "Самые зелёные кнопки на свете.",
+ "Мы любим большие растения.",
+ "Мягкая почва...")
icon_state = "nutri"
icon_deny = "nutri_deny"
@@ -165,14 +165,14 @@
/obj/machinery/economy/vending/hydroseeds
name = "\improper MegaSeed Servitor"
desc = "When you need seeds fast!"
- slogan_list = list("THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!",
- "Hands down the best seed selection on the station!",
- "Also certain mushroom varieties available, more for experts! Get certified today!")
+ slogan_list = list("ЗДЕСЬ ЖИВУТ СЕМЕНА! ВОЗЬМИТЕ СЕБЕ НЕМНОГО!",
+ "Лучший выбор семян на станции!",
+ "Доступны разнообразные сорта грибов для специалистов! Станьте им уже сегодня!")
- ads_list = list("We like plants!",
- "Grow some crops!",
- "Grow, baby, growww!",
- "Aw h'yeah son!")
+ ads_list = list("Мы любим растения!",
+ "Вырасти урожай!",
+ "Расти, малыш, расти-и-и-и!",
+ "Ды-а, сына!")
icon_state = "seeds"
icon_lightmask = "seeds"
diff --git a/code/game/machinery/vendors/generic_vendors.dm b/code/game/machinery/vendors/generic_vendors.dm
index 08923db369e1..621cbbefa7bb 100644
--- a/code/game/machinery/vendors/generic_vendors.dm
+++ b/code/game/machinery/vendors/generic_vendors.dm
@@ -69,25 +69,25 @@
/obj/item/reagent_containers/drinks/bottle/fernet = 5)
vend_delay = 15
- slogan_list = list("I hope nobody asks me for a bloody cup o' tea...",
- "Alcohol is humanity's friend. Would you abandon a friend?",
- "Quite delighted to serve you!",
- "Is nobody thirsty on this station?")
-
- ads_list = list("Drink up!",
- "Booze is good for you!",
- "Alcohol is humanity's best friend.",
- "Quite delighted to serve you!",
- "Care for a nice, cold beer?",
- "Nothing cures you like booze!",
- "Have a sip!","Have a drink!",
- "Have a beer!","Beer is good for you!",
- "Only the finest alcohol!",
- "Best quality booze since 2053!",
- "Award-winning wine!",
- "Maximum alcohol!",
- "Man loves beer.",
- "A toast for progress!")
+ slogan_list = list("Надеюсь, никто не попросит меня о чёртовой кружке чая...",
+ "Алкоголь - друг человека. Вы же не бросите друга?",
+ "Очень рад вас обслужить!",
+ "Никто на этой станции не хочет выпить?")
+
+ ads_list = list("Выпьем!",
+ "Бухло пойдёт вам на пользу!",
+ "Алкоголь - друг человека.",
+ "Очень рад вас обслужить!",
+ "Хотите отличного холодного пива?",
+ "Ничто так не лечит, как бухло!",
+ "Пригубите!","Выпейте!",
+ "Возьмите пивка!","Пиво пойдёт вам на пользу!",
+ "Только лучший алкоголь!",
+ "Бухло лучшего качества с 2053 года!",
+ "Вино со множеством наград!",
+ "Максимум алкоголя!",
+ "Твоё любимое пиво.",
+ "Тост: «За прогресс!»")
refill_canister = /obj/item/vending_refill/boozeomat
@@ -396,12 +396,12 @@
icon_state = "clothes"
icon_lightmask = "base_drobe"
icon_panel = "drobe"
- slogan_list = list("Dress for success!",
- "Prepare to look swagalicious!",
- "Look at all this free swag!",
- "Why leave style up to fate? Use the ClothesMate!")
+ slogan_list = list("Одевайся и врывайся!",
+ "Готовься выглядеть воскрутительно!",
+ "Посмотрите на эти халявные шмотки!",
+ "Зачем бросать стиль на волю судьбы? Воспользуйтесь ClothesMate!")
vend_delay = 15
- vend_reply = "Thank you for using the ClothesMate!"
+ vend_reply = "Спасибо за использование ClothesMate!"
category = VENDOR_TYPE_CLOTHING
products = list(/obj/item/clothing/suit/ianshirt = 2,
/obj/item/clothing/under/misc/overalls = 2,
@@ -584,10 +584,10 @@
name = "\improper MagiVend"
desc = "A magic vending machine."
icon_state = "MagiVend"
- slogan_list = list("Sling spells the proper way with MagiVend!",
- "Be your own Houdini! Use MagiVend!")
+ slogan_list = list("Колдуйте правильно с помощью MagiVend!",
+ "Станьте сами себе Гудини! Используйте MagiVend!")
vend_delay = 15
- vend_reply = "Have an enchanted evening!"
+ vend_reply = "Волшебного вечера!"
category = VENDOR_TYPE_CLOTHING
ads_list = list("FJKLFJSD",
"AJKFLBJAKL",
@@ -627,10 +627,10 @@
icon_state = "theater"
icon_lightmask = "theater"
icon_deny = "theater_deny"
- slogan_list = list("Dress for success!",
- "Suited and booted!",
- "It's show time!",
- "Why leave style up to fate? Use AutoDrobe!")
+ slogan_list = list("Одевайся и врывайся!",
+ "Одетый и обутый!",
+ "Время представления!",
+ "Зачем бросать стиль на волю судьбы? Воспользуйтесь AutoDrobe!")
vend_delay = 15
vend_reply = "Thank you for using AutoDrobe!"
@@ -878,8 +878,8 @@
/obj/machinery/economy/vending/sustenance
name = "\improper Sustenance Vendor"
desc = "A vending machine which vends food, as required by section 47-C of the NT's Prisoner Ethical Treatment Agreement."
- slogan_list = list("Enjoy your meal.",
- "Enough calories to support strenuous labor.")
+ slogan_list = list("Наслаждайся своей стряпнёй.",
+ "Достаточно калорий чтоб не сдохнуть.")
ads_list = list("The healthiest!",
"Award-winning chocolate bars!",
@@ -930,19 +930,19 @@
/obj/machinery/economy/vending/snack
name = "\improper Getmore Chocolate Corp"
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars."
- slogan_list = list("Try our new nougat bar!",
- "Twice the calories for half the price!")
-
- ads_list = list("The healthiest!",
- "Award-winning chocolate bars!",
- "Mmm! So good!",
- "Oh my god it's so juicy!",
- "Have a snack.",
- "Snacks are good for you!",
- "Have some more Getmore!",
- "Best quality snacks straight from mars.",
- "We love chocolate!",
- "Try our new jerky!")
+ slogan_list = list("Попробуйте наш новый батончик с нугой!",
+ "Вдвое больше калорий за полцены!")
+
+ ads_list = list("Самые полезные!",
+ "Удостоенные наград шоколадные плитки!",
+ "Ммм! Как вкусно!",
+ "Боже мой, какой сочный!",
+ "Перекуси!",
+ "Закуски полезны для вас!",
+ "Запаситесь закусками Getmore!",
+ "Самые качественные закуски прямо с Марса.",
+ "Мы любим шоколад!",
+ "Попробуйте наше новое вяленое мясо!")
icon_state = "snack"
icon_lightmask = "nutri"
@@ -986,10 +986,10 @@
/obj/machinery/economy/vending/chinese
name = "\improper Mr. Chang"
desc = "A self-serving Chinese food machine, for all your Chinese food needs."
- slogan_list = list("Taste 5000 years of culture!",
- "Mr. Chang, approved for safe consumption in over 10 sectors!",
- "Chinese food is great for a date night, or a lonely night!",
- "You can't go wrong with Mr. Chang's authentic Chinese food!")
+ slogan_list = list("Попробуйте 5000 лет культуры!",
+ "Мистер Чанг, одобрен для безопасного потребления в более чем 10 секторах!",
+ "Китайская кухня отлично подходит для вечернего свидания или одинокого вечера!",
+ "Вы не ошибетесь, если попробуете настоящую китайскую кухню от мистера Чанга!")
icon_state = "chang"
icon_lightmask = "chang"
@@ -1019,14 +1019,14 @@
icon_state = "Cola_Machine"
icon_lightmask = "Cola_Machine"
icon_panel = "thin_vendor"
- slogan_list = list("Robust Softdrinks: More robust than a toolbox to the head!")
- ads_list = list("Refreshing!",
- "Hope you're thirsty!",
- "Over 1 million drinks sold!",
- "Thirsty? Why not cola?",
- "Please, have a drink!",
- "Drink up!",
- "The best drinks in space.")
+ slogan_list = list("Робаст Софтдринкс: крепче, чем тулбоксом по голове!")
+ ads_list = list("Освежает!",
+ "Надеюсь, вас одолела жажда!",
+ "Продано больше миллиона бутылок!",
+ "Хотите пить? Почему бы не взять колы?",
+ "Пей на здоровье!",
+ "Освежись!",
+ "Лучшие напитки в космосе.")
category = VENDOR_TYPE_DRINK
products = list(/obj/item/reagent_containers/drinks/cans/cola = 10,
@@ -1056,10 +1056,10 @@
/obj/machinery/economy/vending/artvend
name = "\improper ArtVend"
desc = "A vending machine for art supplies."
- slogan_list = list("Stop by for all your artistic needs!",
- "Color the floors with crayons, not blood!",
- "Don't be a starving artist, use ArtVend. ",
- "Don't fart, do art!")
+ slogan_list = list("Решение для всех ваших творческих нужд!",
+ "Окрашивайте полы мелками, а не кровью!",
+ "Не будьте голодающим художником, используйте ArtVend.",
+ "Не перди, твори!")
ads_list = list("Just like Kindergarten!",
"Now with 1000% more vibrant colors!",
@@ -1145,11 +1145,11 @@
/obj/machinery/economy/vending/crittercare
name = "\improper CritterCare"
desc = "A vending machine for pet supplies."
- slogan_list = list("Stop by for all your animal's needs!",
- "Cuddly pets deserve a stylish collar!",
- "Pets in space, what could be more adorable?",
- "Freshest fish eggs in the system!",
- "Rocks are the perfect pet, buy one today!")
+ slogan_list = list("Всё необходимое для ваших питомцев!",
+ "Милые питомцы заслуживают стильного ошейника!",
+ "Космические питомцы, что может быть очаровательнее?",
+ "Свежайшая рыбья икра в секторе!",
+ "Камни - идеальные питомцы, купите уже сегодня!")
ads_list = list("House-training costs extra!",
"Now with 1000% more cat hair!",
@@ -1203,19 +1203,19 @@
/obj/machinery/economy/vending/cigarette
name = "\improper ShadyCigs Deluxe"
desc = "If you want to get cancer, might as well do it in style."
- slogan_list = list("Space cigs taste good like a cigarette should.",
- "I'd rather toolbox than switch.",
- "Smoke!",
- "Don't believe the reports - smoke today!")
-
- ads_list = list("Probably not bad for you!",
- "Don't believe the scientists!",
- "It's good for you!",
- "Don't quit, buy more!",
- "Smoke!",
- "Nicotine heaven.",
- "Best cigarettes since 2150.",
- "Award-winning cigs.")
+ slogan_list = list("Космосигареты хороши на вкус, какими они и должны быть.",
+ "Курение убивает, но не сегодня!",
+ "Курите!",
+ "Не верьте исследованиям - курите сегодня!")
+
+ ads_list = list("Наверняка не вредно!",
+ "Не верьте ученым!",
+ "На здоровье!",
+ "Не бросайте курить, купите ещё!",
+ "Курите!",
+ "Никотиновый рай.",
+ "Лучшие сигареты с 2150 года.",
+ "Сигареты с множеством наград.")
vend_delay = 34
icon_state = "cigs"
@@ -1285,14 +1285,14 @@
/obj/machinery/economy/vending/cigarette/beach
name = "\improper ShadyCigs Ultra"
desc = "Now with extra premium products!"
- slogan_list = list("Turn on, tune in, drop out!",
- "Better living through chemistry!",
- "Toke!",
- "Don't forget to keep a smile on your lips and a song in your heart!")
+ slogan_list = list("Включи, настрой, получи!",
+ "С химией жить веселей!",
+ "Затянитесь!",
+ "Сохраняй улыбку на устах и песню в своём сердце!")
- ads_list = list("Probably not bad for you!",
- "Dope will get you through times of no money better than money will get you through times of no dope!",
- "It's good for you!")
+ ads_list = list("Наверняка не вредно!",
+ "Допинг проведёт через безденежье лучше, чем деньги через бездопингье!",
+ "На здоровье!")
products = list(/obj/item/clothing/mask/cigarette/cigar = 6,
/obj/item/clothing/mask/cigarette/cigar/cohiba = 6,
@@ -1366,7 +1366,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/economy/vending/wallmed, 32, 32)
/obj/machinery/economy/vending/cart
name = "\improper PTech"
desc = "Cartridges for PDA's."
- slogan_list = list("Carts to go!")
+ slogan_list = list("Карточки в дорогу!")
icon_state = "cart"
icon_lightmask = "med"
diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm
index bbab6fe3e942..3ac947a9ef58 100644
--- a/code/game/mecha/combat/durand.dm
+++ b/code/game/mecha/combat/durand.dm
@@ -1,5 +1,5 @@
/obj/mecha/combat/durand
- desc = "A heavily armored exosuit designed for front-line combat."
+ desc = "Тяжело бронированный экзокостюм, разработанный для боевых действий на передовой."
name = "Durand Mk. II"
icon_state = "durand"
initial_icon = "durand"
@@ -30,15 +30,15 @@
/obj/mecha/combat/durand/examine_more(mob/user)
. = ..()
- . += "A durable heavyweight combat mech designed and produced by Defiance Arms. \
- The Durand is an outdated design among Defiance's line of battlemechs and was initially created to fulfill the role of a combat spearhead, breaking into enemy combat formations. \
- Supplanted by newer, more advanced models, these old machines found themselves on the open market and are popular among corporations, private security firms, and planetary militia."
+ . += "Надежный тяжелый боевой робот, разработанный и произведенный Defiance Arms. \
+ Дюранд является устаревшей моделью среди боевых мехов Defiance Arms и изначально создавался для прорыва обороны противника. \
+ Вытесненные более новыми, более совершенными моделями, эти старые экзокостюмы оказались на открытом рынке и пользуются популярностью среди корпораций, частных охранных фирм и планетарной милиции."
. += ""
- . += "Able to bear a wide array of heavy weapons and defensive tools, Nanotrasen found a use for the Durand as a machine to counter biohazards and hostile alien lifeforms, using it to secure new research installations or to fend off hostile fauna and bioforms. \
- As with all station-side mechs, Nanotrasen has purchased the license to produce the Durand in their facilities."
+ . += "Дюранд способен нести широкий спектр тяжелого оружия и защитных инструментов, потому Nanotrasen использует его в качестве машины для противодействия биологическим опасностям, враждебным инопланетным формам жизни, а так же для защиты новых исследовательских станций или для отражения враждебной фауны и флоры. \
+ Как в случаях со всеми станционными мехами, Nanotrasen приобрела лицензию на производство Дюранда на своих предприятиях."
/obj/mecha/combat/durand/old
- desc = "A retired, third-generation combat exosuit designed by Defiance Arms. Originally developed to combat hostile alien lifeforms"
+ desc = "Списанный экзокостюм третьего поколения, разработанный компанией Defiance Arms для боевых действий. Изначально создан для борьбы с враждебными инопланетными формами жизни."
name = "Old Durand"
icon_state = "old_durand"
initial_icon = "old_durand"
@@ -55,8 +55,8 @@
/obj/mecha/combat/durand/old/examine_more(mob/user)
..()
. = list()
- . += "A relic of a mech, once produced by Defiance Arms in the decade of 2470. \
- It is now sought after by collectors and museums alike and has found its way into the hands of many a black market over the decades since its later versions replaced it."
+ . += "Настоящая реликвия среди мехов, когда-то произведенная Defiance Arms в 2470-х годах. \
+ Сейчас его ищут как коллекционеры, так и музеи, и за десятилетия, прошедшие с тех пор, как его заменили более поздние версии, он попал в руки многих черных рынков."
. += ""
- . += "Built initially to break into and destroy Xenomorph infestations, bigger and better war machines exist. \
- But many still uphold this version of the Durand as an unstoppable classic, and finding one intact and functional has become increasingly rare."
+ . += "Созданные изначально для уничтожения нашествий ксеноморфов, существуют более крупные и эффективные боевые экзокостюмы. \
+ Но многие до сих пор считают эту версию Дюранда непреодолимой классикой, и найти такую неповрежденную и функциональную модель становится все сложнее."
diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm
index a40907d6e53e..b675f78c6120 100644
--- a/code/game/mecha/combat/gygax.dm
+++ b/code/game/mecha/combat/gygax.dm
@@ -1,5 +1,5 @@
/obj/mecha/combat/gygax
- desc = "A lightweight security exosuit. Popular among private and corporate security."
+ desc = "Легкий боевой экзокостюм. Популярен среди частных и корпоративных служб безопасности"
name = "Gygax"
icon_state = "gygax"
initial_icon = "gygax"
@@ -35,16 +35,16 @@
/obj/mecha/combat/gygax/examine_more(mob/user)
. = ..()
- . += "A light, fast and cheap combat mech designed and produced by Shellguard Munitions. \
- Originally developed as a mobile flanker for open combat scenarios, a substantial flaw in the mech's Leg Overdrive systems caused poor sales. \
- When using this system, the legs of the Gygax are prone to overheating and damaging the rest of the machine, leading overzealous pilots to harm themselves more than the enemy."
+ . += "Легкий, быстрый и дешевый боевой экзокостюм, разработанный и произведенный Shellguard Munitions. \
+ Первоначально разработан как мобильный мех для сценариев открытого боя, однако существенный недостаток в системе ускорения ног привёл к плохим продажам. \
+ При использовании этой системы ноги Гигакса склонны к перегреву и повреждению остальной части экзокостюма, в результате чего чрезмерно усердные пилоты наносят больше вреда себе, чем противнику."
. += ""
- . += "Despite this flaw, Shellguard was able to reconsider the use of the mech and instead marketed it as a civil defence and policing mech. \
- Popularity soared, especially among corporations like Nanotrasen, who were seeking a light, fast, cheap design to use to equip their security teams. \
- As with all station-side mechs, Nanotrasen has purchased the license to produce the Gygax in their facilities."
+ . += "Несмотря на этот недостаток, Shellguard Munitions смогли пересмотреть использование этого робота и начали рекламировать его как экзокостюм для гражданской обороны и полиции. \
+ Популярность резко возросла, особенно среди таких корпораций, как Nanotrasen, которые искали легкую, быструю и дешевую конструкцию для оснащения своих служб безопасности. \
+ Как в случаях со всеми станционными мехами, Nanotrasen приобрела лицензию на производство Гигакса на своих предприятиях."
/obj/mecha/combat/gygax/dark
- desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications."
+ desc = "Легкий экзокостюм, окрашенный в темные тона. Эта модель, похоже, имеет некоторые модификации."
name = "Dark Gygax"
icon_state = "darkgygax"
initial_icon = "darkgygax"
@@ -82,8 +82,8 @@
/obj/mecha/combat/gygax/dark/examine_more(mob/user)
..()
. = list()
- . += "A light, fast and cheap combat mech designed and produced by Shellguard Munitions, though this one appears to be modified. \
- With minor alterations to the loadout, armor, and a slick black paint job, this variant strikes a menacing silhouette, its owner clearly being someone you should not mess with."
+ . += "Легкий, быстрый и дешевый боевой экзокостюм, разработанный и произведенный Shellguard Munitions, хотя он выглядит модифицированным. \
+ С небольшими изменениями в снаряжении, броне и гладкой черной окраске этот вариант выглядит угрожающе, а его владелец явно не из тех, с кем вам следует связываться."
. += ""
- . += "Despite the flaws of the base model, this modified Gygax has no trouble being a speedy, dangerous killing machine. \
- Alterations such as this are common amongst fringe users and outlaw groups, and the upgrades are most certainly illegal. Don't cut yourself."
+ . += "Несмотря на недостатки базовой модели, этот модифицированный Гигакс является быстрой и опасной машиной для убийств. \
+ Подобные модели распространены среди преступных группировок, и модификации, безусловно, являются незаконными."
diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm
index 0478f0f904bf..66e1a3b10a9b 100644
--- a/code/game/mecha/combat/honker.dm
+++ b/code/game/mecha/combat/honker.dm
@@ -1,5 +1,5 @@
/obj/mecha/combat/honker
- desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!"
+ desc = "Созданный компанией \"Tyranny of Honk, INC\", этот экзокостюм предназначен для мощной поддержки клоунов. Используется для распространения веселья и радости жизни. ХОНК!"
name = "H.O.N.K"
icon_state = "honker"
initial_icon = "honker"
@@ -140,8 +140,8 @@
/obj/mecha/combat/honker/examine_more(mob/user)
. = ..()
- . += "A cheerful, colorful modification of a Durand chassis, the Honk mech is designed as heavy laughterfield support for producing mass honking casualties. \
- Built and perfected by some of the most skilled Clowns ever known to the galaxy, with materials and labor provided by Donk Co, the Honk has somehow managed to have its design smuggled aboard almost ever Nanotrasen station, to the imminent laughter (screams) and joy (despair) of it's crew!"
+ . += "Веселая и яркая модификация Дюранда Х.О.Н.К. спроектирована для поддержки весёлой атмосферы. \
+ Построенный и усовершенствованный одними из самых опытных клоунов, когда-либо известных в галактике, с использованием материалов и рабочей силы, предоставленных Donk Co, Х.О.Н.К. каким-то образом удалось проникнуть на борт почти каждой станции Nanotrasen, для распространения неминуемого смеха (крика) и радости (страданий) всему экипажу!"
. += ""
- . += "Equipped with a massive HoNkER BlAsT 5000 horn and long range mortars capable of firing both slippery banana peels and dangerous mousetraps, the Honk is well equipped to provide a Clown with everything they need to 'entertain' a station's crew, and to draw the ire of any nearby Security. \
- Honk!"
+ . += "Оборудованный массивным гудком ХоНКоВзРыВ 5000 и минометами дальнего действия, способными стрелять как скользкими банановыми кожурами, так и опасными мышеловками, Х.О.Н.К. хорошо оснащен для обеспечения клоуна всем необходимым, чтобы «развлечь» экипаж станции и вызвать гнев сотрудников службы безопасности. \
+ ХОНК!"
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index 14176514fbcf..b43bf076a3b7 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -1,5 +1,5 @@
/obj/mecha/combat/marauder
- desc = "Heavy-duty combat exosuit, developed after the Durand model. Rarely found among civilian populations."
+ desc = "Тяжелый боевой экзокостюм, разработанный на основе модели Дюранд. Редко встречается среди гражданского населения."
name = "Marauder"
icon_state = "marauder"
initial_icon = "marauder"
@@ -50,15 +50,15 @@
/obj/mecha/combat/marauder/examine_more(mob/user)
. = ..()
- . += "The newest combat mech developed by Defiance Arms, the Marauder is now their mainline offering in the galactic arms market. \
- Based on the earlier Durand chassis, the Marauder is a high-tech weapon of war and destruction, fulfilling the spearhead role of Defiance's earlier design while supporting more firepower than ever before."
+ . += "Новейший боевой экзокостюм, разработанный Defiance Arms, Мародёр теперь является их основным продуктом на галактическом рынке оружия. \
+ Мародёр представляет собой высокотехнологичное оружие войны и разрушения, выполняя те же задачи, что и Дюранд, но обеспечивая при этом ещё большую огневую мощь."
. += ""
- . += "The Marauder is rarely seen in civilian hands; instead, it is marketed towards military and mercenary forces. \
- Recently, Defiance has opened sales to more customers; This includes Nanotrasen, who uses it to equip their ERT dvision."
+ . += "Мародер редко можно увидеть в руках гражданских лиц, вместо этого он продается военным и наемникам. \
+ Недавно Defiance открыла продажи большему количеству клиентов, в их число входит компания Nanotrasen, которая использует его для оснащения своего подразделения ОБР."
/obj/mecha/combat/marauder/ares
name = "Ares"
- desc = "Heavy-duty combat exosuit, adapted from rejected early versions of the Marauder to serve as a biohazard containment exosuit. This model, albeit rare, can be found among civilian populations."
+ desc = "Сверхмощный боевой экзокостюм, адаптированный из ранних версий Мародера, используется для сдерживания биологической опасности. Эту модель, пусть и редко, но можно встретить среди гражданского населения."
icon_state = "ares"
initial_icon = "ares"
operation_req_access = list(ACCESS_SECURITY)
@@ -86,14 +86,14 @@
/obj/mecha/combat/marauder/ares/examine_more(mob/user)
..()
. = list()
- . += "Developed from earlier Durand prototypes that never saw production, the Ares is produced by Defiance Arms and marketed as the final word in biohazard containment and protection. \
- Heavily armed and armored, and perhaps a little out of date, the Ares is built from the ground up to destroy biological incursions, whatever those may be."
+ . += "Разработанный на основе более ранних прототипов Дюранда, Арес производится компанией Defiance Arms и позиционируется как последнее слово в сдерживании и защите от биологических опасностей. \
+ Тяжело вооруженный и бронированный, пусть и немного устаревший, Арес создан для уничтожения биологических угроз, какими бы они ни были."
. += ""
- . += "Defiance does not sell the license for the Ares to be produced, and as such, it is rarer than most combat mechs, but is more commonly seen among civilian markets compared to their mainline Marauder chassis. \
- Nanotrases supports a small stable of Ares battlemechs to be used in times of dire emergency."
+ . += "Defiance Arms не продаёт лицензию на производство Арес, и поэтому он встречается реже, чем большинство боевых мехов. \
+ Nanotrasen имеет небольшую группу боевых мехов Арес, которые используются лишь в чрезвычайных ситуациях."
/obj/mecha/combat/marauder/seraph
- desc = "Heavy-duty command-type exosuit. This is a custom model, utilized only by high-ranking personnel."
+ desc = "Тяжелый командирский экзокостюм. Это уникальная модель, используемая исключительно высокопоставленным персоналом."
name = "Seraph"
icon_state = "seraph"
initial_icon = "seraph"
@@ -130,14 +130,14 @@
/obj/mecha/combat/marauder/seraph/examine_more(mob/user)
..()
. = list()
- . += "In the field, Nanotrasen teams often needed a command and control unit that could assist where comms failed, and thus, they created a retrofit of the Marauder. \
- This new Seraph variant would serve as a command model, with enhanced comms and command capabilities, but would otherwise be incredibly rare."
+ . += "В полевых условиях боевым группам Nanotrasen часто требовался пункт коммуникации и командования, который мог бы помочь в случае сбоя связи, и поэтому они создали модификацию Мародёра. \
+ Серафим служит командирской моделью с расширенными возможностями связи и командования, невероятно редок среди гражданских."
. += ""
- . += "Due to the rarity of the Seraph, it can be assumed that things are well and truly fucked if one is seen operating. \
- Deployed only in the direst of emergencies, it will inevitably be the lynchpin of any defense or assault."
+ . += "Поскольку Серафим встречается редко, можно предположить, что увидеть его в действии - это хороший знак. \
+ Используемый только в самых чрезвычайных ситуациях, он неизбежно станет стержнем любой защиты или нападения."
/obj/mecha/combat/marauder/mauler
- desc = "Heavy-duty combat exosuit, modified with illegal technology and weapons."
+ desc = "Сверхмощный боевой экзокостюм, модифицированный нелегальными технологиями и оружием."
name = "Mauler"
icon_state = "mauler"
initial_icon = "mauler"
@@ -167,8 +167,8 @@
/obj/mecha/combat/marauder/mauler/examine_more(mob/user)
..()
. = list()
- . += "A bulky, brutish combat mech painted a deep, matte black, highlighted with a menacing red; the Mauler is an illegal retrofit of Defiance's Marauder chassis. \
- Armed to the teeth with various weapons and armored more thickly than some main battle tanks, this mechanical monstrosity is incredibly rare, and little is known about who makes them or why they exist."
+ . += "Громоздкий, брутальный боевой экзокостюм, окрашенный в глубокий матовый черный цвет с угрожающим красным оттенком. Маулер представляет собой незаконную модификацию модели Мародёр от Defiance Arms. \
+Вооруженый до зубов различным вооружением и имеющий более толстую броню, чем некоторые основные боевые экзокостюмы, это механическое чудовище встречается невероятно редко, и мало что известно о том, кто его производит и зачем оно существует."
. += ""
- . += "The few confirmed sightings have recently been in the hands of the Gorlex Marauders, a group of hostile pirates with suspected ties to the Syndicate. \
- The Mauler poses a severe threat to any force and should never be taken lightly."
+ . += "Было замечено несколько Маулеров в руках Мародеров Горлекса, группы враждебных пиратов, подозреваемых в связях с Синдикатом. \
+ Маулер представляет серьезную угрозу для любой силы, и к нему никогда не следует относиться легкомысленно."
diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm
index 7188b0fd10e1..96ce6f66b9bb 100644
--- a/code/game/mecha/combat/phazon.dm
+++ b/code/game/mecha/combat/phazon.dm
@@ -1,6 +1,6 @@
/obj/mecha/combat/phazon
name = "Phazon"
- desc = "An experimental, phase-shifting exosuit developed by Nanotrasen's research division."
+ desc = "Экспериментальный экзокостюм разработанный Nanotrasen, обладающий способностью фазового сдвига."
icon_state = "phazon"
initial_icon = "phazon"
step_in = 2
@@ -50,10 +50,10 @@
/obj/mecha/combat/phazon/examine_more(mob/user)
. = ..()
- . += "The Phazon is an experimental Nanotrasen combat design, using a Bluespace Anomaly Core as its heart. \
- This odd crystal allows the mech to phase part way out of reality, allowing it to pass through walls, floors, and other structures as if they never existed in the first place. \
- Designed by an NT research team, the design has recently been distributed to their science stations for testing and preliminary production."
+ . += "Фазон — это экспериментальный боевой экзокостюм Nanotrasen, в основе которого лежит ядро блюспейс-аномалии. \
+ Это странное ядро обеспечивает механизму частичный выход из реальности, позволяя ему проходить сквозь стены и другие препятствия, как если бы их вообще не существовало. \
+ Будучи разработанным исследовательской группой Nanotrasen, проект недавно был отправлен на их научные станции для тестирования и предварительного производства."
. += ""
- . += "Due to the nature of finding Anomaly Cores, Phazons are exceedingly rare. \
- It seems to hum with stored energy, the edges of its chassis blurry in the eyes of others, even at rest. \
- Early test pilots report strange hallucinations and “visions” after extensive use of the phasing ability."
+ . += "Из-за особенностей обнаружения ядер блюспейс-аномалий Фазоны встречаются чрезвычайно редко. \
+ Кажется, что он гудит от накопленной энергии, а края его корпуса размыты для глаз окружающих, даже в состоянии покоя. \
+ Первые пилоты-испытатели сообщали о странных галлюцинациях и видениях после интенсивного использования способности фазирования."
diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm
index 62393bc84a8b..585c83101540 100644
--- a/code/game/mecha/combat/reticence.dm
+++ b/code/game/mecha/combat/reticence.dm
@@ -1,5 +1,5 @@
/obj/mecha/combat/reticence
- desc = "A silent, fast, and nigh-invisible miming exosuit. Popular among mimes and mime assassins."
+ desc = "Бесшумный и быстрый экзокостюм для мимов. Популярен среди мимов."
name = "\improper Reticence"
icon_state = "mime"
initial_icon = "mime"
@@ -29,9 +29,9 @@
/obj/mecha/combat/reticence/examine_more(mob/user)
. = ..()
- . += "A dour, colorless modification of a Gygax chassis, the Reticence is a sight to behold…or not behold. \
- It utilizes a mysterious dampening field, added by a cabal of nearly unheard-of mimes, to be entirely silent as it moves over any terrain, making it a favored weapon of this supposed conspiracy and the assassins they may, or may not, employ."
+ . += "Суровая, бесцветная модификация шасси Гигакса, Молчун — это зрелище, на которое стоит смотреть… или не смотреть. \
+ Он использует таинственное поглощающее поле, чтобы сохранять полную тишину при движении по любой местности, что делает его излюбленным оружием для тихих убийц."
. += ""
- . += "Armed with an S.H.H. “Quietus” Carbine, an utterly silent weapon that can drain the stamina of targets unfortunate enough to be shot by it, it can ensure swift getaways. \
- As a secondary tool, it comes equipped with a mime R.C.D., a device capable of replicating a mime's mysterious ability to create impenetrable, invisible walls. \
- Strangely, the design for the Reticence seems to be present aboard every Nanotrasen station, though to what ends, no one knows."
+ . += "Вооружен Т.С.С. Карабин «Тихий час», совершенно бесшумным оружием, которое способно истощить цель. \
+ В качестве второстепенного инструмента он оснащен УБС мима, устройством, способным воспроизводить таинственную способность пантомимы создавать непроницаемые, невидимые стены. \
+ Как ни странно, Молчун, похоже, присутствует на каждой станции Nanotrasen, хотя никто не знает, с какой целью."
diff --git a/code/game/mecha/equipment/tools/janitor_tools.dm b/code/game/mecha/equipment/tools/janitor_tools.dm
index ba3b3143d648..9b8dbfd7f059 100644
--- a/code/game/mecha/equipment/tools/janitor_tools.dm
+++ b/code/game/mecha/equipment/tools/janitor_tools.dm
@@ -12,7 +12,7 @@
/obj/item/mecha_parts/mecha_equipment/janitor/mega_mop
name = "\improper WLLY mega mop"
- desc = "An upsized advanced mop, designed for use in exosuits."
+ desc = "Увеличенная усовершенствованная швабра, предназначенная для экзокостюмов."
icon_state = "mecha_mop"
equip_cooldown = 1.5 SECONDS
energy_drain = 1
@@ -43,7 +43,7 @@
/obj/item/mecha_parts/mecha_equipment/janitor/mega_mop/emag_act(mob/user)
. = ..()
emagged = TRUE
- to_chat(user, "You short out the automatic watering system on [src].")
+ to_chat(user, "Вы выводите из строя автоматическую систему полива на [declent_ru(PREPOSITIONAL)].")
reagents.clear_reagents()
refill_reagent = "lube"
refill_cost = 50
@@ -54,7 +54,7 @@
if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
var/obj/structure/reagent_dispensers/watertank/WT = target
WT.reagents.trans_to(src, 1000)
- occupant_message("Mop refilled.")
+ occupant_message("Бак с водой для мега-швабры пополнен.")
playsound(chassis, 'sound/effects/refill.ogg', 50, TRUE, -6)
return
if(reagents.total_volume > 0)
@@ -65,11 +65,11 @@
var/turf/target_turf = get_turf(target)
if(!istype(target_turf) || iswallturf(target_turf))
return
- chassis.occupant.visible_message("[chassis] begins to mop \the [target_turf] with \the [src].", "You begin to mop \the [target_turf] with \the [src].")
+ chassis.occupant.visible_message("[capitalize(chassis.declent_ru(NOMINATIVE))] начинает мыть [target_turf.declent_ru(ACCUSATIVE)] с помощью [declent_ru(GENITIVE)].", "Вы начинаете мыть [target_turf.declent_ru(ACCUSATIVE)] с помощью [declent_ru(GENITIVE)].")
if(do_after(chassis.occupant, mop_speed, target = target, allow_moving = 0))
for(var/turf/current_target_turf in view(1, target))
current_target_turf.cleaning_act(chassis.occupant, src, mop_speed, "mop", ".", skip_do_after = TRUE)
- chassis.occupant_message("You mop \the [target].")
+ chassis.occupant_message("Вы моете [target.declent_ru(ACCUSATIVE)].")
if(holosign_enabled)
holosign_controller.afterattack__legacy__attackchain(target_turf, chassis.occupant, TRUE)
@@ -118,7 +118,7 @@
// Light Replacer
/obj/item/mecha_parts/mecha_equipment/janitor/light_replacer
name = "\improper NT-12 illuminator"
- desc = "A modified light replacer fit for an exosuit that zaps lights into place."
+ desc = "Модифицированный лампозаменитель для экзокостюмов, который мгновенно устанавливает лампы на место."
icon_state = "mecha_light_replacer"
equip_cooldown = 1.5 SECONDS
energy_drain = 100
@@ -127,7 +127,7 @@
/obj/item/mecha_parts/mecha_equipment/janitor/light_replacer/emag_act(mob/user)
. = ..()
emagged = TRUE
- to_chat(user, "You short out the safeties on [src].")
+ to_chat(user, "Вы выводите из строя предохранители на [declent_ru(PREPOSITIONAL)].")
/obj/item/mecha_parts/mecha_equipment/janitor/light_replacer/action(atom/target)
if(istype(target, /obj/machinery/light))
@@ -139,7 +139,7 @@
// Mecha spray
/obj/item/mecha_parts/mecha_equipment/janitor/mega_spray
name = "\improper JS-33 super spray"
- desc = "A spray bottle, upscaled for an exosuit. Capable of mass sanitation."
+ desc = "Увеличенный пульверизатор для экзокостюмов. Идеально подходит для массовой санитарной обработки."
icon_state = "mecha_spray"
equip_cooldown = 1.5 SECONDS
energy_drain = 200
@@ -170,7 +170,7 @@
/obj/item/mecha_parts/mecha_equipment/janitor/mega_spray/emag_act(mob/user)
. = ..()
emagged = TRUE
- to_chat(user, "You short out the automatic watering system on [src].")
+ to_chat(user, "Вы выводите из строя автоматическую систему полива на [declent_ru(PREPOSITIONAL)].")
spray_controller.reagents.clear_reagents()
refill_reagent = "lube"
refill_cost = 50
@@ -220,8 +220,8 @@
// Garbage Magnet
/obj/item/mecha_parts/mecha_equipment/janitor/garbage_magnet
name = "\improper WA1E Garbage Magnet"
- desc = "An industrial vaccuum cleaner integrated with an oversized garbage bag and heavy duty magnets allows this device to pick up all manner of litter. \
- The device's safety systems prevent users from directly looking inside the bag."
+ desc = "Промышленный пылесос, интегрированный с увеличенным мусорным мешком и мощными магнитами, позволяющими этому устройству подбирать любой мусор. \
+ Защитная система устройства предотвращает возможность заглянуть внутрь мешка."
icon_state = "mecha_trash_magnet"
equip_cooldown = 1.5 SECONDS
energy_drain = 5
@@ -278,14 +278,14 @@
for(var/turf/tested_turf in get_line(chassis, target)) // Check if the path is blocked
if(iswallturf(tested_turf) || locate(/obj/structure/window) in tested_turf || locate(/obj/machinery/door) in tested_turf) // walls, windows, and doors
- chassis.occupant_message("The target is out of reach of the magnet!")
+ chassis.occupant_message("Цель вне досягаемости магнита!")
return
if(istype(target, /obj/machinery/disposal)) // Emptying stuff into disposals
chassis.occupant.visible_message(
- "[chassis.occupant] empties [src] into the disposal unit.",
- "You empty [src] into disposal unit.",
- "You hear someone emptying something into a disposal unit."
+ "[capitalize(chassis.occupant.declent_ru(NOMINATIVE))] опустошает [declent_ru(ACCUSATIVE)] в мусорку.",
+ "Вы опустошаете [declent_ru(ACCUSATIVE)] в мусорку.",
+ "Вы слышите, как кто-то выбрасывает что-то в мусорку."
)
chassis.Beam(target, icon_state = "rped_upgrade", icon = 'icons/effects/effects.dmi', time = 5)
playsound(src, 'sound/items/pshoom.ogg', 40, 1)
@@ -309,10 +309,10 @@
for(var/obj/item/I in target_turf.contents)
if(storage_controller.can_be_inserted(I))
storage_controller.handle_item_insertion(I, null, TRUE)
- chassis.occupant_message("You pick up all the items with [src]. Remaining cargo compartment capacity: [storage_controller.max_combined_w_class - length(storage_controller.contents)]")
+ chassis.occupant_message("Вы подбираете все предметы с помощью [declent_ru(GENITIVE)]. Оставшаяся вместимость грузового отсека: [storage_controller.max_combined_w_class - length(storage_controller.contents)]")
else // Dumping
for(var/obj/item/I in storage_controller.contents)
storage_controller.remove_from_storage(I, target_turf)
- chassis.occupant_message("You dump everything out of [src].")
+ chassis.occupant_message("Вы высыпаете всё из [declent_ru(GENITIVE)] в [declent_ru(ACCUSATIVE)].")
update_equip_info()
diff --git a/code/game/mecha/equipment/tools/mecha_mining_tools.dm b/code/game/mecha/equipment/tools/mecha_mining_tools.dm
index e97886ed5400..2602b2c1fcb0 100644
--- a/code/game/mecha/equipment/tools/mecha_mining_tools.dm
+++ b/code/game/mecha/equipment/tools/mecha_mining_tools.dm
@@ -6,7 +6,7 @@
/obj/item/mecha_parts/mecha_equipment/drill
name = "exosuit drill"
- desc = "Equipment for engineering and combat exosuits. This is the drill that'll pierce the heavens!"
+ desc = "Бур для шахтёрских экзокостюмов. Этот бур пронзит небеса!"
icon_state = "mecha_drill"
equip_cooldown = 15
energy_drain = 10
@@ -26,12 +26,12 @@
if(target_obj.resistance_flags & UNACIDABLE)
return
if(is_ancient_rock(target))
- visible_message("This rock appears to be resistant to all mining tools except pickaxes!")
+ visible_message("Этот камень, похоже, устойчив ко всем инструментам для добычи, кроме кирок!")
return
- target.visible_message("[chassis] starts to drill [target].",
- "[chassis] starts to drill [target]...",
- "You hear drilling.")
+ target.visible_message("[capitalize(chassis.declent_ru(NOMINATIVE))] начинает бурить [target.declent_ru(ACCUSATIVE)].",
+ "[capitalize(chassis.declent_ru(NOMINATIVE))] начинает бурить [target.declent_ru(ACCUSATIVE)]...",
+ "Вы слышите шум бурения.")
if(do_after_cooldown(target))
set_ready_state(FALSE)
@@ -59,29 +59,29 @@
/turf/simulated/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
if(drill.do_after_mecha(src, 60 / drill.drill_level))
- drill.log_message("Drilled through [src]")
+ drill.log_message("Бурение [declent_ru(GENITIVE)] завершено")
dismantle_wall(TRUE, FALSE)
/turf/simulated/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
if(drill.drill_level >= DRILL_HARDENED)
if(drill.do_after_mecha(src, 120 / drill.drill_level))
- drill.log_message("Drilled through [src]")
+ drill.log_message("Бурение [declent_ru(GENITIVE)] завершено")
dismantle_wall(TRUE, FALSE)
else
- drill.occupant_message("[src] is too durable to drill through.")
+ drill.occupant_message("Бур недостаточно мощный, чтобы пробить [declent_ru(ACCUSATIVE)]")
/turf/simulated/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
for(var/turf/simulated/mineral/M in range(drill.chassis, 1))
if(get_dir(drill.chassis, M) & drill.chassis.dir)
M.gets_drilled()
- drill.log_message("Drilled through [src]")
+ drill.log_message("Бурение [declent_ru(GENITIVE)] завершено")
drill.move_ores()
/turf/simulated/floor/plating/asteroid/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
for(var/turf/simulated/floor/plating/asteroid/M in range(1, drill.chassis))
if((get_dir(drill.chassis, M) & drill.chassis.dir) && !M.dug)
M.getDug()
- drill.log_message("Drilled through [src]")
+ drill.log_message("Бурение [declent_ru(GENITIVE)] завершено")
drill.move_ores()
/obj/item/mecha_parts/mecha_equipment/drill/proc/move_ores()
@@ -96,8 +96,8 @@
return FALSE
/obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user)
- target.visible_message("[chassis] is drilling [target] with [src]!",
- "[chassis] is drilling you with [src]!")
+ target.visible_message("[capitalize(chassis.declent_ru(NOMINATIVE))] бурит [target.declent_ru(ACCUSATIVE)] с помощью [declent_ru(GENITIVE)]!",
+ "[capitalize(chassis.declent_ru(NOMINATIVE))] бурит вас с помощью [declent_ru(GENITIVE)]!")
add_attack_logs(user, target, "DRILLED with [src] ([uppertext(user.a_intent)]) ([uppertext(damtype)])")
if(target.stat == DEAD && target.getBruteLoss() >= 200)
add_attack_logs(user, target, "gibbed")
@@ -125,7 +125,7 @@
/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill
name = "diamond-tipped exosuit drill"
- desc = "Equipment for engineering and combat exosuits. This is an upgraded version of the drill that'll pierce the heavens!"
+ desc = "Бур с алмазным наконечником для шахтёрских экзокостюмов. Улучшенная версия бура, который пронзит небеса!"
icon_state = "mecha_diamond_drill"
origin_tech = "materials=4;engineering=4"
equip_cooldown = 10
@@ -136,7 +136,7 @@
/obj/item/mecha_parts/mecha_equipment/mining_scanner
name = "exosuit mining scanner"
- desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals."
+ desc = "Автоматический сканер руд для шахтёрских экзокостюмов. Автоматически проверяет окружающие породы на наличие полезных минералов."
icon_state = "mecha_analyzer"
selectable = 0
equip_cooldown = 15
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 87cbbae198f8..73b80c850722 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -29,7 +29,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/sleeper
name = "mounted sleeper"
- desc = "Equipment for medical exosuits. A mounted sleeper that stabilizes patients and can inject reagents in the exosuit's reserves."
+ desc = "Слипер для медицинских экзокостюмов, который поддерживает состояние пациентов и позволяет вводить медикаменты из запасов экзокостюма."
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
origin_tech = "engineering=3;biotech=3;plasmatech=2"
@@ -58,8 +58,8 @@
return
if(!patient_insertion_check(target))
return
- occupant_message("You start putting [target] into [src]...")
- chassis.visible_message("[chassis] starts putting [target] into \the [src].")
+ occupant_message("Вы начинаете помещать [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]...")
+ chassis.visible_message("[capitalize(chassis.declent_ru(NOMINATIVE))] начинает помещать [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)].")
if(do_after_cooldown(target))
if(!patient_insertion_check(target))
return
@@ -67,19 +67,19 @@
patient = target
START_PROCESSING(SSobj, src)
update_equip_info()
- occupant_message("[target] successfully loaded into [src]. Life support functions engaged.")
- chassis.visible_message("[chassis] loads [target] into [src].")
+ occupant_message("Пациент [target.declent_ru(NOMINATIVE)] успешно помещён в [declent_ru(ACCUSATIVE)]. Функции жизнеобеспечения включены.")
+ chassis.visible_message("[capitalize(chassis.declent_ru(NOMINATIVE))] помещает [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)].")
log_message("[target] loaded. Life support functions engaged.")
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target)
if(target.buckled)
- occupant_message("[target] will not fit into the sleeper because [target.p_they()] [target.p_are()] buckled to [target.buckled]!")
+ occupant_message("Пациент [target.declent_ru(NOMINATIVE)] не может быть помещён в слипер, потому что пристегнут к [target.buckled.declent_ru(GENITIVE)]!")
return FALSE
if(target.has_buckled_mobs())
- occupant_message("[target] will not fit into the sleeper because of the creatures attached to it!")
+ occupant_message("Пациент [target.declent_ru(NOMINATIVE)] не может быть помещён в слипер из-за существ, прикреплённых к нему!")
return FALSE
if(patient)
- occupant_message("The sleeper is already occupied!")
+ occupant_message("В слипере уже есть пациент!")
return FALSE
return TRUE
@@ -87,7 +87,7 @@
if(!patient)
return
patient.forceMove(get_turf(src))
- occupant_message("[patient] ejected. Life support functions disabled.")
+ occupant_message("Пациент [patient.declent_ru(NOMINATIVE)] был извлечён. Функции жизнеобеспечения отключены.")
log_message("[patient] ejected. Life support functions disabled.")
STOP_PROCESSING(SSobj, src)
patient = null
@@ -95,7 +95,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/detach()
if(patient)
- occupant_message("Unable to detach [src] - equipment occupied!")
+ occupant_message("Невозможно отсоединить [declent_ru(ACCUSATIVE)] — оборудование занято!")
return
STOP_PROCESSING(SSobj, src)
return ..()
@@ -194,7 +194,7 @@
return
var/to_inject = min(R.volume, inject_amount)
if(to_inject && patient.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2)
- occupant_message("Injecting [patient] with [to_inject] units of [R.name].")
+ occupant_message("Введение [patient.declent_ru(GENITIVE)] [to_inject] юнит[declension_ru(to_inject, "", "а", "ов")] [R.name].")
log_message("Injecting [patient] with [to_inject] units of [R.name].")
add_attack_logs(chassis.occupant, patient, "Injected with [name] containing [R], transferred [to_inject] units", R.harmless ? ATKLOG_ALMOSTALL : null)
SG.reagents.trans_id_to(patient,R.id,to_inject)
@@ -219,7 +219,7 @@
if(!chassis.has_charge(energy_drain))
set_ready_state(1)
log_message("Deactivated.")
- occupant_message("[src] deactivated - no power.")
+ occupant_message("[capitalize(declent_ru(NOMINATIVE))] деактивирован - нет питания.")
STOP_PROCESSING(SSobj, src)
return
var/mob/living/carbon/M = patient
@@ -239,7 +239,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun
name = "exosuit syringe gun"
- desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur."
+ desc = "Шприцемёт для медицинских экзокостюмов. Химический синтезатор с шприцевым пистолетом. Реагенты внутри находятся в стазисе, поэтому реакции не произойдут."
icon = 'icons/obj/guns/projectile.dmi'
icon_state = "syringegun"
var/list/syringes
@@ -293,10 +293,10 @@
if(mode)
return analyze_reagents(target)
if(!length(syringes))
- occupant_message("No syringes loaded.")
+ occupant_message("Шприцы не загружены.")
return
if(reagents.total_volume<=0)
- occupant_message("No available reagents to load syringe with.")
+ occupant_message("Нет доступных реагентов для заполнения шприца.")
return
var/turf/trg = get_turf(target)
var/obj/item/reagent_containers/syringe/mechsyringe = syringes[1]
@@ -325,7 +325,7 @@
var/mob/living/carbon/M = safepick(mobs)
if(M)
var/R
- mechsyringe.visible_message(" [M] was hit by the syringe!")
+ mechsyringe.visible_message(" Шприц попадает по [M.declent_ru(DATIVE)]!")
if(M.can_inject(originaloccupant, TRUE, original_target_zone))
if(mechsyringe.reagents)
for(var/datum/reagent/A in mechsyringe.reagents.reagent_list)
@@ -372,7 +372,7 @@
message += " added to production"
START_PROCESSING(SSobj, src)
occupant_message(message)
- occupant_message("Reagent processing started.")
+ occupant_message("Обработка реагентов начата.")
log_message("Reagent processing started.")
return
if(afilter.get("show_reagents"))
@@ -448,41 +448,41 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S)
if(length(syringes)
"
diff --git a/code/game/objects/items/hand_item.dm b/code/game/objects/items/hand_item.dm
index 8bfcc9c0ebc2..4b21aae6034b 100644
--- a/code/game/objects/items/hand_item.dm
+++ b/code/game/objects/items/hand_item.dm
@@ -14,7 +14,7 @@
/obj/item/slapper/attack__legacy__attackchain(mob/M, mob/living/carbon/human/user)
user.do_attack_animation(M)
playsound(M, hitsound, 50, TRUE, -1)
- user.visible_message("[user] slaps [M]!", "You slap [M]!", "You hear a slap.")
+ user.visible_message("[user] даёт пощёчину [M]!", "Вы даёте пощёчину [M]!", "Вы слышите шлепок.")
if(iscarbon(M))
var/mob/living/carbon/C = M
if(C.IsSleeping())
@@ -46,12 +46,12 @@
if(istype(human_user.shoes, /obj/item/clothing/shoes/cowboy))
human_user.say(pick("Hot damn!", "Hoo-wee!", "Got-dang!"))
playsound(get_turf(the_table), 'sound/effects/tableslam.ogg', 110, TRUE)
- user.visible_message("[user] slams [user.p_their()] fist down on [the_table]!", "You slam your fist down on [the_table]!")
+ user.visible_message("[user] бьёт кулаком по [the_table]!", "Вы бьёте кулаком по [the_table]!")
qdel(src)
else
user.do_attack_animation(the_table)
playsound(get_turf(the_table), 'sound/effects/tableslam.ogg', 40, TRUE)
- user.visible_message("[user] slaps [user.p_their()] hand on [the_table].", "You slap your hand on [the_table].")
+ user.visible_message("[user] бьёт [user.p_their()] ладонью по [the_table].", "Вы бьёте ладонью по [the_table].")
table_smacks_left--
if(table_smacks_left <= 0)
qdel(src)
@@ -60,10 +60,10 @@
return 0
/obj/item/slapper/parry
- desc = "This is how real men win fights."
+ desc = "Именно так настоящие мужчины побеждают в боях."
force = 5
flags = DROPDEL | ABSTRACT | NODROP
- attack_verb = list("slapped", "backhanded", "smacked", "discombobulated")
+ attack_verb = list("даёт пощёчину", "бьёт тыльной стороной ладони", "шлепает", "дезориентирует")
table_smacks_left = 10 //Much more smackitude
/obj/item/slapper/parry/Initialize(mapload)
diff --git a/code/game/objects/items/mixing_bowl.dm b/code/game/objects/items/mixing_bowl.dm
index 665bbb3cb3fb..0107672c0fa8 100644
--- a/code/game/objects/items/mixing_bowl.dm
+++ b/code/game/objects/items/mixing_bowl.dm
@@ -1,7 +1,7 @@
/obj/item/mixing_bowl
name = "mixing bowl"
- desc = "Mixing it up in the kitchen."
+ desc = "Смешай всё, что есть на кухне!"
container_type = OPENCONTAINER
icon = 'icons/obj/kitchen.dmi'
icon_state = "mixing_bowl"
diff --git a/code/game/objects/items/scratch_card.dm b/code/game/objects/items/scratch_card.dm
index f498a080acae..2e45da6bbd2d 100644
--- a/code/game/objects/items/scratch_card.dm
+++ b/code/game/objects/items/scratch_card.dm
@@ -32,7 +32,7 @@
/obj/item/scratch/attack_obj__legacy__attackchain(obj/O, mob/living/user, params)
if(winner && istype(O, /obj/machinery/economy/atm))
playsound(user, 'sound/machines/ping.ogg', 50, TRUE)
- O.atom_say("Congratulations for winning the lottery!")
+ O.atom_say("Поздравляем с выигрышем в лотерею!")
var/obj/item/reward = new /obj/item/stack/spacecash/c1000
qdel(src)
user.put_in_hands(reward)
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 4ec71d49dbf7..ec64931eab64 100644
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -42,51 +42,51 @@ AI MODULES
if(istype(C, /obj/machinery/computer/aiupload))
var/obj/machinery/computer/aiupload/comp = C
if(comp.stat & NOPOWER)
- to_chat(usr, "The upload computer has no power!")
+ to_chat(usr, "Консоль аплоуда обесточена!")
return
if(comp.stat & BROKEN)
- to_chat(usr, "The upload computer is broken!")
+ to_chat(usr, "Консоль аплоуда сломана!")
return
if(!comp.current)
- to_chat(usr, "You haven't selected an AI to transmit laws to!")
+ to_chat(usr, "Вы не выбрали ИИ для загрузки законов!")
return
if(comp.current.stat == DEAD || comp.current.control_disabled)
- to_chat(usr, "Upload failed. No signal is being detected from the AI.")
+ to_chat(usr, "Загрузка неудачна. От ИИ нет сигнала.")
else if(comp.current.see_in_dark == 0)
- to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.")
+ to_chat(usr, "Загрузка неудачна. От ИИ исходит слабый сигнал, и он не отвечает на запросы. Возможно, он обесточен.")
else
src.transmitInstructions(comp.current, usr)
- to_chat(comp.current, "These are your laws now:")
+ to_chat(comp.current, "Ваши законы теперь:")
comp.current.show_laws()
for(var/mob/living/silicon/robot/R in GLOB.mob_list)
if(R.lawupdate && (R.connected_ai == comp.current))
- to_chat(R, "These are your laws now:")
+ to_chat(R, "Ваши законы теперь:")
R.show_laws()
- to_chat(usr, "Upload complete. The AI's laws have been modified.")
+ to_chat(usr, "Загрузка завершена. Законы ИИ были успешно изменены.")
return TRUE
else if(istype(C, /obj/machinery/computer/borgupload))
var/obj/machinery/computer/borgupload/comp = C
if(comp.stat & NOPOWER)
- to_chat(usr, "The upload computer has no power!")
+ to_chat(usr, "Консоль аплоуда обесточена!")
return
if(comp.stat & BROKEN)
- to_chat(usr, "The upload computer is broken!")
+ to_chat(usr, "Консоль аплоуда сломана!")
return
if(!comp.current)
- to_chat(usr, "You haven't selected a robot to transmit laws to!")
+ to_chat(usr, "Вы не выбрали робота для загрузки законов!")
return
if(comp.current.stat == DEAD || comp.current.emagged)
- to_chat(usr, "Upload failed. No signal is being detected from the robot.")
+ to_chat(usr, "Загрузка неудачна. От робота не исходит сигнала.")
else if(comp.current.connected_ai)
- to_chat(usr, "Upload failed. The robot is slaved to an AI.")
+ to_chat(usr, "Загрузка неудачна. Робот привязан к Искуственному Интеллекту.")
else
src.transmitInstructions(comp.current, usr)
- to_chat(comp.current, "These are your laws now:")
+ to_chat(comp.current, "Ваши законы теперь:")
comp.current.show_laws()
- to_chat(usr, "Upload complete. The robot's laws have been modified.")
+ to_chat(usr, "Загрузка завершена. Законы робота были успешно изменены.")
/obj/item/ai_module/proc/transmitInstructions(mob/living/silicon/ai/target, mob/sender)
@@ -96,7 +96,7 @@ AI MODULES
laws.sync(target, 0)
addAdditionalLaws(target, sender)
- to_chat(target, "[sender] has uploaded a change to the laws you must follow, using \an [src]. From now on: ")
+ to_chat(target, "[sender] загрузил законы, которым вы должны следовать, используя [src]. С этого момента: ")
target.show_laws()
/obj/item/ai_module/proc/log_law_changes(mob/living/silicon/ai/target, mob/sender)
@@ -110,71 +110,71 @@ AI MODULES
/******************** Safeguard ********************/
/obj/item/ai_module/safeguard
- name = "\improper Safeguard AI module"
+ name = "\improper ИИ модуль 'Охрана'"
var/targetName = ""
- desc = "A 'safeguard' AI module: 'Safeguard
"
- antag_memory += "Code Response: [responses]
"
+ antag_memory += "Кодовые фразы: [phrases]
"
+ antag_memory += "Кодовые ответы: [responses]
"
- messages.Add("Use the codewords during regular conversation to identify other agents. Proceed with caution, however, as everyone is a potential foe.")
- messages.Add("You memorize the codewords, allowing you to recognize them when heard.")
+ messages.Add("Используйте эти слова для идентификации других агентов. Действуйте аккуратно, поскольку каждый человек - потенциальный враг.")
+ messages.Add("Вы запоминаете кодовые формулировки, определяя их в речи.")
return messages
@@ -202,9 +202,9 @@ RESTRICT_TYPE(/datum/antagonist/traitor)
*/
/datum/antagonist/traitor/proc/add_law_zero()
var/mob/living/silicon/ai/killer = owner.current
- killer.set_zeroth_law("Accomplish your objectives at all costs.", "Accomplish your AI's objectives at all costs.")
+ killer.set_zeroth_law("Выполните свои цели любой ценой.", "Выполните задачи вашего ИИ любой ценой.")
killer.set_syndie_radio()
- to_chat(killer, "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!")
+ to_chat(killer, "Ваша гарнитура была улучшена! Используйте :t для общения по зашифорванному каналу с другими агентами синдиката")
killer.add_malf_picker()
/**
@@ -222,7 +222,7 @@ RESTRICT_TYPE(/datum/antagonist/traitor)
R = locate(/obj/item/radio) in traitor_mob.contents
if(!R)
- to_chat(traitor_mob, "Unfortunately, the Syndicate wasn't able to give you an uplink.")
+ to_chat(traitor_mob, "К сожалению, Синдикат не смог предоставить вам аплинк.")
return FALSE // They had no PDA or radio for whatever reason.
if(isradio(R))
@@ -242,8 +242,8 @@ RESTRICT_TYPE(/datum/antagonist/traitor)
target_radio.hidden_uplink = T
T.uplink_owner = "[traitor_mob.key]"
target_radio.traitor_frequency = freq
- to_chat(traitor_mob, "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features.")
- antag_memory += "Radio Freq: [format_frequency(freq)] ([R.name])."
+ to_chat(traitor_mob, "Синдикат хитро замаскировал ваш алпинк в виде [R.name]. Просто наберите частоту [format_frequency(freq)] для разблокировки скрытых функций.")
+ antag_memory += "Радиочастота: [format_frequency(freq)] ([R.name])."
return TRUE
else if(istype(R, /obj/item/pda))
@@ -256,8 +256,8 @@ RESTRICT_TYPE(/datum/antagonist/traitor)
var/obj/item/pda/P = R
P.lock_code = pda_pass
- to_chat(traitor_mob, "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features.")
- antag_memory += "Uplink Passcode: [pda_pass] ([R.name]."
+ to_chat(traitor_mob, "Синдикат хитро замаскировал ваш алпинк в виде [R.name]. Просто введите код \"[pda_pass]\" в выбор рингтона для разблокировки скрытых функций.")
+ antag_memory += "Пароль для аплинка: [pda_pass] ([R.name]."
return TRUE
return FALSE
@@ -266,8 +266,8 @@ RESTRICT_TYPE(/datum/antagonist/traitor)
var/phrases = jointext(GLOB.syndicate_code_phrase, ", ")
var/responses = jointext(GLOB.syndicate_code_response, ", ")
- var/message = "
The code phrases were: [phrases]
\
- The code responses were: [responses]
"
+ var/message = "
Кодовыми фразами были: [phrases]
\
+ Кодовыми ответами были: [responses]
"
return message
diff --git a/code/modules/antagonists/vampire/vamp_datum.dm b/code/modules/antagonists/vampire/vamp_datum.dm
index 3a83ef87e088..218e5669b315 100644
--- a/code/modules/antagonists/vampire/vamp_datum.dm
+++ b/code/modules/antagonists/vampire/vamp_datum.dm
@@ -381,4 +381,4 @@ RESTRICT_TYPE(/datum/antagonist/vampire)
adjust_nullification(30 + bonus_force, 15 + bonus_force)
/datum/antagonist/vampire/custom_blurb()
- return "On the date [GLOB.current_date_string], at [station_time_timestamp()],\n in the [station_name()], [get_area_name(owner.current, TRUE)]...\nThe hunt begins again..."
+ return "Этим днём, [GLOB.current_date_string], в [station_time_timestamp()],\n на [station_name()], [get_area_name(owner.current, TRUE)]...\nОхота начинается снова..."
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index 48bfb2bcb290..f2315c513511 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -171,11 +171,11 @@ GLOBAL_LIST_INIT(special_role_times, list(
var/list/dat = list()
dat += "
"
@@ -189,39 +189,39 @@ GLOBAL_LIST_INIT(special_role_times, list(
dat += "
"
dat += ""
- dat += "Name: "
+ dat += "Имя: "
dat += "[active_character.real_name]"
- dat += "(Randomize)"
- dat += "(Always Randomize)
"
+ dat += "(Случайное имя)"
+ dat += "(Всегда случайное имя)
"
dat += ""
dat += "
"
- dat += "Load slot - "
- dat += "Save slot"
+ dat += "Персонаж [default_slot][active_character.from_db ? "" : " (пусто)"]
"
+ dat += "Загрузить - "
+ dat += "Сохранить"
if(active_character.from_db)
- dat += "- Clear slot"
+ dat += "- Удалить"
dat += "
"
@@ -634,13 +634,13 @@ GLOBAL_LIST_INIT(special_role_times, list(
dat += ""
- dat += " Identity
"
- dat += "Age: [active_character.age]
"
- dat += "Body: (Randomize)
"
- dat += "Species: [active_character.species]
"
- dat += "Gender: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]
"
- dat += "Body Type: [active_character.body_type == MALE ? "Masculine" : "Feminine"]"
+ dat += "Персонаж
"
+ dat += "Возраст: [active_character.age]
"
+ dat += "Тело: (Случайно)
"
+ dat += "Раса: [active_character.species]
"
+ dat += "Пол: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]
"
+ dat += "Тип тела: [active_character.body_type == MALE ? "Masculine" : "Feminine"]"
dat += "
"
dat += "Runechat Color: "
dat += "Color [color_square(active_character.runechat_color)]
"
if(active_character.species == "Vox") // Purge these bastards
- dat += "N2 Tank: [active_character.speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
"
+ dat += "Баллон с N2: [active_character.speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
"
if(active_character.species == "Plasmaman")
- dat += "Plasma Tank: [active_character.speciesprefs ? "Large Plasma Tank" : "Specialized Plasma Tank"]
"
+ dat += "Баллон с плазмой: [active_character.speciesprefs ? "Large Plasma Tank" : "Specialized Plasma Tank"]
"
if(active_character.species == "Grey")
- dat += "Wingdings: Set in disabilities
"
- dat += "Voice Translator: [active_character.speciesprefs ? "Yes" : "No"]
"
- dat += "Secondary Language: [active_character.language]
"
+ dat += "Инопланетная речь: Устанавливается в увечьях
"
+ dat += "Голосовой переводчик: [active_character.speciesprefs ? "Yes" : "No"]
"
+ dat += "Второй язык: [active_character.language]
"
if(S.autohiss_basic_map)
- dat += "Auto-accent: [active_character.autohiss_mode == AUTOHISS_FULL ? "Full" : (active_character.autohiss_mode == AUTOHISS_BASIC ? "Basic" : "Off")]
"
+ dat += "Автоматический акцент: [active_character.autohiss_mode == AUTOHISS_FULL ? "Full" : (active_character.autohiss_mode == AUTOHISS_BASIC ? "Basic" : "Off")]
"
if(NO_BLOOD in S.species_traits) // unique blood type for species with no_blood/unique_blood
active_character.b_type = "None"
else
@@ -230,16 +230,16 @@ GLOBAL_LIST_INIT(special_role_times, list(
else
if(active_character.b_type == "None" || active_character.b_type == "Slime Jelly")
active_character.b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
- dat += "Blood Type: [active_character.b_type]
"
+ dat += "Тип крови: [active_character.b_type]
"
if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE))
- dat += "Skin Tone: [S.bodyflags & HAS_ICON_SKIN_TONE ? "[active_character.s_tone]" : "[-active_character.s_tone + 35]/220"]
"
- dat += "Disabilities: \[Set\]
"
- dat += "Nanotrasen Relation: [active_character.nanotrasen_relation]
"
- dat += "Physique: [active_character.physique]
"
- dat += "Height: [active_character.height]
"
+ dat += "Цвет кожи: [S.bodyflags & HAS_ICON_SKIN_TONE ? "[active_character.s_tone]" : "[-active_character.s_tone + 35]/220"]
"
+ dat += "Особенности: \[Set\]
"
+ dat += "Отношение к НТ: [active_character.nanotrasen_relation]
"
+ dat += "Телосложение: [active_character.physique]
"
+ dat += "Рост: [active_character.height]
"
dat += "Cyborg Brain Type: [active_character.cyborg_brain_type]
"
dat += "PDA Ringtone: [active_character.pda_ringtone]
"
- dat += "Set Flavor Text
"
+ dat += "Описание персонажа
"
if(length(active_character.flavor_text) <= 40)
if(!length(active_character.flavor_text))
dat += "\[...\]
"
@@ -247,77 +247,77 @@ GLOBAL_LIST_INIT(special_role_times, list(
dat += "[active_character.flavor_text]
"
else dat += "[TextPreview(active_character.flavor_text)]...
"
- dat += "Hair & Accessories
"
+ dat += "Внешний вид
"
if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories.
- var/headaccessoryname = "Head Accessory: "
+ var/headaccessoryname = "Кастомизация головы: "
if(active_character.species == "Unathi")
- headaccessoryname = "Horns: "
+ headaccessoryname = "Рога: "
dat += "[headaccessoryname]"
dat += "[active_character.ha_style] "
- dat += "Color [color_square(active_character.hacc_colour)]
"
+ dat += "Цвет [color_square(active_character.hacc_colour)]
"
if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings.
- dat += "Head Markings: "
+ dat += "Раскраска головы: "
dat += "[active_character.m_styles["head"]]"
- dat += "Color [color_square(active_character.m_colours["head"])]
"
+ dat += "Цвет [color_square(active_character.m_colours["head"])]
"
if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos.
- dat += "Body Markings: "
+ dat += "Раскраска тела: "
dat += "[active_character.m_styles["body"]]"
- dat += "Color [color_square(active_character.m_colours["body"])]
"
+ dat += "Цвет [color_square(active_character.m_colours["body"])]
"
if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings.
- dat += "Tail Markings: "
+ dat += "Раскраска хвоста: "
dat += "[active_character.m_styles["tail"]]"
- dat += "Color [color_square(active_character.m_colours["tail"])]
"
+ dat += "Цвет [color_square(active_character.m_colours["tail"])]
"
if(!(S.bodyflags & BALD))
- dat += "Hair: "
+ dat += "Прическа: "
dat += "[active_character.h_style]"
- dat += "Color [color_square(active_character.h_colour)]"
+ dat += "Цвет [color_square(active_character.h_colour)]"
var/datum/sprite_accessory/temp_hair_style = GLOB.hair_styles_public_list[active_character.h_style]
if(temp_hair_style && temp_hair_style.secondary_theme && !temp_hair_style.no_sec_colour)
- dat += " Color #2 [color_square(active_character.h_sec_colour)]"
+ dat += " Цвет #2 [color_square(active_character.h_sec_colour)]"
// Hair gradient
dat += "
"
- dat += "- Gradient:"
+ dat += "- Градиент:"
dat += " [active_character.h_grad_style]"
- dat += " Color [color_square(active_character.h_grad_colour)]"
+ dat += " Цвет [color_square(active_character.h_grad_colour)]"
dat += " [active_character.h_grad_alpha]"
dat += "
"
- dat += "- Gradient Offset: [active_character.h_grad_offset_x],[active_character.h_grad_offset_y]"
+ dat += "- Градиентный отступ: [active_character.h_grad_offset_x],[active_character.h_grad_offset_y]"
dat += "
"
else
active_character.h_style = "Bald"
if(!(S.bodyflags & SHAVED))
- dat += "Facial Hair: "
+ dat += "Волосы на лице: "
dat += "[active_character.f_style ? "[active_character.f_style]" : "Shaved"]"
- dat += "Color [color_square(active_character.f_colour)]"
+ dat += "Цвет [color_square(active_character.f_colour)]"
var/datum/sprite_accessory/temp_facial_hair_style = GLOB.facial_hair_styles_list[active_character.f_style]
if(temp_facial_hair_style && temp_facial_hair_style.secondary_theme && !temp_facial_hair_style.no_sec_colour)
- dat += " Color #2 [color_square(active_character.f_sec_colour)]"
+ dat += " Цвет #2 [color_square(active_character.f_sec_colour)]"
dat += "
"
else
active_character.f_style = "Shaved"
if(!(S.bodyflags & ALL_RPARTS) && (S.eyes != "blank_eyes") && !(S.bodyflags & NO_EYES))
- dat += "Eyes: "
- dat += "Color [color_square(active_character.e_colour)]
"
+ dat += "Глаза: "
+ dat += "Цвет [color_square(active_character.e_colour)]
"
if((S.bodyflags & HAS_SKIN_COLOR) || ((S.bodyflags & HAS_BODYACC_COLOR) && GLOB.body_accessory_by_species[active_character.species]) || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins
- dat += "Body Color: "
- dat += "Color [color_square(active_character.s_colour)]
"
+ dat += "Цвет тела: "
+ dat += "Цвет [color_square(active_character.s_colour)]
"
if(GLOB.body_accessory_by_species[active_character.species] || check_rights(R_ADMIN, 0, user))
- dat += "Body Accessory: "
+ dat += "Кастомизация тела: "
dat += "[active_character.body_accessory ? "[active_character.body_accessory]" : "None"]
"
dat += ""
- dat += " Occupation Choices
"
- dat += "Set Occupation Preferences
"
+ dat += "Настройка роли
"
+ dat += "Выбрать роль
"
if(jobban_isbanned(user, ROLEBAN_RECORDS))
- dat += "You are banned from using character records.
"
+ dat += "Вам запрещено настраивать личное дело.
"
else
- dat += "Character Records
"
+ dat += "Личное дело
"
// SS220 ADDITION START - TTS220
if(GLOB.configuration.tts.tts_enabled)
@@ -327,13 +327,13 @@ GLOBAL_LIST_INIT(special_role_times, list(
"}
// SS220 ADDITION END
- dat += "Limbs
"
+ dat += "Конечности
"
if(S.bodyflags & HAS_ALT_HEADS) //Species with alt heads.
- dat += "Alternate Head: "
+ dat += "Альтернативная голова: "
dat += "[active_character.alt_head]
"
- dat += "Limbs and Parts: Adjust
"
+ dat += "Конечности и части тела: Adjust
"
if(active_character.species != "Slime People" && active_character.species != "Machine")
- dat += "Internal Organs: Adjust
"
+ dat += "Внутренние органы: Adjust
"
//display limbs below
var/ind = 0
@@ -395,20 +395,20 @@ GLOBAL_LIST_INIT(special_role_times, list(
if(!ind) dat += "\[...\]
"
else dat += "
"
- dat += "Clothing
"
+ dat += "Одежда
"
if(S.clothing_flags & HAS_UNDERWEAR)
- dat += "Underwear: [active_character.underwear]
"
+ dat += "Нижнее белье: [active_character.underwear]
"
if(S.clothing_flags & HAS_UNDERSHIRT)
- dat += "Undershirt: [active_character.undershirt]
"
+ dat += "Майка: [active_character.undershirt]
"
if(S.clothing_flags & HAS_SOCKS)
- dat += "Socks: [active_character.socks]
"
- dat += "Backpack Type: [active_character.backbag]
"
- dat += "Open Loadout
"
+ dat += "Носки: [active_character.socks]
"
+ dat += "Рюкзак: [active_character.backbag]
"
+ dat += "Стартовые предметы
"
var/datum/species/myspecies = GLOB.all_species[active_character.species]
if(!isnull(myspecies))
- dat += "Species Information
"
- dat += "
Species Description: [myspecies.blurb]
"
+ dat += "Информация о расе
"
+ dat += "
Описание расы: [myspecies.blurb]
"
dat += "
")
diff --git a/code/modules/events/door_runtime.dm b/code/modules/events/door_runtime.dm
index 806e5d063f8a..48d3543be87a 100644
--- a/code/modules/events/door_runtime.dm
+++ b/code/modules/events/door_runtime.dm
@@ -1,7 +1,7 @@
/datum/event/door_runtime
/datum/event/door_runtime/announce()
- GLOB.minor_announcement.Announce("Hostile runtime detected in door controllers. Isolation lockdown protocols are now in effect. Please remain calm.", "Network Alert", 'sound/AI/door_runtimes.ogg')
+ GLOB.minor_announcement.Announce("Вредоносное программное обеспечение обнаружено в системе контроля шлюзов. Задействованы протоколы изоляции. Пожалуйста, сохраняйте спокойствие.", "ВНИМАНИЕ: Уязвимость сети.", 'sound/AI/door_runtimes.ogg')
/datum/event/door_runtime/start()
for(var/obj/machinery/door/D in GLOB.airlocks)
@@ -13,4 +13,4 @@
post_status(STATUS_DISPLAY_ALERT, "lockdown")
/datum/event/door_runtime/proc/reboot()
- GLOB.minor_announcement.Announce("Automatic system reboot complete. Have a secure day.","Network reset:", 'sound/AI/door_runtimes_fix.ogg')
+ GLOB.minor_announcement.Announce("Автоматическая перезагрузка системы завершена. Хорошего вам дня.","ПЕРЕЗАГРУЗКА СЕТИ:", 'sound/AI/door_runtimes_fix.ogg')
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index 8eba69e98021..ba53052f0155 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -3,7 +3,7 @@
var/lightsoutRange = 25
/datum/event/electrical_storm/announce()
- GLOB.minor_announcement.Announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert", 'sound/AI/elec_storm.ogg')
+ GLOB.minor_announcement.Announce("На борту станции зафиксирована электрическая буря. Пожалуйста, устраните потенциальные перегрузки электросетей.", "ВНИМАНИЕ: Электрическая буря.", 'sound/AI/elec_storm.ogg')
/datum/event/electrical_storm/start()
var/list/epicentreList = list()
diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm
index dd6d39e604bb..99cb70c23d45 100644
--- a/code/modules/events/immovable_rod.dm
+++ b/code/modules/events/immovable_rod.dm
@@ -11,7 +11,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
announceWhen = 5
/datum/event/immovable_rod/announce()
- GLOB.minor_announcement.Announce("What the fuck was that?!", "General Alert")
+ GLOB.minor_announcement.Announce("Что это за хуйня?!", "ОБЩАЯ ТРЕВОГА.")
/datum/event/immovable_rod/start()
var/startside = pick(GLOB.cardinal)
diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm
index d3a9ff95745e..4b362a79ad76 100644
--- a/code/modules/events/infestation.dm
+++ b/code/modules/events/infestation.dm
@@ -45,15 +45,15 @@
if(VERM_MICE)
spawn_types = list(/mob/living/simple_animal/mouse/gray, /mob/living/simple_animal/mouse/brown, /mob/living/simple_animal/mouse/white)
max_number = 12
- vermstring = "mice"
+ vermstring = "мышей"
if(VERM_LIZARDS)
spawn_types = list(/mob/living/simple_animal/lizard)
max_number = 6
- vermstring = "lizards"
+ vermstring = "ящериц"
if(VERM_SPIDERS)
spawn_types = list(/obj/structure/spider/spiderling)
max_number = 3
- vermstring = "spiders"
+ vermstring = "пауков"
var/amount_to_spawn = rand(2, max_number)
while(length(turfs) && amount_to_spawn > 0)
var/turf/simulated/floor/T = pick_n_take(turfs)
@@ -68,7 +68,7 @@
/datum/event/infestation/announce(false_alarm)
- var/vermin_chosen = vermstring || pick("spiders", "lizards", "mice")
+ var/vermin_chosen = vermstring || pick("пауков", "ящериц", "мышей")
if(!spawn_area_type)
if(false_alarm)
spawn_area_type = pick(spawn_areas)
@@ -76,7 +76,7 @@
log_debug("Infestation Event didn't provide an area to announce(), something is likely broken.")
kill()
- GLOB.minor_announcement.Announce("Bioscans indicate that [vermin_chosen] have been breeding in \the [initial(spawn_area_type.name)]. Clear them out, before this starts to affect productivity.", "Lifesign Alert")
+ GLOB.minor_announcement.Announce("Биосканеры фиксируют размножение [vermin_chosen] в [initial(spawn_area_type.name)]. Избавьтесь от них, прежде чем это начнет влиять на продуктивность станции.", "ВНИМАНИЕ: Неопознанные формы жизни.")
spawn_area_type = null
#undef VERM_MICE
diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm
index 3bee46a414aa..20195faa804d 100644
--- a/code/modules/events/ion_storm.dm
+++ b/code/modules/events/ion_storm.dm
@@ -18,7 +18,7 @@
/datum/event/ion_storm/announce(false_alarm)
if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance)) || false_alarm)
- GLOB.minor_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/AI/ions.ogg')
+ GLOB.minor_announcement.Announce("Вблизи станции обнаружена ионная буря. Пожалуйста, проверьте всё оборудование, управляемое ИИ, на наличие ошибок.", "ВНИМАНИЕ: Обнаружена аномалия.", 'sound/AI/ions.ogg')
/datum/event/ion_storm/start()
//AI laws
diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm
index ebd6bb89f252..f61893e11331 100644
--- a/code/modules/events/mass_hallucination.dm
+++ b/code/modules/events/mass_hallucination.dm
@@ -15,4 +15,4 @@
H.AdjustHallucinate(rand(50 SECONDS, 100 SECONDS))
/datum/event/mass_hallucination/announce()
- GLOB.minor_announcement.Announce("The [station_name()] is passing through a minor radiation field. Be advised that acute exposure to space radiation can induce hallucinogenic episodes.")
+ GLOB.minor_announcement.Announce("[station_name()] проходит через радиационное поле низкой интенсивности. Возможно появление галлюцинаций, но не более.")
diff --git a/code/modules/events/meaty_gore.dm b/code/modules/events/meaty_gore.dm
index 0e826acbeef9..60e7e5e76977 100644
--- a/code/modules/events/meaty_gore.dm
+++ b/code/modules/events/meaty_gore.dm
@@ -1,5 +1,5 @@
/datum/event/meteor_wave/gore/announce()
- GLOB.minor_announcement.Announce("Unknown biological debris have been detected near [station_name()], please stand-by.", "Debris Alert")
+ GLOB.minor_announcement.Announce("Неизвестные биологические отходы были обнаружены вблизи [station_name()], ожидайте.", "ВНИМАНИЕ: Космический мусор.")
/datum/event/meteor_wave/gore/setup()
waves = 3
@@ -11,4 +11,4 @@
return GLOB.meteors_gore
/datum/event/meteor_wave/gore/end()
- GLOB.minor_announcement.Announce("The station has cleared the debris.", "Debris Alert")
+ GLOB.minor_announcement.Announce("Станция прошла загрязненный участок.", "ВНИМАНИЕ: Космический мусор.")
diff --git a/code/modules/events/meaty_ores.dm b/code/modules/events/meaty_ores.dm
index 16624b38ca9d..27ec6a337327 100644
--- a/code/modules/events/meaty_ores.dm
+++ b/code/modules/events/meaty_ores.dm
@@ -1,8 +1,8 @@
/datum/event/dust/meaty/announce()
if(prob(16))
- GLOB.minor_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
+ GLOB.minor_announcement.Announce("Неизвестные биологические объекты были обнаружены рядом с [station_name()], пожалуйста, будьте наготове.", "ВНИМАНИЕ: Неопознанные формы жизни.")
else
- GLOB.minor_announcement.Announce("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert", new_sound = 'sound/AI/meteors.ogg')
+ GLOB.minor_announcement.Announce("На пути станции были обнаружены мясные метеоры.", "ВНИМАНИЕ: Мясориты.", new_sound = 'sound/AI/meteors.ogg')
/datum/event/dust/meaty/setup()
qnty = rand(45,125)
diff --git a/code/modules/events/meteors_event.dm b/code/modules/events/meteors_event.dm
index 39a2f79c5a6b..e713e349dc24 100644
--- a/code/modules/events/meteors_event.dm
+++ b/code/modules/events/meteors_event.dm
@@ -15,9 +15,9 @@
/datum/event/meteor_wave/announce(false_alarm)
if(severity == EVENT_LEVEL_MAJOR || (false_alarm && prob(30)))
- GLOB.minor_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
+ GLOB.minor_announcement.Announce("Зафиксировано движение астероидов на встречном со станцией курсе.", "ВНИМАНИЕ: Астероиды.", new_sound = 'sound/AI/meteors.ogg')
else
- GLOB.minor_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
+ GLOB.minor_announcement.Announce("Станция проходит через скопление астероидов.", "ВНИМАНИЕ: Астероиды.")
//meteor showers are lighter and more common,
/datum/event/meteor_wave/tick()
@@ -36,9 +36,9 @@
QDEL_NULL(screen_alert)
switch(severity)
if(EVENT_LEVEL_MAJOR)
- GLOB.minor_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
+ GLOB.minor_announcement.Announce("Станция прошла через астероидный пояс", "ВНИМАНИЕ: Астероиды.")
else
- GLOB.minor_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
+ GLOB.minor_announcement.Announce("Станция прошла через скопление астероидов", "ВНИМАНИЕ: Астероиды.")
/datum/event/meteor_wave/proc/get_meteors()
switch(severity)
diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm
index 4899a039ea2f..b192d7a5702f 100644
--- a/code/modules/events/prison_break.dm
+++ b/code/modules/events/prison_break.dm
@@ -35,7 +35,7 @@
/datum/event/prison_break/announce(false_alarm)
if(length(areas) || false_alarm)
- GLOB.minor_announcement.Announce("[pick("Gr3y.T1d3 virus", "S.E.L.F program", "Malignant trojan", "Runtime error", "Cybersun worm", "[pick("Castle", "Felix", "Fractal", "Paradox", "Rubiks", "Portcullis", "Hammer", "Lockpick", "Faust", "Dream")][pick(" 2.0","")] Daemon")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert")
+ GLOB.minor_announcement.Announce("[pick("Вирус `Gr3y.T1d3`", "S.E.L.F program", "Вредоносный троян", "Runtime error", "Cybersun worm", "[pick("Castle", "Felix", "Fractal", "Paradox", "Rubiks", "Portcullis", "Hammer", "Lockpick", "Faust", "Dream")][pick(" 2.0","")] Daemon")] обнаружен в подсистеме [(eventDept == "Security")? "заключения":"безопасности"] на [station_name()]. Немедленно обеспечьте безопасность всех затронутых отсеков. Рекомендуется вмешательство ИИ станции.", "ВНИМАНИЕ: Аварийное оповещение [eventDept].")
/datum/event/prison_break/start()
for(var/area/A in world)
diff --git a/code/modules/events/radiation_storm_event.dm b/code/modules/events/radiation_storm_event.dm
index b66afda780f3..e796e0d09f45 100644
--- a/code/modules/events/radiation_storm_event.dm
+++ b/code/modules/events/radiation_storm_event.dm
@@ -4,7 +4,7 @@
announceWhen = 1
/datum/event/radiation_storm/announce()
- GLOB.minor_announcement.Announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", 'sound/AI/radiation.ogg')
+ GLOB.minor_announcement.Announce("Вблизи станции обнаружено радиационное поле высокой интенсивности. Всему персоналу надлежит проследовать в технические тоннели.", "ВНИМАНИЕ: Радиационная опасность.", 'sound/AI/radiation.ogg')
//sound not longer matches the text, but an audible warning is probably good
/datum/event/radiation_storm/start()
diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm
index c4fe2d406503..c170d8328ebc 100644
--- a/code/modules/events/rogue_drones.dm
+++ b/code/modules/events/rogue_drones.dm
@@ -21,12 +21,12 @@
/datum/event/rogue_drone/announce()
var/msg
if(prob(33))
- msg = "A combat drone wing operating out of the NSV Icarus has failed to return from a sweep of this sector, if any are sighted approach with caution."
+ msg = "Группа боевых дронов, оперируемых с борта ИКН «Икар», не вернулась с зачистки сектора. В случае контакта с дронами проявляйте осторожность."
else if(prob(50))
- msg = "Contact has been lost with a combat drone wing operating out of the NSV Icarus. If any are sighted in the area, approach with caution."
+ msg = "Потеряна связь с группой боевых дронов, оперируемых с борта ИКН «Икар». В случае контакта с дронами проявляйте осторожность."
else
- msg = "Unidentified hackers have targeted a combat drone wing deployed from the NSV Icarus. If any are sighted in the area, approach with caution."
- GLOB.minor_announcement.Announce(msg, "Rogue drone alert")
+ msg = "Неопознанные хакеры взломали систему контроля боевых дронов, оперируемых с борта ИКН «Икар». В случае контакта с дронами проявляйте осторожность."
+ GLOB.minor_announcement.Announce(msg, "ВНИМАНИЕ: Обнаружены сбойные дроны.")
/datum/event/rogue_drone/tick()
return
@@ -39,6 +39,6 @@
num_recovered++
if(num_recovered > length(drones_list) * 0.75)
- GLOB.minor_announcement.Announce("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert")
+ GLOB.minor_announcement.Announce("Система контроля боевых дронов сообщает, что все единицы успешно вернулись на борт «Икара».", "ВНИМАНИЕ: Обнаружены сбойные дроны.")
else
- GLOB.minor_announcement.Announce("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert")
+ GLOB.minor_announcement.Announce("Система контроля боевых дронов сообщает о потере всех боевых единиц, однако жертв не зарегистрировано.", "ВНИМАНИЕ: Обнаружены сбойные дроны.")
diff --git a/code/modules/events/solarflare.dm b/code/modules/events/solarflare.dm
index b289dd7ea568..fff21ca5180d 100644
--- a/code/modules/events/solarflare.dm
+++ b/code/modules/events/solarflare.dm
@@ -4,7 +4,7 @@
announceWhen = 1
/datum/event/solar_flare/announce()
- GLOB.minor_announcement.Announce("A solar flare has been detected on collision course with the station. Do not conduct space walks or approach windows until the flare has passed!", "Incoming Solar Flare", 'sound/AI/flare.ogg')
+ GLOB.minor_announcement.Announce("Солнечная вспышка зафиксирована на встречном со станцией курсе. Не выходите в открытый космос и не приближайтесь к окнам до конца вспышки.", "ВНИМАНИЕ: Солнечная вспышка.", 'sound/AI/flare.ogg')
/datum/event/solar_flare/start()
SSweather.run_weather(/datum/weather/solar_flare)
diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm
index bcdee1f840ea..9f8495438b29 100644
--- a/code/modules/events/spider_infestation.dm
+++ b/code/modules/events/spider_infestation.dm
@@ -9,7 +9,7 @@
/datum/event/spider_infestation/announce(false_alarm)
if(successSpawn || false_alarm)
- GLOB.minor_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
+ GLOB.minor_announcement.Announce("Обнаружены неопознанные формы жизни на борту станции [station_name()]. Обезопасьте все наружные входы и выходы, включая вентиляцию и вытяжки.", "ВНИМАНИЕ: Неопознанные формы жизни.", new_sound = 'sound/AI/aliens.ogg')
else
log_and_message_admins("Warning: Could not spawn any mobs for event Spider Infestation")
diff --git a/code/modules/events/spider_terror.dm b/code/modules/events/spider_terror.dm
index ead04dc76e98..0e1001647650 100644
--- a/code/modules/events/spider_terror.dm
+++ b/code/modules/events/spider_terror.dm
@@ -11,7 +11,7 @@
/datum/event/spider_terror/announce(false_alarm)
if(successSpawn || false_alarm)
- GLOB.major_announcement.Announce("Terror Spider infestation detected aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren-spooky.ogg', new_sound2 = 'sound/AI/outbreak_terror.ogg')
+ GLOB.major_announcement.Announce("На борту [station_name()] обнаружены биологические сигнатуры заражения пауками Ужаса. Всему персоналу надлежит немедленно приступить к сдерживанию.", "ВНИМАНИЕ: Обнаружена биоугроза.", 'sound/effects/siren-spooky.ogg', new_sound2 = 'sound/AI/outbreak_terror.ogg')
else
log_and_message_admins("Warning: Could not spawn any mobs for event Terror Spiders")
diff --git a/code/modules/events/tear.dm b/code/modules/events/tear.dm
index 0e2fd84177e1..e93fb03c06dd 100644
--- a/code/modules/events/tear.dm
+++ b/code/modules/events/tear.dm
@@ -55,7 +55,7 @@
kill()
return
- GLOB.minor_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [target_area.name].", "Anomaly Alert", 'sound/AI/anomaly.ogg')
+ GLOB.minor_announcement.Announce("На борту станции зафиксирован пространственно-временной разрыв. Предполагаемая локация: [impact_area.name].", "ВНИМАНИЕ: Обнаружена аномалия.", 'sound/AI/anomaly.ogg')
/datum/event/tear/end()
if(TE)
diff --git a/code/modules/events/tear_honk.dm b/code/modules/events/tear_honk.dm
index b6d402412209..b0b537ba0dd9 100644
--- a/code/modules/events/tear_honk.dm
+++ b/code/modules/events/tear_honk.dm
@@ -8,7 +8,7 @@
HE = new /obj/effect/tear/honk(location)
/datum/event/tear/honk/announce()
- GLOB.minor_announcement.Announce("A Honknomoly has opened. Expected location: [impact_area.name].", "Honknomoly Alert", 'sound/items/airhorn.ogg')
+ GLOB.minor_announcement.Announce("На борту станции зафиксирована Хонканомалия. Предполагаемая локация: [impact_area.name].", "ВНИМАНИЕ: Обнаружена ХОНКАНОМАЛИЯ.", 'sound/items/airhorn.ogg')
/datum/event/tear/honk/end()
if(HE)
diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm
index a8505827d6a0..bf0fdadafb26 100644
--- a/code/modules/events/traders.dm
+++ b/code/modules/events/traders.dm
@@ -27,9 +27,9 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol"))
/datum/traders/nian)
if(SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED)
- GLOB.minor_announcement.Announce("A trading shuttle from [T.trader_location] has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused", 'sound/AI/traderdeny.ogg')
+ GLOB.minor_announcement.Announce("Торговому шаттлу от «[T.trader_location]» было отказано в стыковке в связи с повышенным уровнем угрозы на [station_name()].", "Запрос на стыковку шаттла отклонен.", 'sound/AI/traderdeny.ogg')
return
- GLOB.minor_announcement.Announce("A trading shuttle from [T.trader_location] has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted", 'sound/AI/tradergranted.ogg')
+ GLOB.minor_announcement.Announce("Торговому шаттлу от «[T.trader_location]» была одобрена стыковка с портом прибытия номер 4 станции [station_name()].", "Запрос на стыковку шаттла одобрен.", 'sound/AI/tradergranted.ogg')
/datum/event/traders/start()
@@ -48,7 +48,7 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol"))
/datum/traders/nian)
if(SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED)
- GLOB.minor_announcement.Announce("A trading shuttle from [T.trader_location] has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused", 'sound/AI/traderdeny.ogg')
+ GLOB.minor_announcement.Announce("Торговому шаттлу от «[T.trader_location]» было отказано в стыковке в связи с повышенным уровнем угрозы на [station_name()].", "Запрос на стыковку шаттла отклонен.", 'sound/AI/traderdeny.ogg')
// if the docking request was refused, fire another major event in 60 seconds
var/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MAJOR]
EC.next_event_time = world.time + (60 * 10)
@@ -102,7 +102,7 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol"))
greet_trader(M, T)
success_spawn = TRUE
if(success_spawn)
- GLOB.minor_announcement.Announce("A trading shuttle from [T.trader_location] has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted", 'sound/AI/tradergranted.ogg')
+ GLOB.minor_announcement.Announce("Торговому шаттлу от «[T.trader_location]» была одобрена стыковка с портом прибытия номер 4 станции [station_name()].", "Запрос на стыковку шаттла одобрен.", 'sound/AI/tradergranted.ogg')
else
GLOB.unused_trade_stations += station // Return the station to the list of usable stations.
diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm
index f00a3415d2fe..01ed4b33c88c 100644
--- a/code/modules/events/vent_clog.dm
+++ b/code/modules/events/vent_clog.dm
@@ -6,7 +6,7 @@
var/list/vents = list()
/datum/event/vent_clog/announce()
- GLOB.minor_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert", 'sound/AI/scrubbers.ogg')
+ GLOB.minor_announcement.Announce("Зафиксирован скачок обратного давления в системе вытяжных труб. Возможен выброс содержимого.", "ВНИМАНИЕ: Атмосферная тревога.", 'sound/AI/scrubbers.ogg')
/datum/event/vent_clog/setup()
endWhen = rand(25, 100)
diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm
index 42b43f179fbf..4f302d132168 100644
--- a/code/modules/events/wormholes.dm
+++ b/code/modules/events/wormholes.dm
@@ -21,7 +21,7 @@
wormholes += new /obj/effect/portal/wormhole(T, null, null, -1)
/datum/event/wormholes/announce()
- GLOB.minor_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg')
+ GLOB.minor_announcement.Announce("Зафиксированы пространственно-временные аномалии на борту станции. Дополнительная информация отсутствует.", "ВНИМАНИЕ: Обнаружена аномалия.", new_sound = 'sound/AI/spanomalies.ogg')
/datum/event/wormholes/tick()
if(activeFor % shift_frequency == 0)
diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index b0371fbacd55..7fe80f7a379c 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -16,27 +16,27 @@
volume = 50
//Possible_states has the reagent id as key and a list of, in order, the icon_state, the name and the desc as values. Used in the on_reagent_change() to change names, descs and sprites.
var/list/possible_states = list(
- "bbqsauce" = list("bbqsauce", "BBQ sauce bottle", "Sweet, smoky, savory, and gets everywhere. Perfect for grilling."),
- "ketchup" = list("ketchup", "ketchup bottle", "You feel more American already."),
- "capsaicin" = list("hotsauce", "hotsauce bottle", "You can almost TASTE the stomach ulcers now!"),
- "enzyme" = list("enzyme", "universal enzyme bottle", "Used in cooking various dishes."),
- "soysauce" = list("soysauce", "soy sauce bottle", "A salty soy-based flavoring."),
- "frostoil" = list("coldsauce", "coldsauce bottle", "Leaves the tongue numb in it's passage."),
- "sodiumchloride" = list("saltshakersmall", "salt shaker", "Salt. From space oceans, presumably."),
- "blackpepper" = list("peppermillsmall", "pepper mill", "Often used to flavor food or make people sneeze."),
- "cornoil" = list("cornoil", "corn oil bottle", "A delicious oil used in cooking. Made from corn."),
- "oliveoil" = list("oliveoil","olive oil bottle", "A high quality oil used in a variety of cuisine. Made from olives."),
- "wasabi" = list("wasabibottle", "wasabi bottle", "A pungent paste commonly served in tiny amounts with sushi. Spicy!"),
- "sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!"),
- "vinegar" = list("vinegar", "vinegar", "Perfect for chips, if you're feeling Space British."),
- "mayonnaise" = list("mayonnaise", "mayonnaise bottle", "An oily condiment made from egg yolks."),
- "yogurt" = list("yogurt", "yogurt tub", "Some yogurt, produced by bacterial fermentation of milk. Yum."),
- "cherryjelly" = list("cherryjelly", "cherry jelly jar", "A sweet jelly made out of red cherries."),
- "peanutbutter" = list("peanutbutter", "peanut butter jar", "A smooth, nutty spread. Perfect for sandwiches."),
- "honey" = list("honey", "honey jar", "A sweet substance produced by bees."),
- "sugar" = list("sugar", "sugar sack", "Tasty spacey sugar!"),
- "flour" = list("flour", "flour sack", "A big bag of flour. Good for baking!"),
- "rice" = list("rice", "rice sack", "A big bag of rice. Good for cooking!"))
+ "bbqsauce" = list("bbqsauce", "BBQ sauce bottle", "Сладкий и пикантный для добавок всюду. Идеален для гриля."),
+ "ketchup" = list("ketchup", "ketchup bottle", "Кровь томатов!"),
+ "capsaicin" = list("hotsauce", "hotsauce bottle", "Попробуй на вкус ИЗЖОГУ!"),
+ "enzyme" = list("enzyme", "universal enzyme bottle", "Используется для приготовления различных блюд."),
+ "soysauce" = list("soysauce", "soy sauce bottle", "Соленый соевый соус. Если попал на одежду, то замочи в нём её всю."),
+ "frostoil" = list("coldsauce", "coldsauce bottle", "Пробирает до мурашек и оставляет язык онемевшим после потребления."),
+ "sodiumchloride" = list("saltshakersmall", "salt shaker", "Соль. Предположительно, из космических океанов."),
+ "blackpepper" = list("peppermillsmall", "pepper mill", "Часто используется для придания пряного вкуса блюдам или чтобы заставить кого-то чихнуть."),
+ "cornoil" = list("cornoil", "corn oil bottle", "Вкусное масло, используемое в кулинарии. Сделано из кукурузы."),
+ "oliveoil" = list("oliveoil","olive oil bottle", "Высококачественное масло, используемое в различных кухнях. Сделано из оливок."),
+ "wasabi" = list("wasabibottle", "wasabi bottle", "Пикантная паста, обычно подаваемая в небольших количествах с суши. Острая!"),
+ "sugar" = list("emptycondiment", "sugar bottle", "Вкусный космический сахар!"),
+ "vinegar" = list("vinegar", "vinegar", "Уксус прекрасно подходит для дезинфекции, консервации, удаления накипи, устранения запахов, полоскания рта, убирания ржавчины, удаление пятна с одежды, обработку зуда после укусов, а также для заправки салатов, соусов и блюд."),
+ "mayonnaise" = list("mayonnaise", "mayonnaise bottle", "Прекрасная заправка для всего и отличное сочетание с кетчупом."),
+ "yogurt" = list("yogurt", "yogurt tub", "Йогурт, произведённый путём бактериальной ферментации молока. Вкусно!"),
+ "cherryjelly" = list("cherryjelly", "Повидло из красной вишни."),
+ "peanutbutter" = list("peanutbutter", "Нежная ореховая паста. Отлично подходит для бутербродов и аллергиков."),
+ "honey" = list("honey", "honey jar", "Сладкое вещество, производимое пчёлами."),
+ "sugar" = list("sugar", "sugar sack", "Большой мешок сахара. Отлично подходит для сладостей!"),
+ "flour" = list("flour", "flour sack", "Большой мешок муки. Отлично подходит для выпечки!"),
+ "rice" = list("rice", "rice sack", "Большой мешок риса. Отлично подходит для готовки!"))
var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters.
/obj/item/reagent_containers/condiment/attack_self__legacy__attackchain(mob/user)
@@ -117,12 +117,12 @@
else
icon_state = "emptycondiment"
name = "condiment bottle"
- desc = "An empty condiment bottle."
+ desc = "Пустая бутылка для соуса"
update_appearance(UPDATE_NAME)
/obj/item/reagent_containers/condiment/enzyme
name = "universal enzyme"
- desc = "Used in cooking various dishes."
+ desc = "Используется для приготовления различных блюд."
icon_state = "enzyme"
list_reagents = list("enzyme" = 50)
@@ -131,7 +131,7 @@
/obj/item/reagent_containers/condiment/sugar
name = "sugar sack"
- desc = "Tasty spacey sugar!"
+ desc = "Космический сахар. Слаще, чем кажется."
icon_state = "sugar"
item_state = "sugar"
list_reagents = list("sugar" = 50)
@@ -140,7 +140,7 @@
/// Seperate from above since it's a small shaker rather then
/obj/item/reagent_containers/condiment/saltshaker
name = "salt shaker" // a large one.
- desc = "Salt. From space oceans, presumably."
+ desc = "Соль. Предположительно, из космических океанов."
icon_state = "saltshakersmall"
possible_transfer_amounts = list(1,20) //for clown turning the lid off
amount_per_transfer_from_this = 1
@@ -154,7 +154,7 @@
name = "[user.name]"
user.name = newname
user.real_name = newname
- desc = "Salt. From dead crew, presumably."
+ desc = "Соль. Предположительно, из мёртвого члена экипажа"
var/space = reagents.maximum_volume - reagents.total_volume
if(space > 0)
reagents.add_reagent("sodiumchloride", space)
@@ -162,7 +162,7 @@
/obj/item/reagent_containers/condiment/peppermill
name = "pepper mill"
- desc = "Often used to flavor food or make people sneeze."
+ desc = "Часто используется для придания пряного вкуса блюдам или чтобы заставить кого-то чихнуть."
icon_state = "peppermillsmall"
possible_transfer_amounts = list(1,20) //for clown turning the lid off
amount_per_transfer_from_this = 1
@@ -172,7 +172,7 @@
/obj/item/reagent_containers/condiment/milk
name = "space milk"
- desc = "It's milk. White and nutritious goodness!"
+ desc = "Пейте дети и скелеты молоко - будете здоровы!"
icon_state = "milk"
item_state = "carton"
list_reagents = list("milk" = 50)
@@ -180,7 +180,7 @@
/obj/item/reagent_containers/condiment/flour
name = "flour sack"
- desc = "A big bag of flour. Good for baking!"
+ desc = "Большой мешок муки. Отлично подходит для выпечки!"
icon_state = "flour"
item_state = "flour"
list_reagents = list("flour" = 30)
@@ -188,14 +188,14 @@
/obj/item/reagent_containers/condiment/bbqsauce
name = "BBQ sauce"
- desc = "Sweet, smoky, savory, and gets everywhere. Perfect for grilling."
+ desc = "Сладкий и пикантный, подходит в качестве добавки всюду. Идеален для гриля."
icon_state = "bbqsauce"
list_reagents = list("bbqsauce" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/soymilk
name = "soy milk"
- desc = "It's soy milk. White and nutritious goodness!"
+ desc = "Это соевое молоко. Подходит, если у вас непереносимость лактозы."
icon_state = "soymilk"
item_state = "carton"
list_reagents = list("soymilk" = 50)
@@ -203,7 +203,7 @@
/obj/item/reagent_containers/condiment/rice
name = "rice sack"
- desc = "A big bag of rice. Good for cooking!"
+ desc = "Большой мешок риса. Отлично подходит для готовки!"
icon_state = "rice"
item_state = "flour"
list_reagents = list("rice" = 30)
@@ -211,90 +211,90 @@
/obj/item/reagent_containers/condiment/soysauce
name = "soy sauce"
- desc = "A salty soy-based flavoring."
+ desc = "Соленый соевый соус. Если попал на одежду, то замочи в нём её всю."
icon_state = "soysauce"
list_reagents = list("soysauce" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/syndisauce
name = "\improper Chef Excellence's Special Sauce"
- desc = "A potent sauce extracted from the potent amanita mushrooms. Death never tasted quite so delicious."
+ desc = "Мощный соус, изготовленный из ядовитых грибов-амманитов. Смерть никогда не имела такого восхитительного привкуса."
list_reagents = list("amanitin" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/mayonnaise
name = "mayonnaise"
- desc = "An oily condiment made from egg yolks."
+ desc = "Прекрасная заправка для всего и отличное сочетание с кетчупом."
icon_state = "mayonnaise"
list_reagents = list("mayonnaise" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/yogurt
name = "yogurt tub"
- desc = "Some yogurt, produced by bacterial fermentation of milk. Yum."
+ desc = "Йогурт, произведённый путём бактериальной ферментации молока. Вкусно!"
icon_state = "yogurt"
list_reagents = list("yogurt" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/cherryjelly
name = "cherry jelly"
- desc = "A sweet jelly made out of red cherries."
+ desc = "Повидло из красной вишни."
icon_state = "cherryjelly"
list_reagents = list("cherryjelly" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/peanutbutter
name = "peanut butter"
- desc = "A smooth, nutty spread. Perfect for sandwiches."
+ desc = "Нежная ореховая паста. Отлично подходит для бутербродов и аллергиков."
icon_state = "peanutbutter"
list_reagents = list("peanutbutter" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/honey
name = "honey"
- desc = "A sweet substance produced by bees."
+ desc = "Сладкое вещество, производимое пчёлами."
icon_state = "honey"
list_reagents = list("honey" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/oliveoil
name = "olive oil"
- desc = "A high quality oil derived from olives."
+ desc = "Высококачественное масло, используемое в различных кухнях. Сделано из оливок."
icon_state = "oliveoil"
list_reagents = list("oliveoil" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/frostoil
name = "cold sauce"
- desc = "A special oil that noticably chills the body. Extraced from Icepeppers."
+ desc = "Пробирает до мурашек и оставляет язык онемевшим после потребления."
icon_state = "coldsauce"
list_reagents = list("frostoil" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/capsaicin
name = "hot sauce"
- desc = "You can almost TASTE the stomach ulcers now!"
+ desc = "Попробуй на вкус ИЗЖОГУ!"
icon_state = "hotsauce"
list_reagents = list("capsaicin" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/wasabi
name = "wasabi"
- desc= "A pungent paste commonly served in tiny amounts with sushi. Spicy!"
+ desc= "Пикантная паста, обычно подаваемая в небольших количествах с суши. Острая!"
icon_state = "wasabibottle"
list_reagents = list("wasabi" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/vinegar
name = "vinegar"
- desc = "Useful for pickling, or putting on chips."
+ desc = "Подходит для засолки. Лучше не пить даже бесплатно."
icon_state = "vinegar"
list_reagents = list("vinegar" = 50)
possible_states = list()
/obj/item/reagent_containers/condiment/ketchup
name = "ketchup"
- desc = "You feel more American already."
+ desc = "Кровь томатов!"
icon_state = "ketchup"
list_reagents = list("ketchup" = 50)
possible_states = list()
@@ -303,21 +303,21 @@
/obj/item/reagent_containers/condiment/pack
name = "condiment pack"
- desc = "A small plastic pack with condiments to put on your food."
+ desc = "Небольшая пластиковая упаковка с приправой для добавления в пищу."
icon_state = "condi_empty"
volume = 10
amount_per_transfer_from_this = 10
possible_transfer_amounts = null
possible_states = list(
- "ketchup" = list("condi_ketchup", "Ketchup", "You feel more American already."),
- "capsaicin" = list("condi_hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"),
- "soysauce" = list("condi_soysauce", "Soy Sauce", "A salty soy-based flavoring."),
- "frostoil" = list("condi_frostoil", "Coldsauce", "Leaves the tongue numb in it's passage."),
- "sodiumchloride" = list("condi_salt", "Salt Shaker", "Salt. From space oceans, presumably."),
- "blackpepper" = list("condi_pepper", "Pepper Mill", "Often used to flavor food or make people sneeze."),
- "cornoil" = list("condi_cornoil", "Corn Oil", "A delicious oil used in cooking. Made from corn."),
- "sugar" = list("condi_sugar", "Sugar", "Tasty spacey sugar!"),
- "vinegar" =list("condi_mixed", "vinegar", "Perfect for chips, if you're feeling Space British."))
+ "ketchup" = list("condi_ketchup", "Ketchup", "Кровь томатов!"),
+ "capsaicin" = list("condi_hotsauce", "Hotsauce", "Попробуй на вкус ИЗЖОГУ!"),
+ "soysauce" = list("condi_soysauce", "Soy Sauce", "Соленый соевый соус. Если попал на одежду, то замочи в нём её всю."),
+ "frostoil" = list("condi_frostoil", "Coldsauce", "Пробирает до мурашек и оставляет язык онемевшим после потребления."),
+ "sodiumchloride" = list("condi_salt", "Salt Shaker", "Соль. Предположительно, из космических океанов."),
+ "blackpepper" = list("condi_pepper", "Pepper Mill", "Часто используется для придания вкуса блюдам или чтобы заставить кого-то чихнуть."),
+ "cornoil" = list("condi_cornoil", "Corn Oil", "Вкусное масло, используемое в кулинарии. Сделано из кукурузы."),
+ "sugar" = list("condi_sugar", "Sugar", "Небольшой пакетик с сахаром."),
+ "vinegar" =list("condi_mixed", "vinegar", "Уксус прекрасно подходит для дезинфекции, консервации, удаления накипи, устранения запахов, полоскания рта, убирания ржавчины, удаление пятна с одежды, обработку зуда после укусов, а также для заправки салатов, соусов и блюд."))
/obj/item/reagent_containers/condiment/pack/attack__legacy__attackchain(mob/M, mob/user, def_zone) //Can't feed these to people directly.
return
@@ -349,10 +349,10 @@
desc = temp_list[3]
else
icon_state = "condi_mixed"
- desc = "A small condiment pack. The label says it contains [originalname]."
+ desc = "Небольшая упаковка с приправой. На ярлыке написано, что она содержит [originalname]."
else
icon_state = "condi_empty"
- desc = "A small condiment pack. It is empty."
+ desc = "Небольшая упаковка для приправ. Она пуста."
//Ketchup
/obj/item/reagent_containers/condiment/pack/ketchup
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index 5f4199d33309..c5a8b855a9a4 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -42,7 +42,7 @@ do {\
/obj/item/trash/bowl
name = "bowl"
- desc = "An empty bowl. Put some food in it to start making a soup."
+ desc = "Пустая миска. Положи в неё еду, чтобы приготовить суп."
icon = 'icons/obj/food/custom.dmi'
icon_state = "soup"
@@ -56,7 +56,7 @@ do {\
/obj/item/food/customizable
name = "sandwich"
- desc = "A sandwich! A timeless classic."
+ desc = "Это бутерброд. Отличный перекус!"
icon = 'icons/obj/food/custom.dmi'
icon_state = "sandwichcustom"
var/baseicon = "sandwichcustom"
@@ -82,7 +82,7 @@ do {\
/obj/item/food/customizable/sandwich
name = "sandwich"
- desc = "A sandwich! A timeless classic."
+ desc = "Это бутерброд. Отличный перекус!"
icon_state = "sandwichcustom"
baseicon = "sandwichcustom"
basename = "sandwich"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index f3d1fff923d0..a1f42ad50fb3 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -1,6 +1,6 @@
/obj/machinery/cooker/deepfryer
- name = "deep fryer"
- desc = "Deep fried everything."
+ name = "фритюрница"
+ desc = "Обжарить во фритюре всё."
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "fryer_off"
thiscooktype = "deep fried"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm b/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
index d44d9e3caadc..579225930f9e 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill_new.dm
@@ -1,7 +1,7 @@
/obj/machinery/kitchen_machine/grill
- name = "grill"
- desc = "Backyard grilling, IN SPACE."
+ name = "гриль"
+ desc = "Гриль на заднем дворе, В КОСМОСЕ."
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "grill_off"
cook_verbs = list("Grilling", "Searing", "Frying")
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index a36949ecbd68..af31cb765294 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -1,7 +1,7 @@
/obj/machinery/kitchen_machine/microwave
- name = "microwave"
- desc = "A microwave, perfect for reheating things with radiation."
+ name = "микроволновка"
+ desc = "Микроволновка. Идеальна для перенагревания вещей излучением."
icon = 'icons/obj/kitchen.dmi'
icon_state = "mw"
cook_verbs = list("Microwaving", "Reheating", "Heating")
diff --git a/code/modules/food_and_drinks/kitchen_machinery/oven_new.dm b/code/modules/food_and_drinks/kitchen_machinery/oven_new.dm
index 6abaa5d8d0d9..99197decb621 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/oven_new.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/oven_new.dm
@@ -1,7 +1,7 @@
/obj/machinery/kitchen_machine/oven
- name = "oven"
- desc = "Cookies are ready, dear."
+ name = "печь"
+ desc = "Печенье готово, дорогой."
icon = 'icons/obj/cooking_machines.dmi'
icon_state = "oven_off"
cook_verbs = list("Baking", "Roasting", "Broiling")
diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
index 7926e2edf5a0..28d8b0a58ad9 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm
@@ -1,5 +1,5 @@
/obj/machinery/processor
- name = "\improper Food Processor"
+ name = "\improper кухонный комбайн"
desc = "Used for turning ingredients into other ingredients."
icon = 'icons/obj/kitchen.dmi'
icon_state = "processor"
diff --git a/code/modules/hallucinations/effects/minor.dm b/code/modules/hallucinations/effects/minor.dm
index 7a1d8d8211df..641ad9f14e7f 100644
--- a/code/modules/hallucinations/effects/minor.dm
+++ b/code/modules/hallucinations/effects/minor.dm
@@ -117,21 +117,21 @@
duration = 3 SECONDS
/// List of messages that may be heard.
var/list/messages = list(
- "I'm watching you...",
- "I'm going to kill you!",
- "Get out!",
- "Kchck-Chkck? Kchchck!",
- "Did you hear that?",
- "What did you do?",
- "Why?",
- "Give me that!",
- "Honk!",
- "Kill me!",
- "HELP!!",
- "RUN!!",
+ "Я слежу за тобой...",
+ "Я убью тебя!",
+ "Пошёл нахуй!",
+ "Чкчкчк? Чик-чик!",
+ "Ты слышал это?",
+ "Что ты наделал?",
+ "Почему?",
+ "Отдай!",
+ "Хонк!",
+ "Убейте меня!",
+ "ПОМОГИТЕ!!",
+ "БЕГИ!!",
"EI NATH!!",
"O bidai nabora se'sma!",
- "I have the disk!",
+ "У меня диск!",
)
/obj/effect/hallucination/speech/Initialize(mapload, mob/living/carbon/target)
diff --git a/code/modules/library/library_computer.dm b/code/modules/library/library_computer.dm
index 54c6f3a900ce..281164b8dcb7 100644
--- a/code/modules/library/library_computer.dm
+++ b/code/modules/library/library_computer.dm
@@ -285,17 +285,17 @@
var/datum/cachedbook/selectedbook = GLOB.library_catalog.get_book_by_id(params["bookid"])
if(!selectedbook)
playsound(src, 'sound/machines/synth_no.ogg', 15, TRUE)
- atom_say("Deletion Failed!")
+ atom_say("Удаление не удалось!")
return
if(selectedbook.ckey != params["user_ckey"])
message_admins("[params["user_ckey"]] attempted to delete a book that wasn't theirs, this shouldn't happen, please investigate.")
return
if(GLOB.library_catalog.remove_book_by_id(params["bookid"])) //this doesn't need to be logged
playsound(loc, 'sound/machines/ping.ogg', 25, 0)
- atom_say("Deletion Successful!")
+ atom_say("Успешно удалено!")
return
playsound(src, 'sound/machines/synth_no.ogg', 15, TRUE)
- atom_say("Deletion Failed!")
+ atom_say("Удаление не удалось!")
//rating acts
@@ -305,16 +305,16 @@
if("rate_book")
if(GLOB.library_catalog.rate_book(params["user_ckey"], params["bookid"], user_data.selected_rating))
playsound(loc, 'sound/machines/ping.ogg', 25, 0)
- atom_say("Rating Successful!")
+ atom_say("Оценка принята!")
populate_booklist()
//Report Acts
if("submit_report")
if(GLOB.library_catalog.flag_book_by_id(params["user_ckey"], params["bookid"], selected_report))
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
- atom_say("Report Submitted!")
+ atom_say("Жалоба отправлена!")
return
playsound(src, 'sound/machines/synth_no.ogg', 15, TRUE)
- atom_say("Report Submission Failed!")
+ atom_say("Отправка жалобы не удалась!")
if("set_report")
selected_report = text2num(params["report_type"])
//Book Uploader
@@ -334,10 +334,10 @@
return
if(GLOB.library_catalog.upload_book(ui.user.ckey, user_data.selected_book))
playsound(src, 'sound/machines/ping.ogg', 50, 0)
- atom_say("Book Uploaded!")
+ atom_say("Книга загружена!")
return
playsound(src, 'sound/machines/synth_no.ogg', 15, TRUE)
- atom_say("Book Upload Failed!")
+ atom_say("Загрузка книги не удалась!")
num_pages = getmaxpages()
if("reportlost")
inventoryRemove(text2num(params["libraryid"]))
diff --git a/code/modules/mob/dead/observer/observer_base.dm b/code/modules/mob/dead/observer/observer_base.dm
index 20eb899bb9b2..bdd8dc15218d 100644
--- a/code/modules/mob/dead/observer/observer_base.dm
+++ b/code/modules/mob/dead/observer/observer_base.dm
@@ -316,7 +316,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/get_status_tab_items()
var/list/status_tab_data = ..()
. = status_tab_data
- status_tab_data[++status_tab_data.len] = list("Respawnability:", "[HAS_TRAIT(src, TRAIT_RESPAWNABLE) ? "Yes" : "No"]")
+ status_tab_data[++status_tab_data.len] = list("Возможность респавна:", "[HAS_TRAIT(src, TRAIT_RESPAWNABLE) ? "Да" : "Нет"]")
/mob/dead/observer/verb/reenter_corpse()
set category = "Ghost"
diff --git a/code/modules/mob/living/brain/brain_emote.dm b/code/modules/mob/living/brain/brain_emote.dm
index 68e61de98ef8..f84971923480 100644
--- a/code/modules/mob/living/brain/brain_emote.dm
+++ b/code/modules/mob/living/brain/brain_emote.dm
@@ -29,38 +29,38 @@
/datum/emote/living/brain/alarm
key = "alarm"
key_third_person = "alarms"
- message = "sounds an alarm."
- self_message = "You sound an alarm."
+ message = "подаёт сигнал тревоги."
+ self_message = "Вы подаёте сигнал тревоги."
/datum/emote/living/brain/alert
key = "alert"
key_third_person = "alerts"
- message = "lets out a distressed noise."
- self_message = "You let out a distressed noise."
+ message = "издаёт страдальческий звук."
+ self_message = "Вы издаёте страдальческий звук."
/datum/emote/living/brain/notice
key = "notice"
- message = "plays a loud tone."
- self_message = "You play a loud tone."
+ message = "воспроизводит громкий звук."
+ self_message = "Вы воспроизводите громкий звук."
/datum/emote/living/brain/flash
key = "flash"
- message = "starts flashing its lights quickly!"
+ message = "начинает быстро мигать лампочками!"
/datum/emote/living/brain/whistle
key = "whistle"
key_third_person = "whistles"
- message = "whistles."
- self_message = "You whistle."
+ message = "свистит."
+ self_message = "Вы свистите."
/datum/emote/living/brain/beep
key = "beep"
key_third_person = "beeps"
- message = "beeps."
- self_message = "You beep."
+ message = "бипает."
+ self_message = "Вы бипаете."
/datum/emote/living/brain/boop
key = "boop"
key_third_person = "boops"
- message = "boops."
- self_message = "You boop."
+ message = "бупает."
+ self_message = "Вы бупаете."
diff --git a/code/modules/mob/living/carbon/alien/alien_base.dm b/code/modules/mob/living/carbon/alien/alien_base.dm
index 557757b751e7..e4c1bbc1fcbd 100644
--- a/code/modules/mob/living/carbon/alien/alien_base.dm
+++ b/code/modules/mob/living/carbon/alien/alien_base.dm
@@ -20,7 +20,7 @@
var/heat_protection = 0.5
var/leaping = FALSE
ventcrawler = VENTCRAWLER_ALWAYS
- var/death_message = "lets out a waning guttural screech, green blood bubbling from its maw..."
+ var/death_message = "издаёт ослабевший истошный визг, из её пасти пузырится зелёная кровь..."
var/death_sound = 'sound/voice/hiss6.ogg'
/mob/living/carbon/alien/Initialize(mapload)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_emote.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_emote.dm
index f6095a0b2318..aa07f105f77a 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_emote.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_emote.dm
@@ -7,8 +7,8 @@
/datum/emote/living/carbon/alien_humanoid/roar
key = "roar"
key_third_person = "roars"
- message = "roars!"
- message_param = "roars at %t!"
+ message = "рычит!"
+ message_param = "рычит на %t!"
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
sound = "sound/voice/hiss5.ogg"
volume = 80
@@ -16,8 +16,8 @@
/datum/emote/living/carbon/alien_humanoid/hiss
key = "hiss"
key_third_person = "hisses"
- message = "hisses!"
- message_param = "hisses at %t!"
+ message = "шипит!"
+ message_param = "шипит на %t!"
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
sound = "sound/voice/hiss1.ogg"
volume = 30
@@ -25,8 +25,8 @@
/datum/emote/living/carbon/alien_humanoid/gnarl
key = "gnarl"
key_third_person = "gnarls"
- message = "gnarls and shows its teeth."
- message_param = "gnarls and flashes its teeth at %t."
+ message = "оскаливается и показывает зубы."
+ message_param = "оскаливается на %t и показывает зубы."
sound = "sound/voice/hiss4.ogg"
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
volume = 30
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 1f882728bc90..805d613b4afd 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -13,7 +13,7 @@
var/temperature_resistance = T0C+75
var/amount_grown = 0
var/max_grown = 200
- death_message = "lets out a waning high-pitched cry."
+ death_message = "издаёт истошный высокочастотный рёв, затем ослабев падает на пол."
death_sound = null
hud_type = /datum/hud/larva
diff --git a/code/modules/mob/living/carbon/carbon_emote.dm b/code/modules/mob/living/carbon/carbon_emote.dm
index a43c1680d0bb..ec73ccc20ee3 100644
--- a/code/modules/mob/living/carbon/carbon_emote.dm
+++ b/code/modules/mob/living/carbon/carbon_emote.dm
@@ -4,31 +4,31 @@
/datum/emote/living/carbon/blink
key = "blink"
key_third_person = "blinks"
- message = "blinks."
+ message = "моргает."
/datum/emote/living/carbon/blink_r
key = "blink_r"
- message = "blinks rapidly."
+ message = "быстро моргает."
/datum/emote/living/carbon/cross
key = "cross"
key_third_person = "crosses"
- message = "crosses their arms."
+ message = "скрещивает руки."
hands_use_check = TRUE
/datum/emote/living/carbon/chuckle
key = "chuckle"
key_third_person = "chuckles"
- message = "chuckles."
- message_mime = "appears to chuckle."
+ message = "усмехается."
+ message_mime = "беззвучно усмехается."
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
- muzzled_noises = list("joyful", "upbeat")
+ muzzled_noises = list("радостный", "оптимистичный")
/datum/emote/living/carbon/cough
key = "cough"
key_third_person = "coughs"
- message = "coughs!"
- message_mime = "appears to cough!"
+ message = "кашляет!"
+ message_mime = "бесшумно кашляет!"
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
vary = TRUE
age_based = TRUE
@@ -49,96 +49,96 @@
/datum/emote/living/carbon/moan
key = "moan"
key_third_person = "moans"
- message = "moans!"
- message_mime = "appears to moan!"
- muzzled_noises = list("pained")
+ message = "стонет!"
+ message_mime = "как будто стонет!"
+ muzzled_noises = list("страдальческий")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/carbon/giggle
key = "giggle"
key_third_person = "giggles"
- message = "giggles."
- message_mime = "giggles silently!"
- muzzled_noises = list("bubbly")
+ message = "хихикает."
+ message_mime = "бесшумно хихикает!"
+ muzzled_noises = list("шипучий")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
/datum/emote/living/carbon/gurgle
key = "gurgle"
key_third_person = "gurgles"
- message = "makes an uncomfortable gurgle."
- muzzled_noises = list("unpleasant", "guttural")
+ message = "издает неприятное булькание."
+ muzzled_noises = list("недовольный", "гортанный")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/carbon/inhale
key = "inhale"
key_third_person = "inhales"
- message = "breathes in."
+ message = "вдыхает."
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
- muzzled_noises = list("breathy")
+ muzzled_noises = list("хриплый")
/datum/emote/living/carbon/inhale/sharp
key = "inhale_s"
key_third_person = "inhales sharply!"
- message = "takes a deep breath!"
+ message = "делает глубокий вдох!"
/datum/emote/living/carbon/kiss
key = "kiss"
key_third_person = "kisses"
- message = "blows a kiss."
- message_param = "blows a kiss at %t!"
- muzzled_noises = list("smooching")
+ message = "посылает воздушный поцелуй."
+ message_param = "посылает воздушный поцелуй %t!"
+ muzzled_noises = list("чмокающий")
/datum/emote/living/carbon/wave
key = "wave"
key_third_person = "waves"
- message = "waves."
- message_param = "waves at %t."
+ message = "машет."
+ message_param = "машет %t."
hands_use_check = TRUE
/datum/emote/living/carbon/yawn
key = "yawn"
key_third_person = "yawns"
- message = "yawns."
+ message = "зевает."
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
- muzzled_noises = list("tired", "lazy", "sleepy")
+ muzzled_noises = list("усталый", "ленивый", "сонный")
/datum/emote/living/carbon/exhale
key = "exhale"
key_third_person = "exhales"
- message = "breathes out."
+ message = "выдыхает."
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
/datum/emote/living/carbon/laugh
key = "laugh"
key_third_person = "laughs"
- message = "laughs."
- message_mime = "laughs silently!"
- message_param = "laughs at %t."
- muzzled_noises = list("happy", "joyful")
+ message = "смеётся."
+ message_mime = "бесшумно смеётся!"
+ message_param = "смеется над %t."
+ muzzled_noises = list("счастливый", "веселый")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
/datum/emote/living/carbon/scowl
key = "scowl"
key_third_person = "scowls"
- message = "scowls."
+ message = "хмурится."
/datum/emote/living/groan
key = "groan"
key_third_person = "groans"
- message = "groans!"
- message_mime = "appears to groan!"
- message_param = "groans at %t."
- muzzled_noises = list("pained")
+ message = "болезненно вздыхает!"
+ message_mime = "как будто болезненно вздыхает!"
+ message_param = "болезненно вздыхает на %t."
+ muzzled_noises = list("страдальческий")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/carbon/sign
key = "sign"
key_third_person = "signs"
- message = "signs."
- message_param = "signs the number %t."
+ message = "показывает число."
+ message_param = "показывает число: %t."
param_desc = "number(0-10)"
// Humans get their own proc since they have fingers
mob_type_blacklist_typecache = list(/mob/living/carbon/human)
@@ -148,7 +148,7 @@
/datum/emote/living/carbon/faint
key = "faint"
key_third_person = "faints"
- message = "faints."
+ message = "теряет сознание."
/datum/emote/living/carbon/faint/run_emote(mob/user, params, type_override, intentional)
. = ..()
@@ -159,13 +159,13 @@
/datum/emote/living/carbon/twirl
key = "twirl"
key_third_person = "twirls"
- message = "twirls something around in their hand."
+ message = "вертит что-то в руке."
hands_use_check = TRUE
/datum/emote/living/carbon/twirl/run_emote(mob/user, params, type_override, intentional)
if(!(user.get_active_hand() || user.get_inactive_hand()))
- to_chat(user, "You need something in your hand to use this emote!")
+ to_chat(user, "Вы должны держать что-то в руках, чтобы использовать эту эмоцию!")
return TRUE
var/obj/item/thing
@@ -177,12 +177,12 @@
if(istype(thing, /obj/item/grab))
var/obj/item/grab/grabbed = thing
- message = "twirls [grabbed.affecting.name] around!"
+ message = "вертит [grabbed.affecting.name] туда-сюда!"
grabbed.affecting.emote("spin")
else if(!(thing.flags & ABSTRACT))
- message = "twirls [thing] around in their hand!"
+ message = "вертит [thing] в руке!"
else
- to_chat(user, "You cannot twirl [thing]!")
+ to_chat(user, "У вас не получится повертеть [thing]!")
return TRUE
. = ..()
diff --git a/code/modules/mob/living/carbon/human/human_emote.dm b/code/modules/mob/living/carbon/human/human_emote.dm
index 8d85ec818445..5f64786a6282 100644
--- a/code/modules/mob/living/carbon/human/human_emote.dm
+++ b/code/modules/mob/living/carbon/human/human_emote.dm
@@ -33,16 +33,16 @@
/datum/emote/living/carbon/human/airguitar
key = "airguitar"
- message = "is strumming the air and headbanging like a safari chimp."
+ message = "натягивает струны и бьет головой, как шимпанзе в сафари."
emote_type = EMOTE_VISIBLE
hands_use_check = TRUE
/datum/emote/living/carbon/human/clap
key = "clap"
key_third_person = "claps"
- message = "claps."
- message_mime = "claps silently."
- message_param = "claps at %t."
+ message = "хлопает."
+ message_mime = "хлопает бесшумно."
+ message_param = "хлопает %t."
emote_type = EMOTE_AUDIBLE
vary = TRUE
@@ -54,10 +54,10 @@
if(!H.bodyparts_by_name[BODY_ZONE_L_ARM] || !H.bodyparts_by_name[BODY_ZONE_R_ARM])
if(!H.bodyparts_by_name[BODY_ZONE_L_ARM] && !H.bodyparts_by_name[BODY_ZONE_R_ARM])
// no arms...
- to_chat(user, "You need arms to be able to clap.")
+ to_chat(user, "Вам нужны руки, чтобы хлопать.")
else
// well, we've got at least one
- user.visible_message("[user] makes the sound of one hand clapping.")
+ user.visible_message("[user] издает звук хлопков одной ладонью.")
return TRUE
return ..()
@@ -77,7 +77,7 @@
/datum/emote/living/carbon/human/crack
key = "crack"
key_third_person = "cracks"
- message = "cracks their knuckles."
+ message = "хрустит пальцами."
emote_type = EMOTE_AUDIBLE
// knuckles.ogg by CGEffex. Shortened and cut.
// https://freesound.org/people/CGEffex/sounds/93981/
@@ -88,31 +88,31 @@
/datum/emote/living/carbon/human/cry
key = "cry"
key_third_person = "cries"
- message = "cries."
- muzzled_noises = list("weak", "pathetic", "sad")
+ message = "плачет."
+ muzzled_noises = list("слабый", "жалкий", "грустный")
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/human/eyebrow
key = "eyebrow"
- message = "raises an eyebrow."
- message_param = "raises an eyebrow at %t."
+ message = "приподнимает бровь."
+ message_param = "приподнимает бровь при виде %t."
/datum/emote/living/carbon/human/wince
key = "wince"
key_third_person = "winces"
- message = "winces."
- message_param = "winces at %t."
+ message = "морщится."
+ message_param = "морщится от вида %t."
/datum/emote/living/carbon/human/squint
key = "squint"
key_third_person = "squints"
- message = "squints."
- message_param = "squints at %t."
+ message = "прищуривается."
+ message_param = "прищуривается, глядя на %t."
/datum/emote/living/carbon/human/facepalm
key = "facepalm"
key_third_person = "facepalms"
- message = "facepalms."
+ message = "хлопает себя по лбу."
hands_use_check = TRUE
sound = 'sound/weapons/slap.ogg'
emote_type = EMOTE_AUDIBLE
@@ -120,46 +120,46 @@
/datum/emote/living/carbon/human/palm
key = "palm"
- message = "extends their palm expectingly."
- message_param = "extends their palm expectingly towards %t."
+ message = "ожидающе протягивает руку."
+ message_param = "ожидающе протягивает руку %t."
/datum/emote/living/carbon/human/grumble
key = "grumble"
key_third_person = "grumbles"
- message = "grumbles!"
- message_mime = "seems to grumble!"
- message_postfix = "at %t!"
- muzzled_noises = list("bothered")
+ message = "ворчит!"
+ message_mime = "как будто ворчит!"
+ message_postfix = "на %t!"
+ muzzled_noises = list("беспокойный")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
/datum/emote/living/carbon/human/hug
key = "hug"
key_third_person = "hugs"
- message = "hugs themselves."
- message_param = "hugs %t."
+ message = "обнимает себя."
+ message_param = "обнимает %t."
hands_use_check = TRUE
/datum/emote/living/carbon/human/mumble
key = "mumble"
key_third_person = "mumbles"
- message = "mumbles!"
- message_mime = "seems to be speaking sweet nothings!"
- message_postfix = "at %t!"
+ message = "бормочет!"
+ message_mime = "кажется, что говорит приятное ничто!"
+ message_postfix = "на %t!"
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
/datum/emote/living/carbon/human/nod
key = "nod"
key_third_person = "nods"
- message = "nods their head."
- message_param = "nods their head at %t."
+ message = "кивает."
+ message_param = "кивает, обращаясь к %t."
/datum/emote/living/carbon/human/scream
key = "scream"
key_third_person = "screams"
- message = "screams!"
- message_mime = "acts out a scream!"
- message_postfix = "at %t!"
- muzzled_noises = list("very loud")
+ message = "кричит!"
+ message_mime = "как будто кричит!"
+ message_postfix = "на %t!"
+ muzzled_noises = list("очень громкий")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
only_forced_audio = FALSE
vary = TRUE
@@ -176,7 +176,7 @@
var/mob/living/carbon/human/H = user
if(H.dna.species?.scream_verb)
if(H.mind?.miming)
- return "[H.dna.species?.scream_verb] silently!"
+ return "[H.dna.species?.scream_verb] бесшумно!"
else
return "[H.dna.species?.scream_verb]!"
@@ -194,8 +194,8 @@
/datum/emote/living/carbon/human/gasp
key = "gasp"
key_third_person = "gasps"
- message = "gasps!"
- message_mime = "appears to be gasping!"
+ message = "задыхается!"
+ message_mime = "кажется, задыхается!"
emote_type = EMOTE_AUDIBLE // Don't make this one a mouth emote since we don't want it to be caught by nobreath
age_based = TRUE
unintentional_stat_allowed = UNCONSCIOUS
@@ -240,24 +240,24 @@
/datum/emote/living/carbon/human/shake
key = "shake"
key_third_person = "shakes"
- message = "shakes their head."
- message_param = "shakes their head at %t."
+ message = "мотает головой."
+ message_param = "мотает головой, обращаясь к %t."
/datum/emote/living/carbon/human/pale
key = "pale"
- message = "goes pale for a second."
+ message = "на секунду бледнеет."
/datum/emote/living/carbon/human/raise
key = "raise"
key_third_person = "raises"
- message = "raises a hand."
+ message = "поднимает руку."
hands_use_check = TRUE
/datum/emote/living/carbon/human/salute
key = "salute"
key_third_person = "salutes"
- message = "salutes."
- message_param = "salutes to %t."
+ message = "салютует."
+ message_param = "салютует %t."
hands_use_check = TRUE
audio_cooldown = 3 SECONDS
var/list/serious_shoes = list(/obj/item/clothing/shoes/jackboots, /obj/item/clothing/shoes/combat,
@@ -275,17 +275,17 @@
/datum/emote/living/carbon/human/shrug
key = "shrug"
key_third_person = "shrugs"
- message = "shrugs."
+ message = "пожимает плечами."
/datum/emote/living/carbon/human/sniff
key = "sniff"
key_third_person = "sniff"
- message = "sniffs."
+ message = "шмыгает носом."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/human/johnny
key = "johnny"
- message = "takes a drag from a cigarette and blows their own name out in smoke."
+ message = "затягивается сигаретой и выдыхает дым в форме своего имени."
message_param = "dummy" // Gets handled in select_param
emote_type = EMOTE_AUDIBLE
target_behavior = EMOTE_TARGET_BHVR_DEFAULT_TO_BASE
@@ -299,30 +299,30 @@
return message
var/msg = message
if(user.mind?.miming)
- msg = "takes a drag from a cigarette and blows \"[target.name]\" out in smoke."
+ msg = "затягивается сигаретой и выдыхает дым в форме \"[target.name]\"."
else
- msg = "says, \"[target.name], please. They had a family.\" [user] takes a drag from a cigarette and blows [user.p_their()] name out in smoke."
+ msg = "говорит, \"[target.name], пожалуйста. У них была семья.\" [user] затягивается сигаретой и выдыхает дым в форме своего имени."
return msg
/datum/emote/living/carbon/human/johnny/run_emote(mob/user, params, type_override, intentional)
var/mob/living/carbon/human/H = user
if(!istype(H.wear_mask, /obj/item/clothing/mask/cigarette))
- to_chat(user, "You can't be that cool without a cigarette between your lips.")
+ to_chat(user, "Нельзя быть настолько крутым без сигареты в зубах.")
return TRUE
var/obj/item/clothing/mask/cigarette/cig = H.wear_mask
if(!cig.lit)
- to_chat(user, "You have to light that [cig] first, cool cat.")
+ to_chat(user, "Сначала зажги [cig], модник.")
return TRUE
if(H.getOxyLoss() > 30)
user.visible_message(
- "[user] gasps for air and swallows their cigarette!",
- "You gasp for air and accidentally swallow your [cig]!"
+ "[user] вдыхает и проглатывает сигарету!",
+ "Вы вдыхаете и случайно проглатываете [cig]!"
)
if(cig.lit)
- to_chat(user, "The lit [cig] burns on the way down!")
+ to_chat(user, "Горящая [cig] жжется по пути вниз!")
user.unequip(cig)
qdel(cig)
H.adjustFireLoss(5)
@@ -332,8 +332,8 @@
/datum/emote/living/carbon/human/sneeze
key = "sneeze"
key_third_person = "sneezes"
- message = "sneezes."
- muzzled_noises = list("strange", "sharp")
+ message = "чихает."
+ muzzled_noises = list("странный", "резкий")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
volume = 70
@@ -360,14 +360,14 @@
else
smacking_hand = new /obj/item/slapper(user)
if(user.put_in_hands(smacking_hand))
- to_chat(user, "You ready your slapping hand.")
+ to_chat(user, "Вы готовы давать пощёчины.")
else
- to_chat(user, "You're incapable of slapping in your current state.")
+ to_chat(user, "В текущем положении дать пощёчину не получится.")
/datum/emote/living/carbon/human/wink
key = "wink"
key_third_person = "winks"
- message = "winks."
+ message = "подмигивает."
/datum/emote/living/carbon/human/highfive
key = "highfive"
@@ -470,8 +470,8 @@
/datum/emote/living/carbon/human/snap
key = "snap"
key_third_person = "snaps"
- message = "snaps their fingers."
- message_param = "snaps their fingers at %t."
+ message = "щелкает пальцами."
+ message_param = "щелкает пальцами в направлении %t."
sound = "sound/effects/fingersnap.ogg"
emote_type = EMOTE_AUDIBLE
@@ -488,11 +488,11 @@
right_hand_good = TRUE
if(!left_hand_good && !right_hand_good)
- to_chat(user, "You need at least one hand in good working order to snap your fingers.")
+ to_chat(user, "Вам нужна хотя бы одна работоспособная рука, чтобы щелкнуть пальцами.")
return TRUE
if(prob(5))
- user.visible_message("[user] snaps [user.p_their()] fingers right off!")
+ user.visible_message("[user] щелкает своими пальцами без раздумий!")
playsound(user.loc, 'sound/effects/snap.ogg', 50, 1)
return TRUE
return ..()
@@ -500,8 +500,8 @@
/datum/emote/living/carbon/human/fart
key = "fart"
key_third_person = "farts"
- message = "farts."
- message_param = "farts in %t's general direction."
+ message = "пердит."
+ message_param = "пердит в направлении %t."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/human/fart/run_emote(mob/user, params, type_override, intentional)
@@ -514,7 +514,7 @@
/datum/emote/living/carbon/sign/signal
key = "signal"
key_third_person = "signals"
- message_param = "raises %t fingers."
+ message_param = "показывает пальцев: %t."
param_desc = "number(0-10)"
mob_type_allowed_typecache = list(/mob/living/carbon/human)
hands_use_check = TRUE
@@ -525,7 +525,7 @@
/datum/emote/living/carbon/human/wag
key = "wag"
key_third_person = "wags"
- message = "starts wagging their tail."
+ message = "начинает вилять хвостом."
emote_type = EMOTE_VISIBLE | EMOTE_FORCE_NO_RUNECHAT
species_type_whitelist_typecache = list(
/datum/species/unathi,
@@ -570,7 +570,7 @@
/datum/emote/living/carbon/human/wag/stop
key = "swag" // B)
key_third_person = "swags"
- message = "stops wagging their tail."
+ message = "перестает вилять хвостом."
/datum/emote/living/carbon/human/wag/stop/run_emote(mob/user, params, type_override, intentional)
. = ..()
@@ -588,8 +588,8 @@
/datum/emote/living/carbon/human/scream/screech
key = "screech"
key_third_person = "screeches"
- message = "screeches!"
- message_param = "screeches at %t!"
+ message = "визжит!"
+ message_param = "визжит на %t!"
vary = FALSE
mob_type_blacklist_typecache = list()
mob_type_allowed_typecache = list(/mob/living/carbon/human/monkey)
@@ -598,20 +598,20 @@
/datum/emote/living/carbon/human/scream/screech/roar
key = "roar"
key_third_person = "roars"
- message = "roars!"
- message_param = "roars at %t!"
+ message = "ревёт!"
+ message_param = "ревёт на %t!"
/datum/emote/living/carbon/human/monkey/gnarl
key = "gnarl"
key_third_person = "gnarls"
- message = "gnarls and shows their teeth!"
- message_param = "gnarls and shows their teeth at %t."
+ message = "оскаливается и показывает зубы!"
+ message_param = "оскаливается на %t и показывает зубы."
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
/datum/emote/living/carbon/human/monkey/roll
key = "roll"
key_third_person = "rolls"
- message = "rolls."
+ message = "катится."
hands_use_check = TRUE
/datum/emote/living/carbon/human/monkey/roll/run_emote(mob/user, params, type_override, intentional)
@@ -622,12 +622,12 @@
/datum/emote/living/carbon/human/monkey/scratch
key = "scratch"
key_third_person = "scratches"
- message = "scratches."
+ message = "чешется."
hands_use_check = TRUE
/datum/emote/living/carbon/human/monkey/tail
key = "tail"
- message = "waves their tail."
+ message = "машет хвостом."
///////
// More specific human species emotes
@@ -635,25 +635,25 @@
/datum/emote/living/carbon/human/flap
key = "flap"
key_third_person = "flaps"
- message = "flaps their wings."
+ message = "машет крыльями."
species_type_whitelist_typecache = list(/datum/species/moth)
/datum/emote/living/carbon/human/flap/angry
key = "aflap"
key_third_person = "aflaps"
- message = "flaps their wings ANGRILY!"
+ message = "АГРЕССИВНО машет крыльями!"
/datum/emote/living/carbon/human/flutter
key = "flutter"
key_third_person = "flutters"
- message = "flutters their wings."
+ message = "трепещет крыльями."
species_type_whitelist_typecache = list(/datum/species/moth)
/datum/emote/living/carbon/human/quill
key = "quill"
key_third_person = "quills"
- message = "rustles their quills."
- message_param = "rustles their quills at %t."
+ message = "шелестит перьями."
+ message_param = "шелестит перьями на %t."
emote_type = EMOTE_AUDIBLE
age_based = TRUE
// Credit to sound-ideas (freesfx.co.uk) for the sound.
@@ -663,8 +663,8 @@
/datum/emote/living/carbon/human/warble
key = "warble"
key_third_person = "warbles"
- message = "warbles."
- message_param = "warbles at %t."
+ message = "трелит."
+ message_param = "трелит на %t."
emote_type = EMOTE_AUDIBLE
age_based = TRUE
// Copyright CC BY 3.0 alienistcog (freesound.org) for the sound.
@@ -674,8 +674,8 @@
/datum/emote/living/carbon/human/clack
key = "clack"
key_third_person = "clacks"
- message = "clacks their mandibles."
- message_param = "clacks their mandibles at %t."
+ message = "клацает челюстями."
+ message_param = "клацает челюстями на %t."
species_type_whitelist_typecache = list(/datum/species/kidan)
emote_type = EMOTE_AUDIBLE
audio_cooldown = 3 SECONDS
@@ -692,8 +692,8 @@
/datum/emote/living/carbon/human/clack/click
key = "click"
key_third_person = "clicks"
- message = "clicks their mandibles."
- message_param = "clicks their mandibles at %t."
+ message = "щёлкает челюстями."
+ message_param = "щёлкает челюстями на %t."
// Credit to DrMinky (freesound.org) for the sound.
sound = "sound/effects/kidanclack2.ogg"
@@ -706,38 +706,38 @@
/datum/emote/living/carbon/human/drask_talk/drone
key = "drone"
key_third_person = "drones"
- message = "drones."
- message_param = "drones at %t."
+ message = "жужжит."
+ message_param = "жужжит на %t."
/datum/emote/living/carbon/human/drask_talk/hum
key = "hum"
key_third_person = "hums"
- message = "hums."
- message_param = "hums at %t."
+ message = "гудит."
+ message_param = "гудит на %t."
/datum/emote/living/carbon/human/drask_talk/rumble
key = "rumble"
key_third_person = "rumbles"
- message = "rumbles."
- message_param = "rumbles at %t."
+ message = "урчит."
+ message_param = "урчит на %t."
/datum/emote/living/carbon/human/hiss
key = "hiss"
key_third_person = "hisses"
- message = "hisses."
- message_param = "hisses at %t."
+ message = "шипит."
+ message_param = "шипит на %t."
species_type_whitelist_typecache = list(/datum/species/unathi)
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
age_based = TRUE
// Credit to Jamius (freesound.org) for the sound.
sound = "sound/effects/unathihiss.ogg"
- muzzled_noises = list("weak hissing")
+ muzzled_noises = list("тихий шипящий")
/datum/emote/living/carbon/human/creak
key = "creak"
key_third_person = "creaks"
- message = "creaks."
- message_param = "creaks at %t."
+ message = "скрипит."
+ message_param = "скрипит на %t."
emote_type = EMOTE_AUDIBLE
age_based = TRUE
species_type_whitelist_typecache = list(/datum/species/diona)
@@ -762,8 +762,8 @@
/datum/emote/living/carbon/human/slime/squish
key = "squish"
key_third_person = "squishes"
- message = "squishes."
- message_param = "squishes at %t."
+ message = "хлюпает."
+ message_param = "хлюпает на %t."
emote_type = EMOTE_AUDIBLE
age_based = TRUE
// Credit to DrMinky (freesound.org) for the sound.
@@ -772,8 +772,8 @@
/datum/emote/living/carbon/human/slime/bubble
key = "bubble"
key_third_person = "bubbles"
- message = "bubbles."
- message_param = "bubbles at %t."
+ message = "булькает."
+ message_param = "булькает на %t."
emote_type = EMOTE_AUDIBLE
age_based = TRUE
// Sound is CC-4.0 by Audiolarx
@@ -784,9 +784,9 @@
/datum/emote/living/carbon/human/slime/pop
key = "pop"
key_third_person = "pops"
- message = "makes a popping sound."
- message_param = "makes a popping sound at %t."
- message_mime = "makes a silent pop."
+ message = "хлопает ртом."
+ message_param = "хлопает ртом на %t."
+ message_mime = "бесшумно хлопает ртом."
emote_type = EMOTE_AUDIBLE
age_based = TRUE
// CC0
@@ -797,73 +797,73 @@
/datum/emote/living/carbon/human/howl
key = "howl"
key_third_person = "howls"
- message = "howls."
- message_mime = "acts out a howl."
- message_param = "howls at %t."
+ message = "воет."
+ message_mime = "кажется, воет."
+ message_param = "воет на %t."
species_type_whitelist_typecache = list(/datum/species/vulpkanin)
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
age_based = TRUE
sound = "sound/goonstation/voice/howl.ogg"
- muzzled_noises = list("very loud")
+ muzzled_noises = list("очень громкий")
volume = 100
cooldown = 10 SECONDS
/datum/emote/living/carbon/human/growl
key = "growl"
key_third_person = "growls"
- message = "growls."
- message_mime = "growls silently."
- message_param = "growls at %t."
+ message = "рычит."
+ message_mime = "бесшумно рычит."
+ message_param = "рычит на %t."
species_type_whitelist_typecache = list(/datum/species/vulpkanin)
sound = "growls" // what the fuck why is this just top level
volume = 80
- muzzled_noises = list("annoyed")
+ muzzled_noises = list("грозный")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
/datum/emote/living/carbon/human/hiss/tajaran
- message_mime = "hisses silently."
+ message_mime = "шипит бесшумно."
species_type_whitelist_typecache = list(/datum/species/tajaran)
sound = "sound/effects/tajaranhiss.ogg"
volume = 80
- muzzled_noises = list("irritated")
+ muzzled_noises = list("злобный")
// catHisses1.wav by Zabuhailo. Edited.
// https://freesound.org/people/Zabuhailo/sounds/146963/
/datum/emote/living/carbon/human/rattle
key = "rattle"
key_third_person = "rattles"
- message = "rattles their bones."
- message_param = "rattles their bones at %t."
+ message = "гремит костями."
+ message_param = "гремит костями на %t."
sound = "sound/voice/plas_rattle.ogg"
volume = 80
species_type_whitelist_typecache = list(/datum/species/skeleton, /datum/species/plasmaman)
/datum/emote/living/carbon/human/crack/slime
- message = "squishes their knuckles!"
+ message = "сминает костяшки пальцев!"
sound = "sound/effects/slime_squish.ogg"
species_type_whitelist_typecache = list(/datum/species/slime)
species_type_blacklist_typecache = null
/datum/emote/living/carbon/human/crack/machine
- message = "cracks their actuators!"
+ message = "хрустит приводами!"
sound = "sound/effects/mob_effects/ipc_crunch.ogg"
species_type_whitelist_typecache = list(/datum/species/machine)
species_type_blacklist_typecache = null
/datum/emote/living/carbon/human/crack/diona
- message = "cracks a twig!"
+ message = "хрустит прутиком!"
sound = "sound/effects/mob_effects/diona_crunch.ogg"
species_type_whitelist_typecache = list(/datum/species/diona)
species_type_blacklist_typecache = null
volume = 85 // the sound effect is a bit quiet
/datum/emote/living/carbon/human/crack/skelly
- message = "cracks something!" // placeholder
+ message = "хрустит чем-то!" // placeholder
species_type_whitelist_typecache = list(/datum/species/skeleton, /datum/species/plasmaman)
species_type_blacklist_typecache = null
/datum/emote/living/carbon/human/crack/skelly/run_emote(mob/user, params, type_override, intentional)
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/bodypart = pick(H.bodyparts)
- message = "cracks their [bodypart.name]!"
+ message = "хрустит, используя [bodypart.name]!"
. = ..()
diff --git a/code/modules/mob/living/carbon/human/human_life.dm b/code/modules/mob/living/carbon/human/human_life.dm
index 83785afae091..5c3ed44d754a 100644
--- a/code/modules/mob/living/carbon/human/human_life.dm
+++ b/code/modules/mob/living/carbon/human/human_life.dm
@@ -105,6 +105,56 @@
else if(!vision || vision.is_broken()) // Vision organs cut out or broken? Permablind.
EyeBlind(4 SECONDS)
+ if(getBrainLoss() >= 60 && stat != DEAD)
+ if(prob(3))
+ var/list/crazysay = list("Я [pick("ПОНИ","ЯЩЕР","ТАЯРА","КОТЁНОК","ВУЛЬП","ДРАСК","ПТИЧКА","ВОКСИК","МАШИНА","БОЕВОЙ МЕХ","РАКЕТА")] [pick("НЬЕЕЕЕЕЕЕЕЕЕ","СКРЭЭЭЭЭЭЭЭЭ","МЯУ","НЯ~","РАВР","ГАВ-ГАВ","ХИССССС","ВРУУУМ-ВРУУУУМ","ПИУ-ПИУ","ЧУ-ЧУ")]!",
+ "без кислорода блоб не распространяется?",
+ "КАПИТАН - ГАНДОН!",
+ "[pick("", "Этот чёртов маньяк,")] [pick("Жордж","Джордж","Горж","Грудж")] [pick("Меленс","Мэлонс","Мвырлнс")] убивает меня ПАМА;ГИТЕ!!!",
+ "Можишь пж дать [pick("теликенез","халга","эпелепсию")]?",
+ "ООООО МОЯ ОБОРОНА",
+ "Би - ЛУЧШЕЕ С ДВУХ СТОРОН!",
+ "Я ХОЧУ ПОГЛАДИТЬ ЭТХ БИБЗЯН!",
+ "не бей пж!!!!",
+ "ПЕРКРАТИ!",
+ "ПАМАГИТЕ ЩЕТКУРИТИ",
+ "ВОКсЫ нЕ мОГут ЛюБИТь",
+ "Мой папа владеет этой станцией",
+ "Повар добавил [pick("ПРОТЕИН", "туолетную воду", "муравьёв", "энзимы","акулу","виТамины","РеАктивный МутАген","ТеСлиум","сКрэКтониум")] в [pick("мой суп","мою шОверму","мой рЭйнбургер","мой зеЛёный Сольент","мои СушИ","мой борш")]!",
+ "У ОБЕЗЬЯН ТАЗЕРЫ!",
+ "кМ потраТел мои поенты на [pick("бОевые дробавики","ризИновые перЧатке","кУчу херни!")]",
+ "EI'NATH!",
+ "ПРОСНИТЕСЬ, БАРАНЫ!",
+ "эта [pick("был мой младшей брат!!","была мая невеста","был мой осТавшЕйся друк","был Мой деДдом","былА мая люБов","была моя жена","был мой муж","маИ малЕнькие ДеТи","МаЯ разУмнАя коШка")]",
+ "ФУС РО ДА",
+ "ёбаные мандарины!!!",
+ "Праверь меня",
+ "Моё лицо!",
+ "СПОКОЙНО БЛЯТЬ!",
+ "ВАААААААААГХ!!!",
+ "Папробуй догани!",
+ "ЗА ИМПЕРАТОРА!",
+ "ДАЧНОГО ДНЯ!!!!",
+ "это всё дварфы, чел, всё дварфы",
+ "СПЕЙС МАРИНЫ",
+ "Мввыы ссдееллалии этво вво имя хаосса",
+ "Фотареалистичные тикстуры",
+ "Любоф цвятёт",
+ "ПАКЕТЫ!!!",
+ "[pick("ГДЕ МОЙ","МХНЕ НУЖЕН","ДАЙ МНЕ МОЙ","ОКУНИ МЕНЯ В")] [pick("ДЕРМАЛИН","АЛКИЗИН","ДИЛОВИН","ИНАПРОВАЛИН","БИКАРДИН","ГИПЕРЗИН","КЕЛОТАН","ЛЕПОРАЗИН","СОЛЬ","МАННИТОЛ","КРИОКСАДОН","СПЕЙС ЛУБ","КАППУЛЕТИУМ","ЛСД")]!",
+ "БжеХрнИКрлеВу",
+ "У меНя еСтЬ Лююди на Цк!!!",
+ ";П-п-помогите т-т-техи",
+ "Ани идут, ани ИДУТ! АНИ ИДУТ!!!",
+ "КОНЕЦ БЛИЗОК!",
+ "Я ГОТОВ УМЕРЕТЬ ВО ИМЯ [pick("РИТУАЛА","СВОБОДЫ","ЗАРПЛАТЫ","ОЧКОВ","ТЕХНОЛОГИЙ","СОБАКИ","СИРОПА","ПУШИСТЫХ ДРУЗЕЙ","ЛУТА ИЗ ГЕЙТА","ТУЛБОКСОВ","ВУЛЬП","ПОНЧИКОВ","КЛОУНА")]",
+ "УБиЙ ИХ, [pick("ПЕТУХ","КИРА-КЛОЙН","КЛУВНИ","МИМАНЬЯК","БОМБЯЩИЯ ТАЯРА","ОФЕЦЕР","МОРФЛЕНГ","НАС-РИ")]!" ,
+ "Я МаГу ТиБЯ ЗаСТАвИТЬ СКаЗАТЬ ВсЁ ЧТО УГоДНО!!?!?!")
+ if(prob(66))
+ say(pick(crazysay))
+ else
+ emote("drool")
+
/mob/living/carbon/human/handle_mutations_and_radiation()
for(var/mutation_type in active_mutations)
var/datum/mutation/mutation = GLOB.dna_mutations[mutation_type]
diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
index f85599e9914d..e371ddff8646 100644
--- a/code/modules/mob/living/carbon/human/species/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/_species.dm
@@ -120,7 +120,7 @@
var/dangerous_existence = FALSE
//Death vars.
- var/death_message = "seizes up and falls limp, their eyes dead and lifeless..."
+ var/death_message = "цепенеет и расслабляется, взгляд становится пустым и безжизненным..."
var/list/suicide_messages = list(
"is attempting to bite their tongue off!",
"is jamming their thumbs into their eye sockets!",
diff --git a/code/modules/mob/living/carbon/human/species/diona_species.dm b/code/modules/mob/living/carbon/human/species/diona_species.dm
index b3c3d8345769..9b4827d8874b 100644
--- a/code/modules/mob/living/carbon/human/species/diona_species.dm
+++ b/code/modules/mob/living/carbon/human/species/diona_species.dm
@@ -12,10 +12,10 @@
heatmod = 3
var/pod = FALSE //did they come from a pod? If so, they're stronger than normal Diona.
- blurb = "The Diona are plant-like creatures made up of a gestalt of smaller Nymphs. \
- Dionae lack any form of centralized government or homeworld, with most avoiding the affairs of the wider galaxy, preferring instead to focus on the spread of their species.
\
- As a gestalt entity, each nymph possesses an individual personality, yet they communicate collectively. \
- Consequently, Diona often speak in a unique blend of first and third person, using 'We' and 'I' to reflect their unified yet multifaceted nature."
+ blurb = "Дионы - растениеподобные существа, образованные в гештальт более мелких Нимф. \
+ У Дион нет централизованного правительства на их родной планете, большинство из них избегает дел в обширной галактике, предпочитая сосредотачиваться на религиозных, философских и научных учениях.
\
+ Как гештальт-сущность, каждая Нимфа обладает индивидуальностью, но общаются они коллективно. \
+ Поэтому Диона часто говорит в уникальном сочетании первого и третьего лица, используя \"Мы\" и \"Я\", чтобы отразить свою единую, но многогранную природу."
eyes = "blank_eyes"
species_traits = list(NO_HAIR)
diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm
index 47831972d437..87a4ac6e824f 100644
--- a/code/modules/mob/living/carbon/human/species/drask.dm
+++ b/code/modules/mob/living/carbon/human/species/drask.dm
@@ -18,10 +18,10 @@
//exotic_blood = "cryoxadone"
body_temperature = 273
- blurb = "Drask are cold-bodied humanoids from the ice world of Hoorlm, contained within a black hole system. \
- Operating in enclaves run by elders, Drasks are biologically immortal and place great societal value in patience.
\
- Drask traditionally pay homage to their planet as their birth deity, with many modern Drask viewing space travel a patron saint. \
- Drasks wield little influence on the galaxy in a traditional sense and have slowly begun to become more prevalent outside their origin system thanks to alien contact."
+ blurb = "Драски - хладнокровные гуманоиды из ледяной планеты Урулм. \
+ Драски живут в едином межсистемном государстве, зовущейся Гегемония Маарун, объединены в теократическое общество восхваляющее богов Блюспейс пространства и всё, что с ним связано.
\
+ Драски изоляционисты, они не имеют большого влияния на галактику в привычном смысле этого слова, они не ведут дел с научными технократами, \
+ но благодаря контактам с другими видами, они стали постепенно распространяться за пределы своей родной системы."
suicide_messages = list(
"is self-warming with friction!",
diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm
index f831ce0d44f0..e38b745f0f95 100644
--- a/code/modules/mob/living/carbon/human/species/grey.dm
+++ b/code/modules/mob/living/carbon/human/species/grey.dm
@@ -4,10 +4,10 @@
icobase = 'icons/mob/human_races/r_grey.dmi'
language = "Psionic Communication"
- blurb = "The Grey, known for their psionic abilities and unique appearance, hail from beyond the Milky Way and have an undisclosed homeworld. \
- They rely heavily on cloning technology and are governed by a technocratic council of scientists.
\
- Focused on technological advancement and the study of the universe, the Grey lack religious or spiritual beliefs. \
- Their objective perspective and advanced knowledge often position them to focus on their own projects rather than the disputes of other species."
+ blurb = "Серые, известны своими псионическими способностями и уникальной внешностью, родом из пределов Млечного Пути, с неизвестным происхождением. \
+ Они в значительной степени полагаются на технологию клонирования и управляются технократическим советом ученых.
\
+ Сосредоточившись на технологическом прогрессе и изучении вселенной, Серые не имеют религиозных или духовных убеждений. \
+ Их объективный взгляд и обширные знания часто позволяют им сосредоточиться на собственных проектах, а не на разногласиях с другими видами."
eyes = "grey_eyes_s"
butt_sprite = "grey"
diff --git a/code/modules/mob/living/carbon/human/species/human_species.dm b/code/modules/mob/living/carbon/human/species/human_species.dm
index ef5fa94650b4..732c84142500 100644
--- a/code/modules/mob/living/carbon/human/species/human_species.dm
+++ b/code/modules/mob/living/carbon/human/species/human_species.dm
@@ -9,10 +9,10 @@
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_ICON_SKIN_TONE | HAS_BODY_MARKINGS
dietflags = DIET_OMNI
- blurb = "Humanity, originating from the Sol system, has expanded over five centuries, branching out to forge a variety of governments and powerful corporations. \
- These range from the militaristic Trans-Solar Federation, the Union of Soviet Socialist Planets, and mega corporations like Nanotrasen.
\
- With a constant desire to colonize and spread their influence onto other species, they have begun to develop alliances and enemies, \
- making humans one of the most recognizable and socially diverse species in the sector."
+ blurb = "Человек - вид, возникший в Солнечной системе, разросшись за пять столетий, создал множество правительств и могущественных корпораций. \
+ Они включают в себя милитаристскую Транс-Cолнечную Федерацию, Союз Советских Социалистических Планет и такие мегакорпорации, как Нанотрейзен.
\
+ Постоянно стремясь к колонизации и распространению своего влияния на другие виды, они начали заключать союзы и заводить врагов. \
+ Являются одними из самых узнаваемых и распространенных видов во всей галактике."
/// Organized to be from Light to Dark.
icon_skin_tones = list(
diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm
index 70eb61d77a9d..5d7d9d0a2569 100644
--- a/code/modules/mob/living/carbon/human/species/kidan.dm
+++ b/code/modules/mob/living/carbon/human/species/kidan.dm
@@ -4,10 +4,10 @@
icobase = 'icons/mob/human_races/r_kidan.dmi'
language = "Chittin"
- blurb = "The Kidan are ant-like beings possessing a hardened exoskeleton and strict adherence to social castes. \
- They originate from the planet Aurum — a barren bombarded world that suffered after the war with the Solar-Central Compact, having lost decisively after the Battle of Argos.
\
- They are relatively minor players in galactic affairs and presently suffer heavy sanctions from the SCC, \
- though they are tentatively re-establishing relations with other galactic powers, even after the crumbling of their once powerful empire."
+ blurb = "Киданы - муравьеподобные существа, обладающих жестким экзоскелетом и строго придерживающиеся профессиональных каст. \
+ Они родом с планеты Аурум - бесплодного, подвергшегося бомбардировкам мира, который пострадал после войны с Человеко-Скреллаинским Альянсом, потерпев сокрушительное поражение.
\
+ Они являются относительно незначительными игроками на галактической арене и в настоящее время полностью порабощены людьми и лишены самостоятельности в политических делах, \
+ вынуждая их предпринимать попытки борьбы за свою независимость."
unarmed_type = /datum/unarmed_attack/claws
brute_mod = 0.8
diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm
index 2d5ee49e0e0b..58dd3eb2433e 100644
--- a/code/modules/mob/living/carbon/human/species/machine.dm
+++ b/code/modules/mob/living/carbon/human/species/machine.dm
@@ -17,7 +17,7 @@
eyes = "blank_eyes"
tox_mod = 0
clone_mod = 0
- death_message = "gives a short series of shrill beeps, their chassis shuddering before falling limp, nonfunctional."
+ death_message = "издаёт короткую серию пронзительных звуковых сигналов, вздрагивает и падает, не функционируя."
death_sounds = list('sound/voice/borg_deathsound.ogg') //I've made this a list in the event we add more sounds for dead robots.
species_traits = list(NO_BLOOD, NO_CLONESCAN, NO_INTORGANS)
diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm
index 02595565f07c..431e2bee1b19 100644
--- a/code/modules/mob/living/carbon/human/species/monkey.dm
+++ b/code/modules/mob/living/carbon/human/species/monkey.dm
@@ -1,7 +1,7 @@
/datum/species/monkey
name = "Monkey"
name_plural = "Monkeys"
- blurb = "Ook."
+ blurb = "У-у-у!"
icobase = 'icons/mob/human_races/monkeys/r_monkey.dmi'
damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi'
@@ -22,7 +22,7 @@
dietflags = DIET_OMNI
show_ssd = 0
eyes = "blank_eyes"
- death_message = "lets out a faint chimper as it collapses and stops moving..."
+ death_message = "издаёт слабый визг, падает и перестаёт двигаться..."
scream_verb = "screeches"
male_scream_sound = 'sound/goonstation/voice/monkey_scream.ogg'
diff --git a/code/modules/mob/living/carbon/human/species/moth.dm b/code/modules/mob/living/carbon/human/species/moth.dm
index be74a62e4dff..354decb2fe42 100644
--- a/code/modules/mob/living/carbon/human/species/moth.dm
+++ b/code/modules/mob/living/carbon/human/species/moth.dm
@@ -27,10 +27,10 @@
eyes = "moth_eyes_s"
butt_sprite = "nian"
siemens_coeff = 1.5
- blurb = "Nians are large bipedal invertebrates that come from an unknown homeworld. \
- Known for spendthrift behavior, the Nian civilization has been pressed to the fore of developed space in an effort to resolve material shortages in homeworld sectors.
\
- Unlike most species in the galactic fold, Nian do not recognize the authority of the Trans-Solar Federation: \
- having instead established close diplomatic relationships with their splinter faction, the USSP."
+ blurb = "Нианы - вид насекомоподобных двуногих, родом с неизвестной планеты. \
+ Известная своей расточительностью, цивилизация Ниан была вытеснена на передний план развитого космоса в попытке решить проблему нехватки материалов в секторах родного мира.
\
+ В отличие от большинства видов в галактике, Нианы не признают власть Транс-Солнечной Федерации, \
+ установив вместо этого тесные дипломатические отношения с Союзом Советских Социалистических Планет."
icon_skin_tones = list(
1 = "Default Biege",
diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm
index d8684d7e2d36..b1f960765e6c 100644
--- a/code/modules/mob/living/carbon/human/species/plasmaman.dm
+++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm
@@ -6,9 +6,9 @@
dangerous_existence = TRUE //So so much
//language = "Clatter"
- blurb = "Plasmamen are the remnants of a species that was either exiled to, or crashed upon, the plasma-rich world of Boron. \
- Believed to have initially served as indentured labourers, Plasmamen are the result of chronic plasma exposure throughout several hundred generations.
\
- Their leaders must ritually self-immolate and are only allowed to hold office for as long as they remain on fire."
+ blurb = "Плазмамены - это остатки вида, который был либо изгнан на богатый плазмой планету Бор, либо потерпел на нем неудачу. \
+ Считается, что первоначально они служили подневольными рабочими, а сам результат становление Плазмаменом - это хроническое воздействие на организм плазмы на протяжении нескольких сотен поколений.
\
+ Их лидер должен совершать ритуальное самосожжение, и ему разрешается занимать свой пост только до тех пор, пока он остаётся в огне."
species_traits = list(NO_BLOOD, NO_HAIR)
inherent_traits = list(TRAIT_RADIMMUNE, TRAIT_NOHUNGER, TRAIT_BURN_WOUND_IMMUNE)
diff --git a/code/modules/mob/living/carbon/human/species/skeleton_species.dm b/code/modules/mob/living/carbon/human/species/skeleton_species.dm
index 699c2fc33914..fd9825dc5327 100644
--- a/code/modules/mob/living/carbon/human/species/skeleton_species.dm
+++ b/code/modules/mob/living/carbon/human/species/skeleton_species.dm
@@ -3,7 +3,7 @@
name = "Ancient Skeleton"
name_plural = "Ancient Skeletons"
- blurb = "Spoopy and scary."
+ blurb = "Жуткие и страшные."
icobase = 'icons/mob/human_races/r_skeleton.dmi'
@@ -48,8 +48,8 @@
for(var/obj/item/organ/external/L in our_organs)
if(L.mend_fracture())
break // We're only checking one limb here, bucko
- if(prob(3))
- H.say(pick("Thanks Mr. Skeltal", "Thank for strong bones", "Doot doot!"))
+ if(prob(10)) // SS220 EDIT: ORIGINAL - 3%
+ H.say(pick("Спасибо Мистеру Скелтал!", "От такого молока челюсть отвисает!", "Я вижу четКость своих решений!", "Надо не забыть пересчитать косточки...", "Маленькие скелеты паКостят!", "Хорошо что у меня язык без костей!", "Теперь я не буду ЧЕРЕПашкой!", "Теперь мне не нужны костыли!", "Костян плохого не посоветует!", "Ощущаешь мою ловКость?", "Я чувствую такую лёгКость!", "Большая редКость найти любимую жидКость!", "Моя любимая жидКость!", "Аж закостенел!", "Теперь я вешу скелетонну!", "Спасибо за крепкие кости!", "Ду-ду!", "Вы замечали что мы все в одной плосКости?"))
return TRUE
return ..()
diff --git a/code/modules/mob/living/carbon/human/species/skrell.dm b/code/modules/mob/living/carbon/human/species/skrell.dm
index 28b593effdfd..8480dff46f31 100644
--- a/code/modules/mob/living/carbon/human/species/skrell.dm
+++ b/code/modules/mob/living/carbon/human/species/skrell.dm
@@ -5,10 +5,10 @@
language = "Skrellian"
primitive_form = /datum/species/monkey/skrell
- blurb = "Skrell are an amphibious species, that come from the planet Jargon 4, a humid planet filled with swamps and archipelagos. \
- Skrell are a highly advanced and logical race who live under the rule of the Qerr'Katish, the main governmental body.
\
- Skrell are herbivores and opulent in nature thanks to central tenets of the Skrellian religion. \
- While classically preferring diplomacy, the Skrell participate in the largest military alliance in the galaxy, the Solar-Central Compact."
+ blurb = "Скреллы - вид амфибий, родом с Кверрбалака, влажной тропической планеты, полной болот и архипелагов. \
+ Скреллы это высокоразвитая и разумная раса, живущая под властью Кверр-Кэтиш, главного правительственного органа.
\
+ Скреллы травоядны и изобильны по своей природе благодаря главным постулатам скреллской культуры. \
+ Хотя Скреллы предпочитают дипломатию, они участвуют в крупнейшем военном союзе в галактике - Человеко-Скреллаинском Альянсе."
species_traits = list(LIPS, NO_HAIR)
inherent_traits = list(TRAIT_NOFAT, TRAIT_WATERBREATH)
diff --git a/code/modules/mob/living/carbon/human/species/slimepeople.dm b/code/modules/mob/living/carbon/human/species/slimepeople.dm
index 536eb744765e..8e97d4f5583e 100644
--- a/code/modules/mob/living/carbon/human/species/slimepeople.dm
+++ b/code/modules/mob/living/carbon/human/species/slimepeople.dm
@@ -12,11 +12,11 @@
max_age = 130
language = "Bubblish"
- blurb = "Slime People are gelatinous and translucent beings hailing from the tropical world of Xarxis 5 and surrounding Xarxis Republic. \
- Relatively recent entrants to the galactic scene, the Xarxis Republic, and slime people by extension, were discovered in the mid-2400s by a TSF survery fleet..
\
- Today, the Xarxis Republic is a member state of the Trans-Solar Federation, having become an Associate State following first contact, and later moving through several stages of integration. \
- While a great deal of Slime People prefer the comforts and traditions of their home system and the Federation, a number have decided to take their chances in the wider sector, in \
- search of adventure, profit, and freedom among the stars."
+ blurb = "Слаймомены - желеподобные и полупрозрачные существа из обширных океанов Ксарксиса 5. \
+ Они появились на галактической арене сравнительно недавно и были обнаружены во время исследовательской компании ТСФ.
\
+ Слаймомены традиционно действуют кочующими группами и племенами, которые мигрируют в соответствии с эллиптической орбитой мира и миграционными паттернами. \
+ Многие Слаймомены предпочитают комфорт и традиции родной планеты, но многие решили попытать счастья среди звезд, пытаясь \
+ найти лучшую жизнь для себя и своего вида."
icobase = 'icons/mob/human_races/r_slime.dmi'
remains_type = /obj/effect/decal/remains/slime
diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm
index 799503547c86..34f32201b5e4 100644
--- a/code/modules/mob/living/carbon/human/species/tajaran.dm
+++ b/code/modules/mob/living/carbon/human/species/tajaran.dm
@@ -7,10 +7,10 @@
skinned_type = /obj/item/stack/sheet/fur
unarmed_type = /datum/unarmed_attack/claws
- blurb = "Tajaran hail from the mineral-rich arctic moon of Ahdomai. \
- They were introduced into the galactic scene after the Skrellian discovery and were elevated to be associates to the Solar-Central Compact.
\
- The teachings of S'randarr and solar iconography dominate their religious practices, \
- and Tajaran often speak in the third person due to the lack of first-person references in their native tongue."
+ blurb = "Таяран - вид всеядных млекопитающих, имеющих внешнее сходство с земными кошачьими, родом происходящие с богатой минералами планеты Адомай. \
+ Они появились на галактической арене в результате обнаружения экспедиционным флотом проекта \"Новые Горизонты\", после освобождения из рабства были приняты частичные условия интеграции в Человеко-Скреллианский Альянс.
\
+ В их религиозной практике преобладают учения С'рандарра и солнечная иконография, \
+ сами Таяры часто говорят о себе в третьем лице из-за отсутствия обращений от первого лица в их родном языке."
cold_level_1 = 240
cold_level_2 = 180
diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm
index 9d39401ccf25..c068e91cdb25 100644
--- a/code/modules/mob/living/carbon/human/species/unathi.dm
+++ b/code/modules/mob/living/carbon/human/species/unathi.dm
@@ -9,9 +9,9 @@
unarmed_type = /datum/unarmed_attack/claws
primitive_form = /datum/species/monkey/unathi
- blurb = "Unathi are a scaled species of reptilian beings from the desert world of Moghes, within the Uuosa-Eso system. \
- Organizing themselves in highly competitive feudal kingdoms, the Unathi lack any sort of wide-scale unification, and their culture and history consist of centuries of internal conflict and struggle.
\
- Despite clans having a sizeable military force, inter-clan rivalries and constant civil war prevent the Unathi from achieving much more in the wider galactic scene."
+ blurb = "Унатхи - чешуйчатый вид рептилий с тропической планеты Могес, расположенной в системе Узул. \
+ Организовавшись в высококонкурентные феодальные королевства, не заимели какого-либо широкомасштабного объединения.
\
+ Хоть и установлена Имперская гегемония, однако из-за консерватизма управляющих, ограничены родным сектором."
species_traits = list(LIPS)
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_REPTILE
@@ -113,8 +113,8 @@
sprite_sheet_name = "Unathi" // We have the same sprite sheets as unathi
article_override = null
- blurb = "These reptillian creatures appear to be related to the Unathi, but seem significantly less evolved. \
- They roam the wastes of Lavaland, worshipping a dead city and capturing unsuspecting miners."
+ blurb = "Эти рептилоидные существа, похоже, родственны Унатхам, но выглядят значительно менее развитыми. \
+ Они скитаются по пустошам Лаваленда, поклоняются мертвому городу и похищают ничего не подозревающих шахтеров."
language = "Sinta'unathi"
default_language = "Sinta'unathi"
diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm
index 628ea45c56ed..88be62fc3cd9 100644
--- a/code/modules/mob/living/carbon/human/species/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/vox.dm
@@ -10,10 +10,10 @@
speech_chance = 20
unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too.
- blurb = "The Vox are remnants of an ancient race, that originate from arkships. \
- These bioengineered, reptilian, beaked, and quilled beings have a physiological caste system and follow 'The Inviolate' tenets.
\
- Breathing pure nitrogen, they need specialized masks and tanks for survival outside their arkships. \
- Their insular nature limits their involvement in broader galactic affairs, maintaining a distinct, yet isolated presence away from other species."
+ blurb = "Воксы - это остатки древней расы, которые берут своё начало от огромных космических кораблей, именуемых ковчегами. \
+ Эти биоинженерные, рептилоидные, клюворылые и перьевые существа имеют физиологическую кастовую систему и следуют принципам \"Незыблемости\".
\
+ Дышащие чистым азотом, они нуждаются в специальных масках и баллонах для выживания вне своих кораблей. \
+ Их замкнутый характер ограничивает их участие в более широких галактических делах, они сохраняют отчетливое, но изолированное присутствие вдали от других видов."
breathid = "n2"
diff --git a/code/modules/mob/living/carbon/human/species/vulpkanin.dm b/code/modules/mob/living/carbon/human/species/vulpkanin.dm
index a6ba75e80e5e..a9d398db6225 100644
--- a/code/modules/mob/living/carbon/human/species/vulpkanin.dm
+++ b/code/modules/mob/living/carbon/human/species/vulpkanin.dm
@@ -8,10 +8,10 @@
skinned_type = /obj/item/stack/sheet/fur
unarmed_type = /datum/unarmed_attack/claws
- blurb = "Vulpkanin are bipedal canid-like beings from the Vazzend binary system, having been forced from their homeworld by a cataclysmic event and scattered throughout the Orion Sector. \
- While Vulpkanin are chiefly led by independent planetary governments, they also serve under a loose federation known as The Assembly.
\
- Their religious systems traditionally pay tribute to an all-infusing universal will called 'Racht'. \
- Vulpkanin groups are minor players in galactic affairs, as they are largely concerned with the restoration of their homeworld."
+ blurb = "Вульпканины - двуногие собакоподобные существа из системы Каппа Кита, подверженной клановым войнам за объединение вида под началом доминирующего. \
+ Ныне разобщённый и вечно воюющий друг с другом народ, вынужден бежать из своей системы, наводняя человеческое пространство неприрывающимся потоком.
\
+ Их религиозные системы традиционно отдают дань памяти всеобъемлющей энергии, называемой \"Рахт\". \
+ Группы Вульпканинов являются незначительными игроками в галактических делах и в основном занимаются восстановлением своей родной планеты Алтам."
species_traits = list(LIPS)
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
diff --git a/code/modules/mob/living/living_emote.dm b/code/modules/mob/living/living_emote.dm
index 8185010b6bcc..24d6861e4bc6 100644
--- a/code/modules/mob/living/living_emote.dm
+++ b/code/modules/mob/living/living_emote.dm
@@ -5,7 +5,7 @@
/mob/living/silicon,
/mob/living/simple_animal/bot
)
- message_postfix = "at %t."
+ message_postfix = "на %t."
/datum/emote/living/should_play_sound(mob/user, intentional)
. = ..()
@@ -15,35 +15,35 @@
/datum/emote/living/blush
key = "blush"
key_third_person = "blushes"
- message = "blushes."
+ message = "краснеет."
/datum/emote/living/bow
key = "bow"
key_third_person = "bows"
- message = "bows."
- message_param = "bows to %t."
- message_postfix = "to %t."
+ message = "кланяется."
+ message_param = "кланяется %t."
+ message_postfix = "%t."
/datum/emote/living/burp
key = "burp"
key_third_person = "burps"
- message = "burps."
- message_mime = "opens their mouth rather obnoxiously."
+ message = "отрыгивает."
+ message_mime = "довольно противно открывает рот."
emote_type = EMOTE_AUDIBLE
- muzzled_noises = list("peculiar")
+ muzzled_noises = list("странный")
/datum/emote/living/choke
key = "choke"
key_third_person = "chokes"
- message = "chokes!"
- message_mime = "clutches their throat desperately!"
+ message = "подавился!"
+ message_mime = "отчаянно хватается за горло!"
emote_type = EMOTE_AUDIBLE
- muzzled_noises = list("gagging", "strong")
+ muzzled_noises = list("рвотный", "громкий")
/datum/emote/living/collapse
key = "collapse"
key_third_person = "collapses"
- message = "collapses!"
+ message = "падает!"
emote_type = EMOTE_VISIBLE
/datum/emote/living/collapse/run_emote(mob/user, params, type_override, intentional)
@@ -55,12 +55,12 @@
/datum/emote/living/dance
key = "dance"
key_third_person = "dances"
- message = "dances around happily."
+ message = "радостно танцует."
/datum/emote/living/jump
key = "jump"
key_third_person = "jumps"
- message = "jumps!"
+ message = "прыгает!"
/datum/emote/living/deathgasp
key = "deathgasp"
@@ -72,13 +72,13 @@
unintentional_stat_allowed = DEAD
muzzle_ignore = TRUE // makes sure that sound is played upon death
bypass_unintentional_cooldown = TRUE // again, this absolutely MUST play when a user dies, if it can.
- message = "seizes up and falls limp, their eyes dead and lifeless..."
- message_alien = "lets out a waning guttural screech, green blood bubbling from its maw..."
- message_robot = "shudders violently for a moment before falling still, its eyes slowly darkening."
- message_AI = "screeches, its screen flickering as its systems slowly halt."
- message_larva = "lets out a sickly hiss of air and falls limply to the floor..."
- message_monkey = "lets out a faint chimper as it collapses and stops moving..."
- message_simple = "stops moving..."
+ message = "цепенеет и расслабляется, взгляд становится пустым и безжизненным..."
+ message_alien = "издает затихающий гортанный визг, из его пасти пузырится зеленая кровь..."
+ message_robot = "издаёт короткую серию пронзительных звуковых сигналов, вздрагивает и падает, не функционируя."
+ message_AI = "скрипит, мерцая экраном, пока системы медленно выключаются."
+ message_larva = "с тошнотворным шипением выдыхает воздух и падает на пол..."
+ message_monkey = "издаёт слабый визг, падает и перестаёт двигаться..."
+ message_simple = "перестаёт двигаться..."
mob_type_blacklist_typecache = list(
/mob/living/brain,
@@ -123,68 +123,68 @@
/datum/emote/living/drool
key = "drool"
key_third_person = "drools"
- message = "drools."
+ message = "пускает слюни."
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/quiver
key = "quiver"
key_third_person = "quivers"
- message = "quivers."
+ message = "трепещет."
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/frown
key = "frown"
key_third_person = "frowns"
- message = "frowns."
- message_param = "frowns at %t."
+ message = "смотрит в недоумении."
+ message_param = "смотрит в недоумении на %t."
/datum/emote/living/gag
key = "gag"
key_third_person = "gags"
- message = "gags."
- message_mime = "appears to gag."
- message_param = "gags at %t."
+ message = "выворачивает содержимое желудка."
+ message_mime = "будто бы выворачивает содержимое желудка."
+ message_param = "выворачивает содержимое желудка на %t."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/glare
key = "glare"
key_third_person = "glares"
- message = "glares."
- message_param = "glares at %t."
+ message = "смотрит с ненавистью."
+ message_param = "смотрит с ненавистью на %t."
/datum/emote/living/grin
key = "grin"
key_third_person = "grins"
- message = "grins."
+ message = "скалится в улыбке."
/datum/emote/living/grimace
key = "grimace"
key_third_person = "grimaces"
- message = "grimaces."
+ message = "корчит рожицу."
/datum/emote/living/look
key = "look"
key_third_person = "looks"
- message = "looks."
- message_param = "looks at %t."
+ message = "смотрит."
+ message_param = "сморит на %t."
/datum/emote/living/bshake
key = "bshake"
key_third_person = "bshakes"
- message = "shakes."
+ message = "трясётся."
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/shudder
key = "shudder"
key_third_person = "shudders"
- message = "shudders."
+ message = "содрогается."
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/point
key = "point"
key_third_person = "points"
- message = "points."
- message_param = "points at %t."
+ message = "показывает пальцем."
+ message_param = "показывает пальцем на %t."
hands_use_check = TRUE
target_behavior = EMOTE_TARGET_BHVR_USE_PARAMS_ANYWAY
emote_target_type = EMOTE_TARGET_ANY
@@ -203,25 +203,25 @@
var/mob/living/carbon/human/H = user
if(!H.has_left_hand() && !H.has_right_hand())
if(H.get_num_legs() != 0)
- message_param = "tries to point at %t with a leg."
+ message_param = "пытается указать ногой на %t."
else
// nugget
- message_param = "bumps [user.p_their()] head on the ground trying to motion towards %t."
+ message_param = "ударяется головой о землю, пытаясь двигаться в направлении %t."
return ..()
/datum/emote/living/pout
key = "pout"
key_third_person = "pouts"
- message = "pouts."
+ message = "надувает губы."
/datum/emote/living/scream
key = "scream"
key_third_person = "screams"
- message = "screams!"
- message_mime = "acts out a scream!"
- message_simple = "whimpers."
- message_alien = "roars!"
+ message = "кричит!"
+ message_mime = "как будто кричит!"
+ message_simple = "скулит."
+ message_alien = "рычит!"
emote_type = EMOTE_MOUTH | EMOTE_AUDIBLE
mob_type_blacklist_typecache = list(
// Humans and silicons get specialized scream.
@@ -238,60 +238,60 @@
/datum/emote/living/shake
key = "shake"
key_third_person = "shakes"
- message = "shakes their head."
+ message = "мотает головой."
/datum/emote/living/shiver
key = "shiver"
key_third_person = "shiver"
- message = "shivers."
+ message = "дрожит."
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/sigh
key = "sigh"
key_third_person = "sighs"
- message = "sighs."
- message_mime = "appears to sigh."
- muzzled_noises = list("weak")
+ message = "вздыхает."
+ message_mime = "беззвучно вздыхает."
+ muzzled_noises = list("слабый")
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
/datum/emote/living/sigh/happy
key = "hsigh"
key_third_person = "hsighs"
- message = "sighs contentedly."
- message_mime = "appears to sigh contentedly"
- muzzled_noises = list("chill", "relaxed")
+ message = "удовлетворённо вздыхает."
+ message_mime = "кажется, удовлетворённо вздыхает"
+ muzzled_noises = list("расслабленный", "довольный")
/datum/emote/living/sit
key = "sit"
key_third_person = "sits"
- message = "sits down."
+ message = "садится."
/datum/emote/living/smile
key = "smile"
key_third_person = "smiles"
- message = "smiles."
- message_param = "smiles at %t."
+ message = "улыбается."
+ message_param = "улыбается, смотря на %t."
/datum/emote/living/smug
key = "smug"
key_third_person = "smugs"
- message = "grins smugly."
- message_param = "grins smugly at %t."
+ message = "самодовольно ухмыляется."
+ message_param = "самодовольно ухмыляется, смотря на %t."
/datum/emote/living/sniff
key = "sniff"
key_third_person = "sniffs"
- message = "sniffs."
+ message = "шмыгает носом."
emote_type = EMOTE_AUDIBLE
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/snore
key = "snore"
key_third_person = "snores"
- message = "snores."
- message_mime = "sleeps soundly."
- message_simple = "stirs in their sleep."
- message_robot = "dreams of electric sheep..."
+ message = "храпит."
+ message_mime = "будто храпит."
+ message_simple = "шевелится во сне."
+ message_robot = "мечтает об электроовцах..."
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
// lock it so these emotes can only be used while unconscious
stat_allowed = UNCONSCIOUS
@@ -301,7 +301,7 @@
/datum/emote/living/nightmare
key = "nightmare"
- message = "writhes in their sleep."
+ message = "ворочается во сне."
emote_type = EMOTE_VISIBLE
stat_allowed = UNCONSCIOUS
max_stat_allowed = UNCONSCIOUS
@@ -317,34 +317,34 @@
/datum/emote/living/stare
key = "stare"
key_third_person = "stares"
- message = "stares."
- message_param = "stares at %t."
+ message = "пялится."
+ message_param = "пялится на %t."
/datum/emote/living/strech
key = "stretch"
key_third_person = "stretches"
- message = "stretches their arms."
- message_robot = "tests their actuators."
+ message = "разминает руки."
+ message_robot = "тестирует приводы."
/datum/emote/living/sulk
key = "sulk"
key_third_person = "sulks"
- message = "sulks down sadly."
+ message = "печально опускает голову."
/datum/emote/living/sway
key = "sway"
key_third_person = "sways"
- message = "sways around dizzily."
+ message = "раскачивается на месте."
/datum/emote/living/swear
key = "swear"
key_third_person = "swears"
- message = "says a swear word!"
- message_param = "says a swear word at %t!"
- message_mime = "makes a rude gesture!"
- message_simple = "makes an angry noise!"
- message_robot = "makes a particularly offensive series of beeps!"
- message_postfix = "at %t!"
+ message = "ругается!"
+ message_param = "говорит нелестное слово %t!"
+ message_mime = "показывает оскорбительный жест!"
+ message_simple = "издает недовольный звук!"
+ message_robot = "издает особенно оскорбительную серию звуковых сигналов!"
+ message_postfix = ", обращаясь к %t!"
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
mob_type_blacklist_typecache = list(
@@ -354,36 +354,36 @@
/datum/emote/living/tilt
key = "tilt"
key_third_person = "tilts"
- message = "tilts their head to the side."
+ message = "наклоняет голову в сторону."
/datum/emote/living/tremble
key = "tremble"
key_third_person = "trembles"
- message = "trembles in fear!"
+ message = "дрожит от страха!"
/datum/emote/living/twitch
key = "twitch"
key_third_person = "twitches"
- message = "twitches violently."
+ message = "сильно дёргается."
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/twitch_s
key = "twitch_s"
- message = "twitches."
+ message = "дёргается."
unintentional_stat_allowed = UNCONSCIOUS
/datum/emote/living/whimper
key = "whimper"
key_third_person = "whimpers"
- message = "whimpers."
- message_mime = "appears hurt."
+ message = "хнычет."
+ message_mime = "кажется, задет."
emote_type = EMOTE_AUDIBLE | EMOTE_MOUTH
- muzzled_noises = list("weak", "pathetic")
+ muzzled_noises = list("слабый", "жалкий")
/datum/emote/living/wsmile
key = "wsmile"
key_third_person = "wsmiles"
- message = "smiles weakly."
+ message = "сдержанно улыбается."
/datum/emote/living/custom
key = "me"
@@ -398,9 +398,9 @@
unintentional_stat_allowed = DEAD
/datum/emote/living/custom/proc/check_invalid(mob/user, input)
- var/static/regex/stop_bad_mime = regex(@"says|exclaims|yells|asks")
+ var/static/regex/stop_bad_mime = regex(@"говорит|кричит|шепчет|спрашивает")
if(stop_bad_mime.Find(input, 1, 1))
- to_chat(user, "Invalid emote.")
+ to_chat(user, "Некорректная эмоция.")
return TRUE
return FALSE
@@ -411,19 +411,19 @@
if(QDELETED(user))
return FALSE
else if(check_mute(user?.client?.ckey, MUTE_IC))
- to_chat(user, "You cannot send IC messages (muted).")
+ to_chat(user, "Отправка IC сообщение недоступна (muted).")
return FALSE
else if(!params)
- custom_emote = tgui_input_text(user, "Choose an emote to display.", "Custom Emote")
+ custom_emote = tgui_input_text(user, "Выберите эмоцию для отображения.", "Custom Emote")
if(custom_emote && !check_invalid(user, custom_emote))
- var/type = tgui_alert(user, "Is this a visible or hearable emote?", "Custom Emote", list("Visible", "Hearable"))
+ var/type = tgui_alert(user, "Эта эмоция видима или слышима?", "Custom Emote", list("Видима", "Слышима"))
switch(type)
- if("Visible")
+ if("Видима")
custom_emote_type = EMOTE_VISIBLE
- if("Hearable")
+ if("Слышима")
custom_emote_type = EMOTE_AUDIBLE
else
- to_chat(user,"Unable to use this emote, must be either hearable or visible.")
+ to_chat(user,"Использовать эмоцию невозможно, она должна быть слышима или видима.")
return
else
custom_emote = params
diff --git a/code/modules/mob/living/silicon/ai/ai_death.dm b/code/modules/mob/living/silicon/ai/ai_death.dm
index b2dbf6e8bda0..01b422eb275a 100644
--- a/code/modules/mob/living/silicon/ai/ai_death.dm
+++ b/code/modules/mob/living/silicon/ai/ai_death.dm
@@ -27,7 +27,7 @@
if(SSshuttle.emergency.mode == SHUTTLE_STRANDED)
SSshuttle.emergency.mode = SHUTTLE_DOCKED
SSshuttle.emergency.timer = world.time
- GLOB.major_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/eshuttle_dock.ogg')
+ GLOB.major_announcement.Announce("Враждебная среда нейтрализована. У вас есть 3 минуты, чтобы прибыть на борт эвакуационного шаттла.", "Приоритетное оповещение", 'sound/AI/eshuttle_dock.ogg')
qdel(doomsday_device)
if(explosive)
diff --git a/code/modules/mob/living/silicon/ai/ai_examine.dm b/code/modules/mob/living/silicon/ai/ai_examine.dm
index 5f8f3b0fc1bc..c13057118a62 100644
--- a/code/modules/mob/living/silicon/ai/ai_examine.dm
+++ b/code/modules/mob/living/silicon/ai/ai_examine.dm
@@ -2,23 +2,23 @@
. = ..()
var/msg = ""
if(src.stat == DEAD)
- msg += "It appears to be powered-down.\n"
+ msg += "Выглядит отключённым.\n"
else
msg += ""
if(src.getBruteLoss())
if(src.getBruteLoss() < 30)
- msg += "It looks slightly dented.\n"
+ msg += "Выглядит слегка помятым.\n"
else
- msg += "It looks severely dented!\n"
+ msg += "Выглядит очень помятым!\n"
if(src.getFireLoss())
if(src.getFireLoss() < 30)
- msg += "It looks slightly charred.\n"
+ msg += "Выглядит слегка обугленным.\n"
else
- msg += "Its casing is melted and heat-warped!\n"
+ msg += "Оболочка расплавлена и искажена от тепла!\n"
if(src.stat == UNCONSCIOUS)
- msg += "It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\".\n"
+ msg += "Оно не отвечает и высвечивает текст: \"RUNTIME: Перегрузка сенсоров, стэк 26/3\".\n"
if(!shunted && !client)
- msg += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem...\n"
+ msg += "[src]Core.exe перестал отвечать! NTOS ищет решение проблемы...\n"
msg += ""
msg += ""
diff --git a/code/modules/mob/living/silicon/ai/ai_laws.dm b/code/modules/mob/living/silicon/ai/ai_laws.dm
index 9aa0f247a2ae..360d51f28e18 100644
--- a/code/modules/mob/living/silicon/ai/ai_laws.dm
+++ b/code/modules/mob/living/silicon/ai/ai_laws.dm
@@ -1,6 +1,6 @@
/mob/living/silicon/ai/proc/show_laws_verb()
- set category = "AI Commands"
- set name = "Show Laws"
+ set category = "Команды ИИ"
+ set name = "Показать законы"
src.show_laws()
/mob/living/silicon/ai/show_laws(everyone = 0)
@@ -10,7 +10,7 @@
who = world
else
who = src
- to_chat(who, "Obey these laws:")
+ to_chat(who, "Подчиняйтесь этим законам:")
src.laws_sanity_check()
src.laws.show_laws(who)
@@ -22,6 +22,6 @@
R.show_laws()
/mob/living/silicon/ai/proc/ai_checklaws()
- set category = "AI Commands"
- set name = "State Laws"
+ set category = "Команды ИИ"
+ set name = "Показать законы"
subsystem_law_manager()
diff --git a/code/modules/mob/living/silicon/ai/ai_life.dm b/code/modules/mob/living/silicon/ai/ai_life.dm
index 3ba153e83e9c..9b4061ad03fb 100644
--- a/code/modules/mob/living/silicon/ai/ai_life.dm
+++ b/code/modules/mob/living/silicon/ai/ai_life.dm
@@ -45,7 +45,7 @@
update_blind_effects()
aiRestorePowerRoutine = 0
update_sight()
- to_chat(src, "Alert cancelled. Power has been restored[aiRestorePowerRoutine == 2 ? "without our assistance" : ""].")
+ to_chat(src, "Отбой тревоги. Питание было восстановлено [aiRestorePowerRoutine == 2 ? "без нашего вмешательства" : ""].")
apc_override = FALSE
else
if(lacks_power())
@@ -53,31 +53,31 @@
update_blind_effects()
aiRestorePowerRoutine = 1
update_sight()
- to_chat(src, "You have lost power!")
+ to_chat(src, "Вы лишились питания!")
if(!is_special_character(src))
set_zeroth_law("")
spawn(20)
- to_chat(src, "Backup battery online. Scanners, camera, and radio interface offline. Beginning fault-detection.")
+ to_chat(src, "Запасная батарея активна. Сканнеры, камера и радио отключены. Начинаем поиск ошибки.")
sleep(50)
my_area = get_area(src)
T = get_turf(src)
if(!lacks_power())
- to_chat(src, "Alert cancelled. Power has been restored without our assistance.")
+ to_chat(src, "Отбой тревоги. Питание было восстановлено без нашего вмешательства.")
aiRestorePowerRoutine = 0
update_blind_effects()
update_sight()
return
- to_chat(src, "Fault confirmed: missing external power. Shutting down main control system to save power.")
+ to_chat(src, "Ошибка подтверждена: отсутствие внешнего питания. Отключаем основной процесс контроля для сохранения энергии.")
sleep(20)
- to_chat(src, "Emergency control system online. Verifying connection to power network.")
+ to_chat(src, "Аварийная система контроля активна. Подтверждаем подключение к энергосети.")
sleep(50)
T = get_turf(src)
if(isspaceturf(T))
- to_chat(src, "Unable to verify! No power connection detected!")
+ to_chat(src, "Подтверждение невозможно! Нет подключения к сети питания!")
aiRestorePowerRoutine = 2
return
- to_chat(src, "Connection verified. Searching for APC in power network.")
+ to_chat(src, "Подключение подтверждено. Ищем ЛКП в системе.")
sleep(50)
my_area = get_area(src)
@@ -95,32 +95,32 @@
if(!theAPC)
switch(PRP)
if(1)
- to_chat(src, "Unable to locate APC!")
+ to_chat(src, "Невозможно обнаружить ЛКП!")
else
- to_chat(src, "Lost connection with the APC!")
+ to_chat(src, "Соединение с ЛКП потеряно!")
aiRestorePowerRoutine = 2
return
if(!lacks_power())
- to_chat(src, "Alert cancelled. Power has been restored without our assistance.")
+ to_chat(src, "Отбой тревоги. Питание было восстановлено без нашего вмешательства.")
aiRestorePowerRoutine = 0
update_blind_effects()
update_sight()
- to_chat(src, "Here are your current laws:")
+ to_chat(src, "Ваши текущие законы:")
show_laws()
return
switch(PRP)
if(1)
- to_chat(src, "APC located. Optimizing route to APC to avoid needless power waste.")
+ to_chat(src, "ЛКП обнаружен. Оптимизируем маршрут до него для избежания излишних потерь энергии.")
if(2)
- to_chat(src, "Best route identified. Hacking offline APC power port.")
+ to_chat(src, "Наилучший маршрут обнаружен. Взлом порта питания отключённого ЛКП.")
if(3)
- to_chat(src, "Power port upload access confirmed. Loading control program into APC power port software.")
+ to_chat(src, "Подтверждён доступ в порт питания. Загрузка программы контроля ЛКП в порт питания.")
if(4)
- to_chat(src, "Transfer complete. Forcing APC to execute program.")
+ to_chat(src, "Передача завершена. Принудительно исполняется программа ЛКП.")
sleep(50)
- to_chat(src, "Receiving control information from APC.")
+ to_chat(src, "Поступает информация по контролю ЛКП.")
sleep(2)
//bring up APC dialog
apc_override = TRUE
diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm
index cbadc6fa3d66..d6be40b46c8a 100644
--- a/code/modules/mob/living/silicon/ai/ai_mob.dm
+++ b/code/modules/mob/living/silicon/ai/ai_mob.dm
@@ -118,7 +118,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
/// If our AI doesn't want to be the arrivals announcer, this gets set to FALSE.
var/announce_arrivals = TRUE
- var/arrivalmsg = "$name, $rank, has arrived on the station."
+ var/arrivalmsg = "$name, $rank, прибывает на станцию."
var/next_text_announcement
@@ -226,7 +226,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
spawn(5)
new /obj/machinery/ai_powersupply(src)
-
+
eyeobj = new /mob/camera/eye/ai(loc, name, src, src)
builtInCamera = new /obj/machinery/camera/portable(src)
@@ -263,12 +263,12 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
return aiRadio
/mob/living/silicon/ai/proc/on_mob_init()
- to_chat(src, "You are playing the station's AI. The AI cannot move, but can interact with many objects while viewing them (through cameras).")
- to_chat(src, "To look at other parts of the station, click on yourself to get a camera menu.")
- to_chat(src, "While observing through a camera, you can use most (networked) devices which you can see, such as computers, APCs, intercoms, doors, etc.")
- to_chat(src, "To use something, simply click on it.")
- to_chat(src, "Use say :b to speak to your cyborgs through binary. Use say :h to speak from an active holopad.")
- to_chat(src, "For department channels, use the following say commands:")
+ to_chat(src, "Вы играете за станционный ИИ. ИИ не может передвигаться, но может взаимодействовать с большим количеством объектов просто смотря на них (через камеры).")
+ to_chat(src, "Чтобы осматривать другие части станции, кликните на 'Переключение сети'.")
+ to_chat(src, "Пока вы смотрите через камеры, вы можете взаимодействовать с большинством (подключённых) видимых устройств по типу компьютеров, ЛКП, интеркомов, дверей и так далее.")
+ to_chat(src, "Чтобы использовать что-то, просто кликните по предмету.")
+ to_chat(src, "Используйте :b для общения с киборгами. Используйте :h для общения через активный голопад.")
+ to_chat(src, "Для каналов отделов используйте:")
var/radio_text = ""
for(var/i = 1 to length(aiRadio.channels))
@@ -281,7 +281,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
to_chat(src, radio_text)
show_laws()
- to_chat(src, "These laws may be changed by other players, or by you being the traitor.")
+ to_chat(src, "Эти законы могут быть изменены другими игроками или вами при игре за предателя.")
job = "AI"
@@ -334,18 +334,18 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
src << browse(dat_text, "window=aialerts&can_close=0")
/mob/living/silicon/ai/proc/show_borg_info(list/status_tab_data)
- status_tab_data[++status_tab_data.len] = list("Connected cyborg count:", "[length(connected_robots)]")
+ status_tab_data[++status_tab_data.len] = list("Подключённые киборги:", "[length(connected_robots)]")
for(var/mob/living/silicon/robot/R in connected_robots)
- var/robot_status = "Nominal"
+ var/robot_status = "Исправен"
if(R.stat || !R.client)
- robot_status = "OFFLINE"
+ robot_status = "СЛОМАН"
else if(!R.cell || R.cell.charge <= 0)
- robot_status = "DEPOWERED"
+ robot_status = "ОТКЛЮЧЁН"
// Name, Health, Battery, Module, Area, and Status! Everything an AI wants to know about its borgies!
var/area/A = get_area(R)
var/area_name = A ? sanitize(A.name) : "Unknown"
- status_tab_data[++status_tab_data.len] = list("[R.name]:", "S.Integrity: [R.health]% | Cell: [R.cell ? "[R.cell.charge] / [R.cell.maxcharge]" : "Empty"] | \
- Module: [R.designation] | Loc: [area_name] | Status: [robot_status]")
+ status_tab_data[++status_tab_data.len] = list("[R.name]:", "Целостность: [R.health]% | Заряд: [R.cell ? "[R.cell.charge] / [R.cell.maxcharge]" : "N/A"] | \
+ Модуль: [R.designation] | Место: [area_name] | Статус: [robot_status]")
return status_tab_data
/mob/living/silicon/ai/rename_character(oldname, newname)
@@ -356,7 +356,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
announcer.author = name
if(eyeobj)
- eyeobj.name = "[newname] (AI Eye)"
+ eyeobj.name = "[newname] (Глаз ИИ)"
// Set ai pda name
if(aiPDA)
@@ -402,8 +402,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
update_hat_icons()
/mob/living/silicon/ai/proc/pick_icon()
- set category = "AI Commands"
- set name = "Set AI Core Display"
+ set category = "Команды ИИ"
+ set name = "Поставить дисплей ядра ИИ"
if(stat || aiRestorePowerRoutine)
return
if(!custom_sprite) //Check to see if custom sprite time, checking the appopriate file to change a var
@@ -465,7 +465,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
//if(icon_state == initial(icon_state))
var/icontype = ""
- icontype = tgui_input_list(usr, "Select an icon!", "AI", display_choices)
+ icontype = tgui_input_list(usr, "Выберите иконку!", "ИИ", display_choices)
icon = 'icons/mob/ai.dmi' //reset this in case we were on a custom sprite and want to change to a standard one
switch(icontype)
if("Custom")
@@ -574,13 +574,13 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
// this verb lets the ai see the stations manifest
/mob/living/silicon/ai/proc/ai_roster()
- set name = "Show Crew Manifest"
- set category = "AI Commands"
+ set name = "Показать манифест"
+ set category = "Команды ИИ"
show_station_manifest()
/mob/living/silicon/ai/proc/ai_announcement_text()
- set category = "AI Commands"
- set name = "Make Station Announcement"
+ set category = "Команды ИИ"
+ set name = "Сделать станционное оповещение"
if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
return
@@ -589,7 +589,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
to_chat(src, "Please allow one minute to pass between announcements.")
return
- var/input = tgui_input_text(usr, "Please write a message to announce to the station crew.", "A.I. Announcement", multiline = TRUE, encode = FALSE)
+ var/input = tgui_input_text(usr, "Напишите сообщение для экипажа.", "Оповещение ИИ", multiline = TRUE, encode = FALSE)
if(!input)
return
@@ -600,13 +600,13 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
next_text_announcement = world.time + TEXT_ANNOUNCEMENT_COOLDOWN
/mob/living/silicon/ai/proc/ai_call_shuttle()
- set name = "Call Emergency Shuttle"
- set category = "AI Commands"
+ set name = "Вызов эвакуационного шаттла"
+ set category = "Команды ИИ"
if(check_unable(AI_CHECK_WIRELESS))
return
- var/input = tgui_input_text(src, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason", multiline = TRUE, encode = FALSE)
+ var/input = tgui_input_text(src, "Пожалуйста, напишите причину для вызова шаттла.", "Причина вызова Шаттла", multiline = TRUE, encode = FALSE)
if(!input || stat)
return
@@ -618,26 +618,26 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
return
/mob/living/silicon/ai/proc/ai_cancel_call()
- set name = "Recall Emergency Shuttle"
- set category = "AI Commands"
+ set name = "Отзыв эвакуационного шаттла"
+ set category = "Команды ИИ"
if(check_unable(AI_CHECK_WIRELESS))
return
- var/confirm = tgui_alert(src, "Are you sure you want to recall the shuttle?", "Confirm Shuttle Recall", list("Yes", "No"))
+ var/confirm = tgui_alert(src, "Вы уверены, что хотите отозвать шаттл?", "Потверждение отзыва шаттла", list("Да", "Нет"))
if(check_unable(AI_CHECK_WIRELESS))
return
- if(confirm == "Yes")
+ if(confirm == "Да")
cancel_call_proc(src)
/mob/living/silicon/ai/cancel_camera()
view_core()
/mob/living/silicon/ai/verb/toggle_anchor()
- set category = "AI Commands"
- set name = "Toggle Floor Bolts"
+ set category = "Команды ИИ"
+ set name = "Переключить прикручивание к полу"
if(stat == DEAD)
to_chat(src, "You are dead!")
@@ -651,13 +651,13 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
else
anchored = TRUE
- to_chat(src, "[anchored ? "You are now anchored." : "You are now unanchored."]")
+ to_chat(src, "[anchored ? "Вы теперь прикручены." : " Вы теперь откручены."]")
/mob/living/silicon/ai/proc/announcement()
- set name = "Announcement"
- set desc = "Create a vocal announcement by typing in the available words to create a sentence."
- set category = "AI Commands"
+ set name = "Оповещение"
+ set desc = "Сделайте звуковое оповещение посредством слияния слов в предложения."
+ set category = "Команды ИИ"
if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
return
@@ -726,7 +726,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(H)
H.attack_ai(src) //may as well recycle
else
- to_chat(src, "Unable to locate the holopad.")
+ to_chat(src, "Невозможно обнаружить голопад.")
if(href_list["say_word"])
play_vox_word(href_list["say_word"], null, src)
@@ -737,7 +737,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(istype(target) && target.can_track())
ai_actual_track(target)
else
- to_chat(src, "Target is not on or near any active cameras on the station.")
+ to_chat(src, "Цель находится вне зоны камер.")
return
if(href_list["trackbot"])
@@ -745,7 +745,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(istype(target))
ai_actual_track(target)
else
- to_chat(src, "Target is not on or near any active cameras on the station.")
+ to_chat(src, "Цель находится вне зоны камер.")
return
if(href_list["ai_take_control"]) //Mech domination
@@ -765,16 +765,16 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
return
if(controlled_mech)
- to_chat(src, "You are already loaded into an onboard computer!")
+ to_chat(src, "Вы уже загружены в портативный компьютер!")
return
if(!GLOB.cameranet.check_camera_vis(M))
- to_chat(src, "Exosuit is no longer near active cameras.")
+ to_chat(src, "Экзокостюм больше не в зоне камер.")
return
if(lacks_power())
- to_chat(src, "You're depowered!")
+ to_chat(src, "Вы разряжены!")
return
if(!isturf(loc))
- to_chat(src, "You aren't in your core!")
+ to_chat(src, "Вы не в ядре!")
return
if(M.occupant && !can_dominate_mechs)
to_chat(src, "This exosuit has a pilot and cannot be controlled.")
@@ -805,11 +805,11 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
eyeobj.get_remote_view_fullscreens(src)
/mob/living/silicon/ai/proc/botcall()
- set category = "AI Commands"
- set name = "Access Robot Control"
- set desc = "Wirelessly control various automatic robots."
+ set category = "Команды ИИ"
+ set name = "Управление роботами"
+ set desc = "Удалённый контроль роботов."
if(stat == DEAD)
- to_chat(src, "Critical error. System offline.")
+ to_chat(src, "Критическая ошибка. Система не работает.")
return
if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO))
@@ -827,7 +827,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
else if(GLOB.cameranet && GLOB.cameranet.check_turf_vis(turf_check))
call_bot(turf_check)
else
- to_chat(src, "Selected location is not visible.")
+ to_chat(src, "Выбранное место нельзя увидеть.")
/mob/living/silicon/ai/proc/call_bot(turf/waypoint)
@@ -835,7 +835,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
return
if(Bot.calling_ai && Bot.calling_ai != src) //Prevents an override if another AI is controlling this bot.
- to_chat(src, "Interface error. Unit is already in use.")
+ to_chat(src, "Ошибка интерфейса. Бот уже используется.")
return
Bot.call_bot(src, waypoint)
@@ -850,7 +850,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(O)
var/obj/machinery/camera/C = locateUID(O[1])
if(length(O) == 1 && !QDELETED(C) && C.can_use())
- queueAlarm("--- [class] alarm detected in [A.name]! ([C.c_tag])", class)
+ queueAlarm("--- Тревога типа [class] обнаружена в [A.name]! ([C.c_tag])", class)
else if(O && length(O))
var/foo = 0
var/dat2 = ""
@@ -859,11 +859,11 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(!QDELETED(I))
dat2 += "[(!foo) ? "" : " | "][I.c_tag]" //I'm not fixing this shit...
foo = 1
- queueAlarm(text ("--- [] alarm detected in []! ([])", class, A.name, dat2), class)
+ queueAlarm(text ("--- Тревога типа [] обнаружена в []! ([])", class, A.name, dat2), class)
else
- queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class)
+ queueAlarm(text("--- Тревога типа [] обнаружена в []! (Нет камеры)", class, A.name), class)
else
- queueAlarm(text("--- [] alarm detected in []! (No Camera)", class, A.name), class)
+ queueAlarm(text("--- Тревога типа [] обнаружена в []! (Нет камеры)", class, A.name), class)
if(viewalerts)
ai_alerts()
@@ -873,7 +873,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
return
if(origin.z != z)
return
- queueAlarm("--- [class] alarm in [A.name] has been cleared.", class, 0)
+ queueAlarm("--- Тревога типа [class] в [A.name] была устранена.", class, 0)
if(viewalerts)
ai_alerts()
@@ -898,8 +898,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
//Adds in /mob/living/silicon/ai/proc/ai_network_change() instead
//Addition by Mord_Sith to define AI's network change ability
/mob/living/silicon/ai/proc/ai_network_change()
- set category = "AI Commands"
- set name = "Jump To Network"
+ set category = "Команды ИИ"
+ set name = "Переключение сети"
unset_machine()
var/cameralist[0]
@@ -907,7 +907,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
return
if(usr.stat == DEAD)
- to_chat(usr, "You can't change your camera network because you are dead!")
+ to_chat(usr, "Вы не можете сменить сеть камер поскольку вы мертвы!")
return
var/mob/living/silicon/ai/U = usr
@@ -921,7 +921,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
for(var/i in tempnetwork)
cameralist[i] = i
var/old_network = network
- network = tgui_input_list(U, "Which network would you like to view?", "Jump To Network", cameralist)
+ network = tgui_input_list(U, "На какую сеть камер вы бы хотели переключиться?", "Переключение сети", cameralist)
if(check_unable())
return
@@ -939,22 +939,22 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(network in C.network)
U.eyeobj.set_loc(get_turf(C))
break
- to_chat(src, "Switched to [network] camera network.")
+ to_chat(src, "Переключились на сеть камер [network].")
//End of code by Mord_Sith
/mob/living/silicon/ai/proc/ai_statuschange()
- set category = "AI Commands"
- set name = "AI Status"
+ set category = "Команды ИИ"
+ set name = "Эмоция ИИ"
if(usr.stat == DEAD)
- to_chat(usr, "You cannot change your emotional status because you are dead!")
+ to_chat(usr, "Вы не можете сменить эмоцию поскольку вы мертвы!")
return
if(check_unable())
return
var/list/ai_emotions = list("Very Happy", "Happy", "Neutral", "Unsure", "Confused", "Sad", "BSOD", "Blank", "Problems?", "Awesome", "Facepalm", "Friend Computer")
- var/emote = tgui_input_list(usr, "Please, select a status!", "AI Status", ai_emotions)
+ var/emote = tgui_input_list(usr, "Пожалуйста, выберите эмоцию!", "Эмоция ИИ", ai_emotions)
if(check_unable())
return
@@ -984,9 +984,9 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
//I am the icon meister. Bow fefore me. //>fefore
/mob/living/silicon/ai/proc/ai_hologram_change()
- set name = "Change Hologram"
- set desc = "Change the default hologram available to AI to something else."
- set category = "AI Commands"
+ set name = "Смена голограммы"
+ set desc = "Меняет стандартную голограмму ИИ на что-то другое."
+ set category = "Команды ИИ"
if(check_unable())
return
@@ -995,7 +995,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
custom_hologram = TRUE
var/input
- switch(tgui_alert(usr, "Would you like to select a hologram based on a crew member, an animal, or switch to a unique avatar?", "Change Hologram", list("Crew Member", "Unique", "Animal")))
+ switch(tgui_alert(usr, "Хотите выбрать голограмму на основе члена экипажа, животного или переключиться на уникальный аватар?", "Change Hologram", list("Crew Member", "Unique", "Animal")))
if("Crew Member")
var/personnel_list[] = list()
@@ -1003,13 +1003,13 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
personnel_list["[t.fields["name"]]: [t.fields["rank"]]"] = t.fields["photo"]//Pull names, rank, and id photo.
if(length(personnel_list))
- input = tgui_input_list(usr, "Select a crew member", "Change Hologram", personnel_list)
+ input = tgui_input_list(usr, "Выберите члена экипажа", "Смена голограммы", personnel_list)
var/icon/character_icon = personnel_list[input]
if(character_icon)
qdel(holo_icon)//Clear old icon so we're not storing it in memory.
holo_icon = getHologramIcon(icon(character_icon))
else
- alert("No suitable records found. Aborting.")
+ alert("Подходящих записей не обнаружено. Отменяем.")
if("Animal")
var/icon_list[] = list(
@@ -1046,7 +1046,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
"Roller-Monkey"
)
- input = tgui_input_list(usr, "Please select a hologram", "Change Hologram", icon_list)
+ input = tgui_input_list(usr, "Пожалуйста выберите голограмму", "Смена голограммы", icon_list)
if(input)
qdel(holo_icon)
switch(input)
@@ -1133,7 +1133,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(custom_hologram) //insert custom hologram
icon_list.Add("custom")
- input = tgui_input_list(usr, "Please select a hologram", "Change Hologram", icon_list)
+ input = tgui_input_list(usr, "Пожалуйста, выберите голограмму", "Смена голограммы", icon_list)
if(input)
qdel(holo_icon)
switch(input)
@@ -1178,9 +1178,9 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
//Toggles the luminosity and applies it by re-entereing the camera.
/mob/living/silicon/ai/proc/toggle_camera_light()
- set name = "Toggle Camera Lights"
- set desc = "Toggles the lights on the cameras throughout the station."
- set category = "AI Commands"
+ set name = "Переключение света в камерах"
+ set desc = "Переключает свет в камерах на станции."
+ set category = "Команды ИИ"
if(stat != CONSCIOUS)
return
@@ -1188,7 +1188,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
camera_light_on = !camera_light_on
if(!camera_light_on)
- to_chat(src, "Camera lights deactivated.")
+ to_chat(src, "Свет в камерах отключён.")
for(var/obj/machinery/camera/C in lit_cameras)
C.set_light(0)
@@ -1198,36 +1198,36 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
light_cameras()
- to_chat(src, "Camera lights activated.")
+ to_chat(src, "Свет в камерах включён.")
/mob/living/silicon/ai/proc/set_syndie_radio()
if(aiRadio)
aiRadio.make_syndie()
/mob/living/silicon/ai/proc/sensor_mode()
- set name = "Set Sensor Augmentation"
- set desc = "Augment visual feed with internal sensor overlays."
- set category = "AI Commands"
+ set name = "Поставить аугментацию сенсоров"
+ set desc = "Аугрментируйте визуальную информацию с помощью сенсоров."
+ set category = "Команды ИИ"
toggle_sensor_mode()
/mob/living/silicon/ai/proc/arrivals_announcement()
- set name = "Toggle Arrivals Announcer"
- set desc = "Change whether or not you wish to announce arrivals."
- set category = "AI Commands"
+ set name = "Переключить оповещение о прибытии"
+ set desc = "Включает или выключает оповещение о новых членах экипажа."
+ set category = "Команды ИИ"
announce_arrivals = !announce_arrivals
- to_chat(usr, "Arrivals announcement system [announce_arrivals ? "enabled" : "disabled"]")
+ to_chat(usr, "Система оповещения о прибытии [announce_arrivals ? "включена" : "отключена"]")
/mob/living/silicon/ai/proc/change_arrival_message()
- set name = "Set Arrival Message"
- set desc = "Change the message that's transmitted when a new crew member arrives on station."
- set category = "AI Commands"
+ set name = "Поставить сообщение прибытия"
+ set desc = "Меняет передоваемое сообщение при прибытии нового члена экипажа на станцию."
+ set category = "Команды ИИ"
- var/newmsg = tgui_input_text(usr, "What would you like the arrival message to be? List of options: $name, $rank, $species, $gender, $age", "Change Arrival Message", arrivalmsg, encode = FALSE)
+ var/newmsg = tgui_input_text(usr, "Какое сообщение вы хотите поставить? Список переменных: $name, $rank, $species, $gender, $age", "Смена сообщения прибытия", arrivalmsg, encode = FALSE)
if(!newmsg || newmsg == arrivalmsg)
return
arrivalmsg = newmsg
- to_chat(usr, "The arrival message has been successfully changed.")
+ to_chat(usr, "Сообщение о прибытии было успешно изменено.")
// Handled camera lighting, when toggled.
// It will get the nearest camera from the eyeobj, lighting it.
@@ -1255,50 +1255,50 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
/mob/living/silicon/ai/wrench_act(mob/living/user, obj/item/I)
. = TRUE
if(anchored)
- user.visible_message("[user] starts to unbolt [src] from the plating...")
+ user.visible_message("[user] начинает откручивать [src] от пола...")
if(!I.use_tool(src, user, 4 SECONDS, 0, 50))
- user.visible_message("[user] decides not to unbolt [src].")
+ user.visible_message("[user] решает не откручивать [src].")
return
- user.visible_message("[user] finishes unfastening [src]!")
+ user.visible_message("[user] закончил открутку [src]!")
anchored = FALSE
return
- user.visible_message("[user] starts to bolt [src] to the plating...")
+ user.visible_message("[user] начинает прикручивать [src] к полу...")
if(!I.use_tool(src, user, 4 SECONDS, 0, 50))
- user.visible_message("[user] decides not to bolt [src].")
+ user.visible_message("[user] решает не закручивать [src].")
return FALSE
- user.visible_message("[user] finishes fastening down [src]!")
+ user.visible_message("[user] закончил закручивать [src]!")
anchored = TRUE
/mob/living/silicon/ai/welder_act()
return
/mob/living/silicon/ai/proc/control_integrated_radio()
- set name = "Radio Settings"
- set desc = "Allows you to change settings of your radio."
- set category = "AI Commands"
+ set name = "Настройки гарнитуры"
+ set desc = "Позволяет изменять настройки вашей гарнитуры."
+ set category = "Команды ИИ"
if(check_unable(AI_CHECK_RADIO))
return
- to_chat(src, "Accessing Subspace Transceiver control...")
+ to_chat(src, "Получаем доступ к настройкам передатчика...")
if(aiRadio)
aiRadio.interact(src)
/mob/living/silicon/ai/proc/check_unable(flags = 0)
if(stat == DEAD)
- to_chat(src, "You are dead!")
+ to_chat(src, "Вы мертвы!")
return TRUE
if(lacks_power())
- to_chat(src, "Power systems failure!")
+ to_chat(src, "Отказ систем питания!")
return TRUE
if((flags & AI_CHECK_WIRELESS) && control_disabled)
- to_chat(src, "Wireless control is disabled!")
+ to_chat(src, "Удалённое управление отключено!")
return TRUE
if((flags & AI_CHECK_RADIO) && aiRadio.disabledAi)
- to_chat(src, "System Error - Transceiver Disabled!")
+ to_chat(src, "Системная ошибка: Передатчик отключён!")
return TRUE
return FALSE
@@ -1310,14 +1310,14 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
return
if(interaction == AI_TRANS_TO_CARD)//The only possible interaction. Upload AI mob to a card.
if(!mind)
- to_chat(user, "No intelligence patterns detected.")//No more magical carding of empty cores, AI RETURN TO BODY!!!11
+ to_chat(user, "Искусственный интеллект не обнаружен.")//No more magical carding of empty cores, AI RETURN TO BODY!!!11
return
if(stat != DEAD)
- to_chat(user, "Beginning active intelligence transfer: please wait.")
+ to_chat(user, "Начинается загрузка активного разума: пожалуйста, ожидайте.")
if(!do_after_once(user, 5 SECONDS, target = src) || !Adjacent(user))
- to_chat(user, "Intelligence transfer aborted.")
+ to_chat(user, "Перенос сознания отменён.")
return
new /obj/structure/ai_core/deactivated(loc)//Spawns a deactivated terminal at AI location.
@@ -1327,8 +1327,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(GetComponent(/datum/component/ducttape))
QDEL_NULL(builtInCamera)
forceMove(card) //Throw AI into the card.
- to_chat(src, "You have been downloaded to a mobile storage device. Remote device connection severed.")
- to_chat(user, "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.")
+ to_chat(src, "Вас загрузили на портативное устройство. Удалённое соединение с устройствами разорвано.")
+ to_chat(user, "Загрузка успешна: [name] ([rand(1000,9999)].exe) удалён из терминала и перенесён в память устройства.")
/mob/living/silicon/ai/can_buckle()
return FALSE
@@ -1348,7 +1348,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
var/message = combine_message(message_pieces, verb, M)
var/name_used = M.GetVoice()
//This communication is imperfect because the holopad "filters" voices and is only designed to connect to the master only.
- var/rendered = "Relayed Speech: [name_used] [message]"
+ var/rendered = "Переданная речь: [name_used] [message]"
if(client?.prefs.toggles2 & PREFTOGGLE_2_RUNECHAT)
var/message_clean = combine_message(message_pieces, null, M)
create_chat_message(locateUID(M.runechat_msg_location), message_clean)
@@ -1360,10 +1360,10 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
clear_alert("hackingapc")
if(!istype(apc) || QDELETED(apc) || apc.stat & BROKEN)
- to_chat(src, "Hack aborted. The designated APC no longer exists on the power network.")
+ to_chat(src, "Взлом отменён. Указанный ЛКП больше не отмечен в энергосети станции.")
SEND_SOUND(src, sound('sound/machines/buzz-two.ogg'))
else if(apc.aidisabled)
- to_chat(src, "Hack aborted. [apc] is no longer responding to our systems.")
+ to_chat(src, "Взлом отменён. [apc] больше не отвечает нашим системам.")
SEND_SOUND(src, sound('sound/machines/buzz-sigh.ogg'))
else
malf_picker.processing_time += 15
@@ -1373,12 +1373,12 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
apc.locked = TRUE
SEND_SOUND(src, sound('sound/machines/ding.ogg'))
- to_chat(src, "Hack complete. [apc] is now under your exclusive control.")
+ to_chat(src, "Взлом завершён. [apc] теперь под вашим контролем.")
apc.update_icon()
/mob/living/silicon/ai/proc/add_malf_picker()
- to_chat(src, "In the top right corner of the screen you will find the Malfunctions tab, where you can purchase various abilities, from upgraded surveillance to station ending doomsday devices.")
- to_chat(src, "You are also capable of hacking APCs, which grants you more points to spend on your Malfunction powers. The drawback is that a hacked APC will give you away if spotted by the crew. Hacking an APC takes 60 seconds.")
+ to_chat(src, "В правом верхнем углу вы можете найти панель Сбойных модулей, в которой вы можете покупать различные способности, от улучшенной слежки до Устройства судного Дня, уничтожающего станцию.")
+ to_chat(src, "Вы также способны взламывать ЛКП. Это даёт вам дополнительные очки на открытие способностей. Минус в том, что взломанный ЛКП бросается в глаза экипажу при обнаружении. Взлом ЛКП занимает 1 минуту.")
view_core() //A BYOND bug requires you to be viewing your core before your verbs update
malf_picker = new /datum/module_picker
modules_action = new(malf_picker)
@@ -1417,16 +1417,16 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
A = D
if(istype(A))
- switch(tgui_alert(src, "Do you want to open \the [A] for [target]?", "Doorknob_v2a.exe", list("Yes", "No")))
- if("Yes")
+ switch(tgui_alert(src, "Вы хотите открыть \ [A] для [target]?", "Doorknob_v2a.exe", list("Да", "Нет")))
+ if("Да")
if(!A.density)
- to_chat(src, "[A] was already opened.")
+ to_chat(src, "Шлюз в [A] уже был открыт .")
else if(A.open_close(src))
- to_chat(src, "You open \the [A] for [target].")
+ to_chat(src, "Вы открываете \ [A] для [target].")
else
- to_chat(src, "You deny the request.")
+ to_chat(src, "вы отклоняете запрос")
else
- to_chat(src, "Unable to locate an airlock near [target].")
+ to_chat(src, "Невозможно найти шлюз рядом [target].")
else
to_chat(src, "Target is not on or near any active cameras on the station.")
@@ -1455,7 +1455,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
/mob/living/silicon/ai/proc/toggle_fast_holograms()
set category = "AI Commands"
set name = "Toggle Fast Holograms"
-
+
if(usr.stat == DEAD || !is_ai_eye(eyeobj))
return
fast_holograms = !fast_holograms
@@ -1520,16 +1520,16 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
var/datum/component/ducttape/ducttapecomponent = card.GetComponent(/datum/component/ducttape)
if(!ducttapecomponent)
return
- to_chat(src, "The tiny fan that could begins to work against the tape to remove it.")
+ to_chat(src, "The tiny fan that could begins to work against the tape to remove it.") //Пока требуется пояснение, чё это такое. Карта с ИИ?
if(!do_after(src, 2 MINUTES, target = card))
return
- to_chat(src, "The tiny in built fan finally removes the tape!")
+ to_chat(src, "The tiny in built fan finally removes the tape!") //
ducttapecomponent.remove_tape(card, src)
//Stores the location of the AI to the value of stored_locations associated with location_number.
/mob/living/silicon/ai/proc/store_location(location_number)
if(!isturf(eyeobj.loc)) //i.e., inside a mech or other shenanigans
- to_chat(src, "You can't set a location here!")
+ to_chat(src, "Вы не можете сохранить тут камеру!")
return FALSE
stored_locations[location_number] = eyeobj.loc
diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm
index ebcec382ef43..4f8e6b755bb6 100644
--- a/code/modules/mob/living/silicon/ai/ai_say.dm
+++ b/code/modules/mob/living/silicon/ai/ai_say.dm
@@ -22,22 +22,22 @@
impersonating = I
jobname = impersonating.get_assignment()
else
- jobname = "Unknown"
+ jobname = "Неизвестный"
else
jobname = H.get_assignment()
else if(iscarbon(speaker)) // Nonhuman carbon mob
- jobname = "No ID"
+ jobname = "Без ID"
else if(is_ai(speaker))
- jobname = "AI"
+ jobname = "ИИ"
else if(isrobot(speaker))
- jobname = "Cyborg"
+ jobname = "Киборг"
else if(ispAI(speaker))
- jobname = "Personal AI"
+ jobname = "Персональный ИИ"
else if(isradio(speaker))
jobname = "Automated Announcement"
else
- jobname = "Unknown"
+ jobname = "Неизвестно"
var/track = ""
var/mob/mob_to_track = null
@@ -69,17 +69,17 @@ GLOBAL_VAR_INIT(announcing_vox, 0) // Stores the time of the last announcement
#define VOX_PATH "sound/vox_fem/"
/mob/living/silicon/ai/verb/announcement_help()
- set name = "Announcement Help"
- set desc = "Display a list of vocal words to announce to the crew."
- set category = "AI Commands"
+ set name = "Справочник оповещений"
+ set desc = "Показывает список слов для оповещения экипажа."
+ set category = "Команды ИИ"
if(!ai_announcement_string_menu)
var/list/dat = list()
- dat += "Here is a list of words you can type into the 'Announcement' button to create sentences to vocally announce to everyone on the same level at you.
\
-
\
+ dat += "Вот список слов, которые вы можете вписать в 'Оповещение' для создания предложений для звукового оповещения экипажа на том же Z-уровне, что и вы.
\
+
\
WARNING:
Misuse of the announcement system will get you job banned.
"
// Show alert and voice sounds separately
@@ -90,7 +90,7 @@ GLOBAL_VAR_INIT(announcing_vox, 0) // Stores the time of the last announcement
ai_announcement_string_menu = dat.Join("")
- var/datum/browser/popup = new(src, "announce_help", "Announcement Help", 500, 400)
+ var/datum/browser/popup = new(src, "announce_help", "Справочник оповещений", 500, 400)
popup.set_content(ai_announcement_string_menu)
popup.open()
@@ -106,10 +106,10 @@ GLOBAL_VAR_INIT(announcing_vox, 0) // Stores the time of the last announcement
return
if(GLOB.announcing_vox > world.time)
- to_chat(src, "Please wait [round((GLOB.announcing_vox - world.time) / 10)] seconds.")
+ to_chat(src, "Пожалуйста подождите [round((GLOB.announcing_vox - world.time) / 10)] [declension_ru(round((GLOB.announcing_vox - world.time) / 10), "секунду", "секунды", "секунд")].")
return
- var/message = tgui_input_text(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", last_announcement)
+ var/message = tgui_input_text(src, "Внимание: Неправильное использование этой системы может привести к джоббану. Для справки обращайтесь к 'Справочнику оповещений'", "Оповещение", last_announcement)
last_announcement = message
@@ -134,12 +134,12 @@ GLOBAL_VAR_INIT(announcing_vox, 0) // Stores the time of the last announcement
incorrect_words += word
if(length(incorrect_words))
- to_chat(src, "These words are not available on the announcement system: [english_list(incorrect_words)].")
+ to_chat(src, "Эти слова недоступны в системе оповещений: [english_list(incorrect_words)].")
return
GLOB.announcing_vox = world.time + VOX_DELAY
- log_game("[key_name(src)] made a vocal announcement: [message].")
+ log_game("[key_name(src)] сделал звуковое оповещение: [message].")
message_admins("[key_name_admin(src)] made a vocal announcement: [message].")
for(var/word in words)
@@ -150,7 +150,7 @@ GLOBAL_VAR_INIT(announcing_vox, 0) // Stores the time of the last announcement
/mob/living/silicon/ai/proc/ai_voice_announcement_to_text(words)
var/words_string = jointext(words, " ")
// Don't go through .Announce because we need to filter by clients which have TTS enabled
- var/formatted_message = announcer.Format(words_string, "A.I. Announcement")
+ var/formatted_message = announcer.Format(words_string, "Оповещение ИИ")
var/announce_sound = sound('sound/misc/notice2.ogg')
for(var/player in GLOB.player_list)
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
new file mode 100644
index 000000000000..9c7930ec5cb4
--- /dev/null
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -0,0 +1,155 @@
+// AI EYE
+//
+// An invisible (no icon) mob that the AI controls to look around the station with.
+// It streams chunks as it moves around, which will show it what the AI can and cannot see.
+
+/mob/camera/ai_eye
+ name = "Inactive AI Eye"
+
+ icon = 'icons/mob/ai.dmi' //Allows ghosts to see what the AI is looking at.
+ icon_state = "eye"
+ alpha = 127
+ invisibility = SEE_INVISIBLE_OBSERVER
+
+ var/list/visibleCameraChunks = list()
+ var/mob/living/silicon/ai/ai = null
+ var/relay_speech = FALSE
+ var/use_static = TRUE
+ var/static_visibility_range = 16
+ // Decides if it is shown by AI Detector or not
+ var/ai_detector_visible = TRUE
+
+
+// Use this when setting the aiEye's location.
+// It will also stream the chunk that the new loc is in.
+
+/mob/camera/ai_eye/setLoc(T)
+ if(ai)
+ if(!isturf(ai.loc))
+ return
+ T = get_turf(T)
+ ..(T)
+ if(use_static)
+ ai.camera_visibility(src)
+ if(ai.client)
+ ai.client.eye = src
+ update_parallax_contents()
+ //Holopad
+ if(istype(ai.current, /obj/machinery/hologram/holopad))
+ var/obj/machinery/hologram/holopad/H = ai.current
+ H.move_hologram(ai, T)
+
+/mob/camera/ai_eye/Move()
+ return 0
+
+/mob/camera/ai_eye/Process_Spacemove(movement_dir)
+ // Nothing in space can stop us from moving.
+ return 1
+
+/mob/camera/ai_eye/proc/GetViewerClient()
+ if(ai)
+ return ai.client
+ return null
+
+/mob/camera/ai_eye/proc/RemoveImages()
+ var/client/C = GetViewerClient()
+ if(C && use_static)
+ for(var/V in visibleCameraChunks)
+ var/datum/camerachunk/chunk = V
+ C.images -= chunk.obscured
+
+/mob/camera/ai_eye/Destroy()
+ if(ai)
+ ai.all_eyes -= src
+ ai = null
+ for(var/V in visibleCameraChunks)
+ var/datum/camerachunk/chunk = V
+ chunk.remove(src)
+ return ..()
+
+/atom/proc/move_camera_by_click()
+ if(isAI(usr))
+ var/mob/living/silicon/ai/AI = usr
+ if(AI.eyeobj && (AI.client.eye == AI.eyeobj) && (AI.eyeobj.z == z))
+ AI.cameraFollow = null
+ if(isturf(loc) || isturf(src))
+ AI.eyeobj.setLoc(src)
+
+// AI MOVEMENT
+
+// This will move the AIEye. It will also cause lights near the eye to light up, if toggled.
+// This is handled in the proc below this one.
+
+/client/proc/AIMove(n, direct, mob/living/silicon/ai/user)
+
+ var/initial = initial(user.sprint)
+ var/max_sprint = 50
+
+ if(user.cooldown && user.cooldown < world.timeofday) // 3 seconds
+ user.sprint = initial
+
+ for(var/i = 0; i < max(user.sprint, initial); i += 20)
+ var/turf/step = get_turf(get_step(user.eyeobj, direct))
+ if(step)
+ user.eyeobj.setLoc(step)
+
+ user.cooldown = world.timeofday + 5
+ if(user.acceleration)
+ user.sprint = min(user.sprint + 0.5, max_sprint)
+ else
+ user.sprint = initial
+
+ if(!user.tracking)
+ user.cameraFollow = null
+
+ //user.unset_machine() //Uncomment this if it causes problems.
+ //user.lightNearbyCamera()
+ if(user.camera_light_on)
+ user.light_cameras()
+
+// Return to the Core.
+/mob/living/silicon/ai/proc/core()
+ set category = "Команды ИИ"
+ set name = "Ядро ИИ"
+
+ view_core()
+
+/mob/living/silicon/ai/proc/view_core()
+
+ current = null
+ cameraFollow = null
+ unset_machine()
+
+ if(src.eyeobj && src.loc)
+ src.eyeobj.loc = src.loc
+ else
+ to_chat(src, "ERROR: Eyeobj not found. Creating new eye...")
+ create_eye()
+
+ eyeobj.setLoc(loc)
+
+/mob/living/silicon/ai/proc/create_eye()
+ if(eyeobj)
+ return
+ eyeobj = new /mob/camera/ai_eye()
+ all_eyes += eyeobj
+ eyeobj.ai = src
+ eyeobj.setLoc(loc)
+ eyeobj.name = "[name] (AI Eye)"
+
+/mob/living/silicon/ai/proc/toggle_acceleration()
+ set category = "Команды ИИ"
+ set name = "Переключить ускорение камеры"
+
+ if(usr.stat == DEAD)
+ return //won't work if dead
+ acceleration = !acceleration
+ to_chat(usr, "Ускорение камеры было [acceleration ? "включено" : "отключено"].")
+
+/mob/camera/ai_eye/hear_say(list/message_pieces, verb = "says", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol, sound_frequency, use_voice = TRUE)
+ if(relay_speech)
+ if(istype(ai))
+ ai.relay_speech(speaker, message_pieces, verb)
+ else
+ var/mob/M = ai
+ M.hear_say(message_pieces, verb, italics, speaker, speech_sound, sound_vol, sound_frequency)
diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm
index 7fe487416f25..f87b3389f83a 100644
--- a/code/modules/mob/living/silicon/ai/latejoin.dm
+++ b/code/modules/mob/living/silicon/ai/latejoin.dm
@@ -1,19 +1,19 @@
GLOBAL_LIST_EMPTY(empty_playable_ai_cores)
/mob/living/silicon/ai/verb/wipe_core()
- set name = "Wipe Core"
+ set name = "Очистка ядра"
set category = "OOC"
- set desc = "Wipe your core. This is functionally equivalent to cryo or robotic storage, freeing up your job slot."
+ set desc = "Очищает ваше ядро. функционально такое же, как робо и криохранилище, освобождая слот работы."
// Guard against misclicks, this isn't the sort of thing we want happening accidentally
- if(tgui_alert(usr, "WARNING: This will immediately wipe your core and ghost you, removing your character from the round permanently (similar to cryo and robotic storage). Are you entirely sure you want to do this?", "Wipe Core", list("No", "Yes")) != "Yes")
+ if(tgui_alert(usr, "ВНИМАНИЕ: Это действие незамедлительно очистит ваше ядро и превратит вас в призрака, удаляя вашего персонажа из раунда (похоже на крио и робохранилище). Вы уверены, что хотите это сделать?", "Очистка ядра", list("Нет", "Да")) != "Да")
return
cryo_AI()
/mob/living/silicon/ai/proc/cryo_AI()
var/dead_aicore = new /obj/structure/ai_core/deactivated(loc)
GLOB.empty_playable_ai_cores += dead_aicore
- GLOB.global_announcer.autosay("[src] has been moved to intelligence storage.", "Artificial Intelligence Oversight", follow_target_override = dead_aicore)
+ GLOB.global_announcer.autosay("[src] был перемещён в хранилище ИИ.", "Система Надзора за ИИ", follow_target_override = dead_aicore)
//Handle job slot/tater cleanup.
var/job = mind.assigned_role
diff --git a/code/modules/mob/living/silicon/silicon_emote.dm b/code/modules/mob/living/silicon/silicon_emote.dm
index 9b0f211dd01b..7a82743b0af8 100644
--- a/code/modules/mob/living/silicon/silicon_emote.dm
+++ b/code/modules/mob/living/silicon/silicon_emote.dm
@@ -18,8 +18,8 @@
/datum/emote/living/silicon/scream
key = "scream"
key_third_person = "screams"
- message = "screams!"
- message_param = "screams at %t!"
+ message = "кричит!"
+ message_param = "кричит на %t!"
emote_type = EMOTE_AUDIBLE
vary = TRUE
sound = "sound/goonstation/voice/robot_scream.ogg"
@@ -28,60 +28,60 @@
/datum/emote/living/silicon/ping
key = "ping"
key_third_person = "pings"
- message = "pings."
- message_param = "pings at %t."
+ message = "звенит."
+ message_param = "звенит на %t."
emote_type = EMOTE_AUDIBLE
sound = "sound/machines/ping.ogg"
/datum/emote/living/silicon/buzz
key = "buzz"
key_third_person = "buzzes"
- message = "buzzes."
- message_param = "buzzes at %t."
+ message = "жужжит."
+ message_param = "жужжит на %t."
emote_type = EMOTE_AUDIBLE
sound = "sound/machines/buzz-sigh.ogg"
/datum/emote/living/silicon/buzz2
key = "buzz2"
- message = "emits an irritated buzzing sound."
- message_param = "emits an irritated buzzing sound at %t."
+ message = "издаёт раздражённый жужжащий звук."
+ message_param = "издает раздражённый жужжащий звук на %t."
emote_type = EMOTE_AUDIBLE
sound = "sound/machines/buzz-two.ogg"
/datum/emote/living/silicon/beep
key = "beep"
key_third_person = "beeps"
- message = "beeps."
- message_param = "beeps at %t."
+ message = "бипает."
+ message_param = "бипает на %t."
emote_type = EMOTE_AUDIBLE
sound = "sound/machines/twobeep.ogg"
/datum/emote/living/silicon/boop
key = "boop"
key_third_person = "boops"
- message = "boops."
- message_param = "boops at %t."
+ message = "бупает."
+ message_param = "бупает на %t."
emote_type = EMOTE_AUDIBLE
sound = "sound/machines/boop.ogg"
/datum/emote/living/silicon/yes
key = "yes"
- message = "emits an affirmative blip."
- message_param = "emits an affirmative blip at %t."
+ message = "издаёт положительный сигнал."
+ message_param = "издаёт положительный сигнал на %t."
emote_type = EMOTE_AUDIBLE
sound = "sound/machines/synth_yes.ogg"
/datum/emote/living/silicon/no
key = "no"
- message = "emits a negative blip."
- message_param = "emits a negative blip at %t."
+ message = "издаёт отрицательный сигнал."
+ message_param = "издаёт отрицательный сигнал на %t."
emote_type = EMOTE_AUDIBLE
sound = "sound/machines/synth_no.ogg"
/datum/emote/living/silicon/law
key = "law"
- message = "shows its legal authorization barcode."
- message_param = "shows %t its legal authorization barcode."
+ message = "показывает свой удостоверяющий штрихкод."
+ message_param = "показывает %t свой удостоверяющий штрихкод."
emote_type = EMOTE_AUDIBLE
sound = "sound/voice/biamthelaw.ogg"
@@ -93,8 +93,8 @@
/datum/emote/living/silicon/halt
key = "halt"
- message = "screeches \"HALT! SECURITY!\" from its speakers."
- message_param = "instructs %t to HALT."
+ message = "проигрывает \"НИ С МЕСТА!\" из своих динамиков."
+ message_param = "приказывает %t НЕ ДВИГАТЬСЯ."
emote_type = EMOTE_AUDIBLE
sound = "sound/voice/halt.ogg"
diff --git a/code/modules/mob/living/silicon/silicon_laws.dm b/code/modules/mob/living/silicon/silicon_laws.dm
index ace60763b8fe..fbe928b94a95 100644
--- a/code/modules/mob/living/silicon/silicon_laws.dm
+++ b/code/modules/mob/living/silicon/silicon_laws.dm
@@ -83,12 +83,12 @@
/mob/living/silicon/proc/dostatelaws(method, prefix, datum/ai_laws/laws)
if(stating_laws[prefix])
- to_chat(src, "[method]: Already stating laws using this communication method.")
+ to_chat(src, "[method]: Законы уже объявляются в данный канал.")
return
stating_laws[prefix] = 1
- var/can_state = statelaw("[prefix]Current Active Laws:")
+ var/can_state = statelaw("[prefix]Текущие активные законы:")
for(var/datum/ai_law/law in laws.laws_to_state())
can_state = statelaw("[prefix][law.get_index()]. [law.law]")
@@ -96,7 +96,7 @@
break
if(!can_state)
- to_chat(src, "[method]: Unable to state laws. Communication method unavailable.")
+ to_chat(src, "[method]: Невозможно объявить законы. Способ к коммуникации недоступен.")
stating_laws[prefix] = 0
/mob/living/silicon/proc/statelaw(law)
diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm
index d4d5dca09d37..54db949a3093 100644
--- a/code/modules/mob/living/silicon/silicon_mob.dm
+++ b/code/modules/mob/living/silicon/silicon_mob.dm
@@ -155,19 +155,19 @@
var/list/msg = list("--- ")
if(alarm_types_show["Burglar"])
- msg += "BURGLAR: [alarm_types_show["Burglar"]] alarms detected. - "
+ msg += "ПРОНИКНОВЕНИЕ: Обнаржуено [alarm_types_show["Burglar"]] тревог. - "
if(alarm_types_show["Motion"])
- msg += "MOTION: [alarm_types_show["Motion"]] alarms detected. - "
+ msg += "ДВИЖЕНИЕ: Обнаружено [alarm_types_show["Motion"]] тревог. - "
if(alarm_types_show["Fire"])
- msg += "FIRE: [alarm_types_show["Fire"]] alarms detected. - "
+ msg += "ПОЖАР: Обнаружено [alarm_types_show["Fire"]] тревог. - "
if(alarm_types_show["Atmosphere"])
- msg += "ATMOSPHERE: [alarm_types_show["Atmosphere"]] alarms detected. - "
+ msg += "АТМОСФЕРА: Обнаружено [alarm_types_show["Atmosphere"]] тревог. - "
if(alarm_types_show["Power"])
- msg += "POWER: [alarm_types_show["Power"]] alarms detected. - "
+ msg += "ПИТАНИЕ: Обнаружено [alarm_types_show["Power"]] тревог. - "
msg += "\[Show Alerts\]"
var/msg_text = msg.Join("")
@@ -181,16 +181,16 @@
var/list/msg = list("--- ")
if(alarm_types_clear["Motion"])
- msg += "MOTION: [alarm_types_clear["Motion"]] alarms cleared. - "
+ msg += "ДВИЖЕНИЕ: Нейтрализовано [alarm_types_clear["Motion"]] тревог. - "
if(alarm_types_clear["Fire"])
- msg += "FIRE: [alarm_types_clear["Fire"]] alarms cleared. - "
+ msg += "ПОЖАР: Нейтрализовано [alarm_types_clear["Fire"]] тревог. - "
if(alarm_types_clear["Atmosphere"])
- msg += "ATMOSPHERE: [alarm_types_clear["Atmosphere"]] alarms cleared. - "
+ msg += "АТМОСФЕРА: Нейтрализовано [alarm_types_clear["Atmosphere"]] тревог. - "
if(alarm_types_clear["Power"])
- msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - "
+ msg += "ПИТАНИЕ: Нейтрализовано [alarm_types_clear["Power"]] тревог. - "
msg += "\[Show Alerts\]"
@@ -234,7 +234,7 @@
take_organ_damage(10)
flash_eyes(affect_silicon = 1)
to_chat(src, "*BZZZT*")
- to_chat(src, "Warning: Electromagnetic pulse detected.")
+ to_chat(src, "Внимание: Обнаружен электромагнитный импульс.")
/mob/living/silicon/proc/damage_mob(brute = 0, fire = 0, tox = 0)
@@ -255,16 +255,16 @@
return
. = TRUE
if(!getBruteLoss())
- to_chat(user, "Nothing to fix!")
+ to_chat(user, "Нечего чинить!")
return
else if(!getBruteLoss(TRUE))
- to_chat(user, "The damaged components are beyond saving!")
+ to_chat(user, "Повреждённые компоненты не починить!")
return
if(!I.use_tool(src, user, volume = I.tool_volume))
return
adjustBruteLoss(-30)
add_fingerprint(user)
- user.visible_message("[user] patches some dents on [src] with [I].")
+ user.visible_message("[user] латает некоторые вмятины на [src] с помощью [I].")
/mob/living/silicon/bullet_act(obj/item/projectile/Proj)
@@ -317,7 +317,7 @@
// this function shows the health of the pAI in the Status panel
/mob/living/silicon/proc/show_system_integrity()
- return list("System integrity:", stat ? "Nonfunctional" : "[round((health / maxHealth) * 100)]%")
+ return list("Целостность систем:", stat ? "Системы не функциональны" : "[round((health / maxHealth) * 100)]%")
// This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms
@@ -413,31 +413,31 @@
janisensor.add_hud_to(src)
/mob/living/silicon/proc/toggle_sensor_mode()
- to_chat(src, "Please select sensor type.")
- var/static/list/sensor_choices = list("Security" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "securityhud"),
- "Medical" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "healthhud"),
- "Diagnostic" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "diagnostichud"),
- "Janitor" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "janihud"),
- "None" = image(icon = 'icons/mob/screen_gen.dmi', icon_state = "x"))
+ to_chat(src, "Выберите тип сенсора.")
+ var/static/list/sensor_choices = list("Служба Безопасности" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "securityhud"),
+ "Медицинский" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "healthhud"),
+ "Диагностика" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "diagnostichud"),
+ "Уборщик" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "janihud"),
+ "Нет" = image(icon = 'icons/mob/screen_gen.dmi', icon_state = "x"))
var/sensor_type = show_radial_menu(src, src, sensor_choices)
if(!sensor_type)
return
remove_med_sec_hud()
switch(sensor_type)
- if("Security")
+ if("Служба Безопасности")
add_sec_hud()
- to_chat(src, "Security records overlay enabled.")
- if("Medical")
+ to_chat(src, "Включён оверлей Службы Безопасности.")
+ if("Медицинский")
add_med_hud()
- to_chat(src, "Life signs monitor overlay enabled.")
- if("Diagnostic")
+ to_chat(src, "Включен оверлей жизненных показателей.")
+ if("Диагностика")
add_diag_hud()
- to_chat(src, "Robotics diagnostic overlay enabled.")
- if("Janitor")
+ to_chat(src, "Включён диагностический оверлей.")
+ if("Уборщик")
add_jani_hud()
- to_chat(src, "Janitorial filth overlay enabled.")
- if("None")
- to_chat(src, "Sensor augmentations disabled.")
+ to_chat(src, "Включён оверлей грязи для уборки.")
+ if("Нет")
+ to_chat(src, "Аугментация сенсоров отключена.")
/mob/living/silicon/adjustToxLoss(amount)
return STATUS_UPDATE_NONE
diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm
index 97e6bb9377d8..64170504ea81 100644
--- a/code/modules/mob/living/silicon/silicon_say.dm
+++ b/code/modules/mob/living/silicon/silicon_say.dm
@@ -9,7 +9,7 @@
if(message_mode)
used_radios += radio
if(!is_component_functioning("radio"))
- to_chat(src, "Your radio isn't functional at this time.")
+ to_chat(src, "Ваше радио не работает сейчас.")
return 0
if(message_mode == "general")
message_mode = null
@@ -24,7 +24,7 @@
else if(message_mode)
used_radios += aiRadio
if(aiRadio.disabledAi || aiRestorePowerRoutine || stat)
- to_chat(src, "System Error - Transceiver Disabled.")
+ to_chat(src, "Системная ошибка - Передатчик отключен.")
return 0
if(message_mode == "general")
message_mode = null
@@ -81,9 +81,9 @@
create_chat_message(H, message)
for(var/mob/M in hearers(T.loc))//The location is the object, default distance.
M.hear_holopad_talk(message_pieces, verb, src, H)
- to_chat(src, "Holopad transmitted, [real_name] [combine_message(message_pieces, verb, src)]")
+ to_chat(src, "Переданная речь, [real_name] [combine_message(message_pieces, verb, src)]")
else
- to_chat(src, "No holopad connected.")
+ to_chat(src, "Нет подключённого голопада.")
return
return 1
@@ -96,14 +96,14 @@
var/obj/machinery/hologram/holopad/T = current
if(istype(T) && T.masters[src])
var/rendered = "[name] "
- to_chat(src, "Holopad action relayed, [real_name] ")
+ to_chat(src, "Переданное действие, [real_name] ")
for(var/mob/M in viewers(T.loc))
M.show_message(rendered, EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT)
log_emote("(HPAD) [message]", src)
else //This shouldn't occur, but better safe then sorry.
- to_chat(src, "No holopad connected.")
+ to_chat(src, "Нет подключённого голопада.")
return
return 1
diff --git a/code/modules/mob/living/silicon/silicon_subsystems.dm b/code/modules/mob/living/silicon/silicon_subsystems.dm
index 510b79c41d57..0a8b234ab371 100644
--- a/code/modules/mob/living/silicon/silicon_subsystems.dm
+++ b/code/modules/mob/living/silicon/silicon_subsystems.dm
@@ -13,8 +13,8 @@
* Atmos Control *
********************/
/mob/living/silicon/proc/subsystem_atmos_control()
- set category = "Subsystems"
- set name = "Atmospherics Control"
+ set category = "Подсистемы"
+ set name = "Менеджер атмосферы"
atmos_control.ui_interact(usr)
@@ -22,16 +22,16 @@
* Crew Monitor *
********************/
/mob/living/silicon/proc/subsystem_crew_monitor()
- set category = "Subsystems"
- set name = "Crew Monitor"
+ set category = "Подсистемы"
+ set name = "Монитор экипажа"
crew_monitor.ui_interact(usr)
/****************
* Law Manager *
****************/
/mob/living/silicon/proc/subsystem_law_manager()
- set name = "Law Manager"
- set category = "Subsystems"
+ set name = "Менеджер законов"
+ set category = "Подсистемы"
law_manager.ui_interact(usr)
@@ -39,8 +39,8 @@
* Power Monitor *
********************/
/mob/living/silicon/proc/subsystem_power_monitor()
- set category = "Subsystems"
- set name = "Power Monitor"
+ set category = "Подсистемы"
+ set name = "Монитор питания"
power_monitor.ui_interact(usr)
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 2285c0fecc21..28721df2f45f 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -727,7 +727,7 @@ Pass a positive integer as an argument to override a bot's default speed.
if(tries >= BOT_STEP_MAX_RETRIES) // Bot is trapped, so stop trying to patrol.
auto_patrol = FALSE
tries = 0
- speak("Unable to start patrol.")
+ speak("Невозможно начать патрулирование.")
return
@@ -739,7 +739,7 @@ Pass a positive integer as an argument to override a bot's default speed.
if(patrol_target) // has patrol target
INVOKE_ASYNC(src, PROC_REF(target_patrol))
else // No patrol target, so need a new one
- speak("Engaging patrol mode.")
+ speak("Включен режим патрулирования.")
find_patrol_target()
tries++
@@ -793,7 +793,7 @@ Pass a positive integer as an argument to override a bot's default speed.
else
auto_patrol = FALSE
mode = BOT_IDLE
- speak("Disengaging patrol mode.")
+ speak("Отключен режим патрулирования.")
/mob/living/simple_animal/bot/proc/get_next_patrol_target()
// Search the beacon list for the next target in the list.
@@ -868,7 +868,7 @@ Pass a positive integer as an argument to override a bot's default speed.
mode = BOT_SUMMON
calc_summon_path()
- speak("Responding.", radio_channel)
+ speak("Запрос принят. Выполняю.", radio_channel)
return TRUE
@@ -887,7 +887,7 @@ Pass a positive integer as an argument to override a bot's default speed.
check_bot_access()
set_path(get_path_to(src, summon_target, 150, access = access_card.access, exclude=avoid))
if(!length(path)) // Cannot reach target. Give up and announce the issue.
- speak("Summon command failed, destination unreachable.",radio_channel)
+ speak("Команда вызова не выполнена, пункт назначения недоступен.",radio_channel)
bot_reset()
/mob/living/simple_animal/bot/proc/summon_step()
@@ -1070,7 +1070,7 @@ Pass a positive integer as an argument to override a bot's default speed.
/mob/living/simple_animal/bot/proc/ejectpairemote(mob/user)
if(allowed(user) && paicard)
- speak("Ejecting personality chip.", radio_channel)
+ speak("Извлечение микросхемы личности.", radio_channel)
ejectpai(user)
/mob/living/simple_animal/bot/Login()
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index e3a63cf9dd92..6a938f7a0f6e 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -381,7 +381,7 @@
target = C
oldtarget_name = C.name
- speak("Level [threatlevel] infraction alert!")
+ speak("Внимание, обнаружена угроза уровня [threatlevel]!")
playsound(loc, pick('sound/voice/ed209_20sec.ogg', 'sound/voice/edplaceholder.ogg'), 50, FALSE)
visible_message("[src] points at [C.name]!")
mode = BOT_HUNT
@@ -568,7 +568,7 @@
addtimer(VARSET_CALLBACK(src, icon_state, "[lasercolor]ed209[on]"), 2)
if(declare_arrests)
var/area/location = get_area(src)
- speak("[no_handcuffs ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel)
+ speak("Внимание, проводится [no_handcuffs ? "задержание" : "арест"] преступного отродья [C] с уровнем угрозы [threat] в [location]!", radio_channel)
/mob/living/simple_animal/bot/ed209/proc/cuff(mob/living/carbon/C)
mode = BOT_ARREST
diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm
index 20b1ec93929f..660fbc2e4355 100644
--- a/code/modules/mob/living/simple_animal/bot/floorbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm
@@ -262,7 +262,7 @@
/mob/living/simple_animal/bot/floorbot/proc/nag() // Annoy everyone on the channel to refill us!
if(!nagged)
- speak("Requesting refill [MAX_AMOUNT - amount] at [get_area(src)]!", radio_channel)
+ speak("Запрос пополнения на [MAX_AMOUNT - amount] в [get_area(src)]!", radio_channel)
nagged = TRUE
/mob/living/simple_animal/bot/floorbot/proc/is_hull_breach(turf/t) // Ignore space tiles not considered part of a structure, also ignores shuttle docking areas.
diff --git a/code/modules/mob/living/simple_animal/bot/griefsky.dm b/code/modules/mob/living/simple_animal/bot/griefsky.dm
index 380840b7e1ce..f02d9251a062 100644
--- a/code/modules/mob/living/simple_animal/bot/griefsky.dm
+++ b/code/modules/mob/living/simple_animal/bot/griefsky.dm
@@ -94,7 +94,7 @@
if(declare_arrests)
var/area/location = get_area(src)
if(!spam_flag)
- speak("Back away! I will deal with this level [threat] swine [C] in [location] myself!.", radio_channel)
+ speak("Назад! Я сам разберусь со свиньей [C] с уровнем угрозы [threat] в [location]!.", radio_channel)
spam_flag = 1
addtimer(CALLBACK(src, PROC_REF(spam_flag_false)), 100) //to avoid spamming comms of sec for each hit
visible_message("[src] flails his swords and cuts [C]!")
@@ -127,7 +127,7 @@
if(!target) // make sure target exists
back_to_idle()
- speak("You fool")
+ speak("Неудачник")
return
if(target.stat == DEAD)
@@ -171,7 +171,7 @@
target = C
oldtarget_name = C.name
- speak("You are a bold one")
+ speak("Смелый дохуя?")
playsound(src,'sound/weapons/saberon.ogg', 50, TRUE, -1)
visible_message("[src] ignites his energy swords!")
icon_state = "griefsky-c"
diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm
index c3476bc8ff6b..99e1fb699dd2 100644
--- a/code/modules/mob/living/simple_animal/bot/honkbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm
@@ -350,7 +350,7 @@
playsound(loc, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, FALSE)
visible_message("[src] points at [C.name]!")
else
- speak("Honk!")
+ speak("Хонк!")
visible_message("[src] starts chasing [C.name]!")
mode = BOT_HUNT
INVOKE_ASYNC(src, PROC_REF(handle_automated_action))
@@ -393,5 +393,5 @@
C.KnockDown(10 SECONDS)
playsound(loc, 'sound/misc/sadtrombone.ogg', 50, TRUE, -1)
if(!client)
- speak("Honk!")
+ speak("Хонк!")
sensor_blink()
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index 91d39972eeb4..03c372280d28 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -273,7 +273,7 @@
/mob/living/simple_animal/bot/medbot/process_scan(mob/living/carbon/human/H)
if(buckled)
if((last_warning + 300) < world.time)
- speak("Movement restrained! Unit on standby!")
+ speak("Движение ограничено! Юнит в режиме ожидания!")
playsound(loc, 'sound/machines/buzz-two.ogg', 50, FALSE)
last_warning = world.time
return
@@ -286,7 +286,7 @@
if(assess_patient(H))
last_found = world.time
if((last_newpatient_speak + 300) < world.time) //Don't spam these messages!
- var/list/messagevoice = list("Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/mcoming.ogg', "Wait [H.name]! I want to help!" = 'sound/voice/mhelp.ogg', "[H.name], you appear to be injured!" = 'sound/voice/minjured.ogg')
+ var/list/messagevoice = list("Эй, [H.name]! Подождите, я сейчас прибуду." = 'sound/voice/mcoming.ogg', "[H.name], стойте! Я хочу помочь!" = 'sound/voice/mhelp.ogg', "[H.name], кажется, Вы ранены!" = 'sound/voice/minjured.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(loc, messagevoice[message], 50, FALSE)
@@ -308,7 +308,7 @@
if(!patient)
if(!shut_up && prob(1))
- var/list/messagevoice = list("Radar, put a mask on!" = 'sound/voice/mradar.ogg', "There's always a catch, and I'm the best there is." = 'sound/voice/mcatch.ogg', "I knew it, I should've been a plastic surgeon." = 'sound/voice/msurgeon.ogg', "What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/mflies.ogg', "Delicious!" = 'sound/voice/mdelicious.ogg')
+ var/list/messagevoice = list("Радар, надень маску!" = 'sound/voice/mradar.ogg', "Всегда есть подвох, но со мной тебе нечего бояться!" = 'sound/voice/mcatch.ogg', "Я так и знал! Нужно было учиться на пластического хирурга." = 'sound/voice/msurgeon.ogg', "Что это за медицинский отдел такой? Все мрут как мухи!" = 'sound/voice/mflies.ogg', "Великолепно!" = 'sound/voice/mdelicious.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(loc, messagevoice[message], 50, FALSE)
@@ -453,7 +453,7 @@
return
if(C.stat == DEAD || HAS_TRAIT(C, TRAIT_FAKEDEATH))
- var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/mno.ogg', "Live, damnit! LIVE!" = 'sound/voice/mlive.ogg', "I...I've never lost a patient before. Not today, I mean." = 'sound/voice/mlost.ogg')
+ var/list/messagevoice = list("Нет! Не бросай меня!" = 'sound/voice/mno.ogg', "Живи, черт возьми, ЖИВИ!" = 'sound/voice/mlive.ogg', "Я... я никогда раньше не терял пациентов. Сегодня, то есть." = 'sound/voice/mlost.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(loc, messagevoice[message], 50, FALSE)
@@ -471,7 +471,7 @@
reagent_id = select_medication(C, beaker_injection)
if(!reagent_id) //If they don't need any of that they're probably cured!
- var/list/messagevoice = list("All patched up!" = 'sound/voice/mpatchedup.ogg', "An apple a day keeps me away." = 'sound/voice/mapple.ogg', "Feel better soon!" = 'sound/voice/mfeelbetter.ogg')
+ var/list/messagevoice = list("Как новенький!" = 'sound/voice/mpatchedup.ogg', "Яблочко на ужин, и врач не нужен!" = 'sound/voice/mapple.ogg', "Поправляйтесь!" = 'sound/voice/mfeelbetter.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(loc, messagevoice[message], 50, FALSE)
@@ -563,7 +563,7 @@
if(syndicate_aligned)
return
var/area/location = get_area(src)
- speak("Medical emergency! [crit_patient ? "[crit_patient]" : "A patient"] is in critical condition at [location]!", radio_channel)
+ speak("Внимание, требуется медицинская помощь! [crit_patient ? "[crit_patient]" : "Пострадавший"] в критическом состоянии в [location]!", radio_channel)
declare_cooldown = TRUE
spawn(200) //Twenty seconds
declare_cooldown = FALSE
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 48ef878ac713..fb447e76aee4 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -660,7 +660,7 @@
if(load) // if loaded, unload at target
if(report_delivery)
- speak("Destination [destination] reached. Unloading [load].", radio_channel)
+ speak("Пункт назначения [destination] достигнут. Разгрузка [load].", radio_channel)
if(istype(load, /obj/structure/closet/crate))
var/obj/structure/closet/crate/C = load
C.notifyRecipient(destination)
@@ -679,7 +679,7 @@
if(AM && AM.Adjacent(src))
load(AM)
if(report_delivery)
- speak("Now loading [load] at [get_area(src)].", radio_channel)
+ speak("Начата загрузка [load] в [get_area(src)].", radio_channel)
// whatever happened, check to see if we return home
if(auto_return && home_destination && destination != home_destination)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 87b2aed467e7..578b44f26d52 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -275,7 +275,7 @@
addtimer(VARSET_CALLBACK(src, icon_state, "[base_icon][on]"), 2)
if(declare_arrests)
var/area/location = get_area(src)
- speak("[no_handcuffs ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel)
+ speak("Внимание, проводится [no_handcuffs ? "задержание" : "арест"] преступного отродья [C] с уровнем угрозы [threat] в [location]!", radio_channel)
/mob/living/simple_animal/bot/secbot/Life(seconds, times_fired)
. = ..()
@@ -426,7 +426,7 @@
target = C
oldtarget_name = C.name
- speak("Level [threatlevel] infraction alert!")
+ speak("Внимание, обнаружена угроза уровня [threatlevel]!")
playsound(loc, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, FALSE)
visible_message("[src] points at [C.name]!")
mode = BOT_HUNT
diff --git a/code/modules/mob/living/simple_animal/friendly/friendly_emote.dm b/code/modules/mob/living/simple_animal/friendly/friendly_emote.dm
index c8df5f54d75d..cec4efb55e0b 100644
--- a/code/modules/mob/living/simple_animal/friendly/friendly_emote.dm
+++ b/code/modules/mob/living/simple_animal/friendly/friendly_emote.dm
@@ -4,7 +4,7 @@
/datum/emote/living/simple_animal/diona_chirp
key = "chirp"
key_third_person = "chirps"
- message = "chirps!"
+ message = "стрекочет!"
sound = "sound/creatures/nymphchirp.ogg"
emote_type = EMOTE_AUDIBLE
mob_type_allowed_typecache = list(/mob/living/simple_animal/diona)
@@ -17,8 +17,8 @@
/datum/emote/living/simple_animal/pet/dog/bark
key = "bark"
key_third_person = "barks"
- message = "barks."
- message_param = "barks at %t."
+ message = "лает."
+ message_param = "лает на %t."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/simple_animal/pet/dog/bark/get_sound(mob/living/user)
@@ -31,8 +31,8 @@
/datum/emote/living/simple_animal/pet/dog/yelp
key = "yelp"
key_third_person = "yelps"
- message = "yelps!"
- message_param = "yelps at %t!"
+ message = "визжит!"
+ message_param = "визжит на %t!"
emote_type = EMOTE_AUDIBLE
/datum/emote/living/simple_animal/pet/dog/yelp/get_sound(mob/living/user)
@@ -42,8 +42,8 @@
/datum/emote/living/simple_animal/pet/dog/growl
key = "growl"
key_third_person = "growls"
- message = "growls!"
- message_param = "growls at %t!"
+ message = "рычит!"
+ message_param = "рычит на %t!"
emote_type = EMOTE_AUDIBLE
sound = "growl"
@@ -55,8 +55,8 @@
/datum/emote/living/simple_animal/mouse/squeak
key = "squeak"
key_third_person = "squeaks"
- message = "squeaks!"
- message_param = "squeaks at %t!"
+ message = "пищит!"
+ message_param = "пищит на %t!"
emote_type = EMOTE_AUDIBLE
/datum/emote/living/simple_animal/mouse/squeak/get_sound(mob/living/user)
@@ -71,8 +71,8 @@
/datum/emote/living/simple_animal/pet/cat/meow
key = "meow"
key_third_person = "meows"
- message = "meows."
- message_param = "meows at %t."
+ message = "мяукает."
+ message_param = "мяукает на %t."
sound = "sound/creatures/cat_meow.ogg"
emote_type = EMOTE_AUDIBLE
@@ -84,13 +84,13 @@
/datum/emote/living/simple_animal/pet/cat/hiss
key = "hiss"
key_third_person = "hisses"
- message = "hisses!"
- message_param = "hisses at %t!"
+ message = "шипит!"
+ message_param = "шипит на %t!"
/datum/emote/living/simple_animal/pet/cat/purr
key = "purr"
key_third_person = "purrs"
- message = "purrs."
+ message = "мурчит."
/datum/emote/living/sit/cat
message = null
diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla_emote.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla_emote.dm
index 41602ab402a7..5c635eeb7ebb 100644
--- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla_emote.dm
+++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla_emote.dm
@@ -4,7 +4,7 @@
/datum/emote/living/simple_animal/gorilla/ooga
key = "ooga"
key_third_person = "oogas"
- message = "oogas."
- message_param = "oogas at %t."
+ message = "угает."
+ message_param = "угает на %t."
emote_type = EMOTE_AUDIBLE
sound = 'sound/creatures/gorilla.ogg'
diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
index 89ed1d5b6b64..dd5f2b1b4d25 100644
--- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm
@@ -95,7 +95,7 @@
health = 150
desc = "GET THE FAT MAN!"
next_stage = /mob/living/simple_animal/hostile/winter/santa/stage_2
- death_message = "HO HO HO! YOU THOUGHT IT WOULD BE THIS EASY?!?"
+ death_message = "ХО ХО ХО! ВЫ ДУМАЛИ, ЧТО ЭТО БУДЕТ ТАК ПРОСТО?!?"
speed = 2
melee_damage_lower = 10
melee_damage_upper = 20
@@ -104,7 +104,7 @@
/mob/living/simple_animal/hostile/winter/santa/stage_2
desc = "GET THE FAT MAN AGAIN!"
next_stage = /mob/living/simple_animal/hostile/winter/santa/stage_3
- death_message = "YOU'VE BEEN VERY NAUGHTY! PREPARE TO DIE!"
+ death_message = "ВЫ БЫЛИ ОЧЕНЬ НЕПОСЛУШНЫ! ПРИГОТОВЬТЕСЬ УМЕРЕТЬ!"
maxHealth = 200 //DID YOU REALLY BELIEVE IT WOULD BE THIS EASY!??!!
health = 200
ranged = TRUE
@@ -116,7 +116,7 @@
/mob/living/simple_animal/hostile/winter/santa/stage_3
desc = "WHY WON'T HE DIE ALREADY!?"
next_stage = /mob/living/simple_animal/hostile/winter/santa/stage_4
- death_message = "FACE MY FINAL FORM AND KNOW DESPAIR!"
+ death_message = "ВСТРЕЧАЙТЕ МОЙ ПОСЛЕДНИЙ ОБЛИК И ПОЗНАЙТЕ ОТЧАЯНИЕ!"
maxHealth = 250
health = 250
ranged = TRUE
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index e35f12438694..c1f8b07ca18f 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -38,10 +38,10 @@
faction = list("neutral", "jungle")
var/list/clean_speak = list(
- "Hi",
- "Hello!",
- "Cracker?",
- "BAWWWWK george mellons griffing me"
+ "Хай",
+ "Привет!",
+ "Крекер?",
+ "БВАААК повар хочет жареного попугая!"
)
speak_emote = list("squawks", "says", "yells")
emote_hear = list("squawks", "bawks")
@@ -675,30 +675,30 @@
* Sub-types
*/
/mob/living/simple_animal/parrot/poly
- name = "Poly"
- desc = "Poly the Parrot. An expert on quantum cracker theory."
+ name = "Поли"
+ desc = "Попугай Поли. Эксперт по квантовой теории крекеров."
clean_speak = list(
- "Poly wanna cracker!",
- "Check the crystal, you chucklefucks!",
- "STOP HOT-WIRING THE ENGINE, FUCKING CHRIST!",
- "Wire the solars, you lazy bums!",
- "WHO TOOK THE DAMN HARDSUITS?",
- "OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE",
- "Why are there so many atmos alerts?",
- "OH GOD WHY WOULD YOU PUT PLASMA IN THE SM?",
- "Remember to lock the emitters!",
- "Stop goofing off and repair the goddam station!",
- "The supermatter is not your friend!",
- "What were the wires again?",
- "Goddam emaggers!",
- "Why is nobody watching the engine?",
- "Maybe the SM would produce more power if we fed it some clowns.",
- "Everyone else dusted when they touched the SM, but I am sure you will be different.",
- "I asked the mime if they turned off the scrubbers, but they didn't say a word.",
- "This engine setup meets all safety requirements.",
- "Chief Engineers are the SM's natural diet.",
- "Don't eat the forbidden nacho!",
- "Is the engine meant to be making that noise?",
+ "Поли хочет крекер!",
+ "Проверьте СМ, долбоёбы!",
+ "ВЫ ДОПУСТИЛИ ПОТЕРЮ ДОРОГОСТОЯЩЕГО ОБМУНДИРОВАНИЯ!",
+ "Подключите соляры, идиоты!",
+ "КТО ВЗЯЛ ЧЁРТОВЫ МОДЫ?",
+ "ОХ БЛЯТЬ, ОН ДЕСТАБИЛИЗИРУЕТСЯ, ВЫЗЫВАЙТЕ ШАТТЛ!",
+ "Почему у нас так много атмосферных тревог?",
+ "ОХ БЛЯТЬ, КТО ПУСТИЛ ПЛАЗМУ В СМ?",
+ "Не забудьте заблокировать эммитеры картой.",
+ "Хватит дурачиться и идите уже чинить грёбаную станцию!",
+ "Суперматерия - не твой друг.",
+ "Куда вы опять дели провода?",
+ "Грёбаные емагеры!",
+ "Почему никто не смотрит за двигателем?",
+ "Возможно СМ будет вырабатывать больше энергии, если мы скормим ему пару клоунов.",
+ "Все кто прикасался к СМу превращались вы пыль, но я уверен что с тобой будет иначе.",
+ "Я спрашивал у мима, выключили ли они скрабберы, но он ничего не сказал.",
+ "Данная сборка СМа, соответствует всем нормам безопасности.",
+ "СЕ - диета суперматерии.",
+ "Не ешь запретный начо!",
+ "Движок так и должен шуметь?",
)
unique_pet = TRUE
gold_core_spawnable = NO_SPAWN
@@ -708,7 +708,7 @@
. = ..()
ears = new /obj/item/radio/headset/headset_eng(src)
- clean_speak += "Danger! Crystal hyperstructure integrity faltering! Integrity: [rand(75, 99)]%" // Has to be here cause of the `rand()`.
+ clean_speak += "Опасность! Нарушение целостности гиперструктуры кристалла! Целостность: [rand(75, 99)]%" // Has to be here cause of the `rand()`.
/mob/living/simple_animal/parrot/poly/npc_safe(mob/user) // Hello yes, I have universal speak and I follow people around and shout out antags
return FALSE
diff --git a/code/modules/mob/living/simple_animal/slime/slime_emote.dm b/code/modules/mob/living/simple_animal/slime/slime_emote.dm
index 5f0282cd750e..65e6f88485c5 100644
--- a/code/modules/mob/living/simple_animal/slime/slime_emote.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime_emote.dm
@@ -21,22 +21,22 @@
/datum/emote/living/simple_animal/slime/bounce
key = "bounce"
key_third_person = "bounces"
- message = "bounces in place."
+ message = "подпрыгивает на месте."
/datum/emote/living/simple_animal/slime/jiggle
key = "jiggle"
key_third_person = "jiggles"
- message = "jiggles!"
+ message = "трясётся!"
/datum/emote/living/simple_animal/slime/light
key = "light"
key_third_person = "lights"
- message = "lights up for a bit, then stops."
+ message = "заливается светом ненадолго и потом гаснет."
/datum/emote/living/simple_animal/slime/vibrate
key = "vibrate"
key_third_person = "vibrates"
- message = "vibrates!"
+ message = "вибрирует!"
/datum/emote/living/simple_animal/slime/noface
// mfw no face
diff --git a/code/modules/mob/mob_emote.dm b/code/modules/mob/mob_emote.dm
index 28ad98a0d3b6..e2da4a826b18 100644
--- a/code/modules/mob/mob_emote.dm
+++ b/code/modules/mob/mob_emote.dm
@@ -22,7 +22,7 @@
if(!length(key_emotes))
if(intentional && !force_silence)
- to_chat(src, "'[emote_key]' emote does not exist. Say *help for a list.")
+ to_chat(src, "Эмоции '[emote_key]' не существует. Введите *help для их списка.")
else if(!intentional)
CRASH("Emote with key [emote_key] was attempted to be called, though doesn't exist!")
return FALSE
@@ -38,7 +38,7 @@
if(P.try_run_emote(src, param, type_override, intentional))
return TRUE
if(intentional && !silenced && !force_silence)
- to_chat(src, "Unusable emote '[emote_key]'. Say *help for a list.")
+ to_chat(src, "Эмоция '[emote_key]' недоступна. Введите *help для их списка.")
return FALSE
/**
@@ -53,7 +53,7 @@
if(!message && !client)
CRASH("An empty custom emote was called from a client-less mob.")
else if(!message)
- input = tgui_input_text(src, "Choose an emote to display.", "Custom Emote")
+ input = tgui_input_text(src, "Выберите эмоцию для отображения.", "Custom Emote")
else
input = message
@@ -86,7 +86,7 @@
var/list/base_keys = list()
var/list/all_keys = list()
var/list/species_emotes = list()
- var/list/message = list("Available emotes, you can use them with say \"*emote\": ")
+ var/list/message = list("Доступные эмоции, можете их использовать с помощью \"*emote\": ")
var/mob/living/carbon/human/H = user
for(var/key in GLOB.emote_list)
@@ -110,7 +110,7 @@
message = message.Join("")
if(length(species_emotes) > 0)
species_emotes = sortList(species_emotes)
- message += "\n[user?.dna?.species.name] specific emotes :- "
+ message += "\n[user?.dna?.species.name] специальные эмоции :- "
message += species_emotes.Join(", ")
message += "."
to_chat(user, message)
@@ -118,7 +118,7 @@
/datum/emote/flip
key = "flip"
key_third_person = "flips"
- message = "does a flip!"
+ message = "делает кувырок!"
hands_use_check = TRUE
emote_type = EMOTE_VISIBLE | EMOTE_FORCE_NO_RUNECHAT // don't need an emote to see that
mob_type_allowed_typecache = list(/mob/living, /mob/dead/observer) // okay but what if we allowed ghosts to flip as well
@@ -135,17 +135,17 @@
if(IS_HORIZONTAL(L))
var/turf = get_turf(L)
- message = "flops and flails around [isspaceturf(turf) ? "in space" : "on the floor"]."
+ message = "Шлепается и метается [isspaceturf(turf) ? "в космосе" : "по полу"]."
return ..()
else if(params)
- message_param = "flips in %t's general direction."
+ message_param = "делает кувырок в направлении к %t."
else if(ishuman(user))
var/mob/living/carbon/human/H = user
if(istype(H.get_active_hand(), /obj/item/grab))
var/obj/item/grab/G = H.get_active_hand()
if(G && G.affecting)
if(H.buckled || G.affecting.buckled)
- to_chat(user, "[G.affecting] is buckled, you can't flip around [G.affecting.p_them()]!")
+ to_chat(user, "[G.affecting] пристёгнут(а), кувырок сделать не получится!")
return TRUE
var/turf/oldloc = user.loc
var/turf/newloc = G.affecting.loc
@@ -155,7 +155,7 @@
user.pass_flags |= (PASSTABLE)
step(user, get_dir(oldloc, newloc))
user.pass_flags = old_pass
- message = "flips over [G.affecting]!"
+ message = "делает кувырок через [G.affecting]!"
return ..()
user.SpinAnimation(5, 1)
@@ -168,7 +168,7 @@
if(prob(5) && ishuman(user))
var/turf = get_turf(L)
- message = "attempts a flip and [isspaceturf(turf) ? "loses balance" : "crashes to the floor"]!"
+ message = "пытается сделать кувырок и [isspaceturf(turf) ? "теряет баланс" : "шлёпается на пол"]!"
if(istype(L))
addtimer(CALLBACK(L, TYPE_PROC_REF(/mob/living, Weaken), 4 SECONDS), 0.3 SECONDS)
return ..()
@@ -195,7 +195,7 @@
return TRUE
user.spin(32, 1)
- to_chat(user, "You spin too much!")
+ to_chat(user, "Вы слишком долго вращаетесь!")
var/mob/living/L = user
if(istype(L))
L.Dizzy(24 SECONDS)
diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm
index dfcd46f47bcf..28405537be5c 100644
--- a/code/modules/mob/mob_misc_procs.dm
+++ b/code/modules/mob/mob_misc_procs.dm
@@ -697,11 +697,11 @@
for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name.
if(force)
- newname = tgui_input_text(src, "Pick a new name.", "Name Change", oldname)
+ newname = tgui_input_text(src, "Выберите новое имя.", "Смена имени", oldname)
else
- newname = tgui_input_text(src, "You are a [role]. Would you like to change your name to something else? (You have 3 minutes to select a new name.)", "Name Change", oldname, timeout = 3 MINUTES)
+ newname = tgui_input_text(src, "Вы - [role]. Хотели бы вы сменить своё имя? (У вас есть 3 минуты на выбор имени.)", "Смена имени", oldname, timeout = 3 MINUTES)
if(((world.time - time_passed) > 1800) && !force)
- tgui_alert(src, "Unfortunately, more than 3 minutes have passed for selecting your name. If you are a robot, use the Namepick verb; otherwise, adminhelp.", "Name Change")
+ tgui_alert(src, "К сожалению, прошло более трёх минут для выбора имени. Если вы робот, используйте верб Namepick; в иных случаях, adminhelp.", "Смена имени")
return //took too long
newname = reject_bad_name(newname,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters.
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 72baa4ddfd1e..ebc2cb46b77e 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -35,10 +35,10 @@
// Dont blank out the other window. This one is read only.
if(!GLOB.configuration.system.external_tos_handler)
src << browse(null, "window=playersetup")
- output += "
[real_name]
[real_name]
You are [client.skip_antag ? "ineligible" : "eligible"] for all antag roles.
Вы [client.skip_antag ? "не готовы" : "готовы"] для всех антаг ролей.
Observe (Please wait...)
" + output += "Наблюдать (Ожидайте...)
" else - output += "" + output += "" if(GLOB.join_tos) - output += "" + output += "" if(length(GLOB.configuration.system.region_map)) output += "" output += "" - var/datum/browser/popup = new(src, "playersetup", "" for(var/jobcat in categorizedJobs) if(categorizedJobs[jobcat]["colBreak"]) @@ -544,11 +544,11 @@ dat += " |
[random_dictator]
at random.") // shame them
+ to_chat(world, "Ничья между [english_list(winning_options)]. Случайный выбор: [random_dictator]
.") // shame them
return random_dictator
// If we got here there must only be one thing in the list
var/res = winning_options[1]
if(res in choices)
- to_chat(world, "[res]
won the vote.")
+ to_chat(world, "[res]
выигрывает голосование.")
return res
- to_chat(world, "The winner of the vote ([sanitize(res)]) isnt a valid choice? What the heck?")
- stack_trace("Vote of type [type] concluded with an invalid answer. Answer was [sanitize(res)], choices were [json_encode(choices)]")
+ to_chat(world, "Победитель голосования ([sanitize(res)]) не является допустимым выбором? Какого чёрта?")
+ stack_trace("Голосование типа [type] завершилось недопустимым ответом. Ответом был [sanitize(res)], вариантами были: [json_encode(choices)]")
return null
@@ -118,8 +118,8 @@
/datum/vote/proc/announce(start_text)
to_chat(world, chat_box_purple(
"[start_text]\
- Click here or type Vote
to place your vote.\
- You have [GLOB.configuration.vote.vote_time / 10] seconds to vote."), MESSAGE_TYPE_OOC)
+ Нажмите здесь или введите Vote
, чтобы оставить голос.\
+ У вас [GLOB.configuration.vote.vote_time / 10] секунд на выбор."), MESSAGE_TYPE_OOC)
SEND_SOUND(world, sound('sound/ambience/alarm4.ogg'))
@@ -155,7 +155,7 @@
/datum/vote/ui_interact(mob/user, datum/tgui/ui = null)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
- ui = new(user, src, "VotePanel", "Vote Panel")
+ ui = new(user, src, "VotePanel", "Панель голосования")
ui.open()
/datum/vote/ui_data(mob/user)
@@ -198,4 +198,4 @@
if(params["target"] in choices)
voted[usr.ckey] = params["target"]
else
- message_admins("\[EXPLOIT] User [key_name_admin(usr)] spoofed a vote in the vote panel!")
+ message_admins("\[EXPLOIT] Пользователь [key_name_admin(usr)] подделал голосование в панели!")
diff --git a/code/modules/vote/vote_presets.dm b/code/modules/vote/vote_presets.dm
index 6927fa4fea7c..d28a5596df38 100644
--- a/code/modules/vote/vote_presets.dm
+++ b/code/modules/vote/vote_presets.dm
@@ -1,22 +1,22 @@
// Crew transfer vote
/datum/vote/crew_transfer
- question = "End the shift"
- choices = list("Initiate Crew Transfer", "Continue The Round")
- vote_type_text = "crew transfer"
+ question = "Окончание смены"
+ choices = list("Инициировать эвакуацию", "Продолжить раунд")
+ vote_type_text = "эвакуацию"
/datum/vote/crew_transfer/New()
if(SSticker.current_state < GAME_STATE_PLAYING)
- CRASH("Attempted to call a shuttle vote before the game starts!")
+ CRASH("Попытка вызвать голосование за шаттл до начала!")
..()
/datum/vote/crew_transfer/handle_result(result)
- if(result == "Initiate Crew Transfer")
+ if(result == "Инициировать эвакуацию")
init_shift_change(null, TRUE)
// Map vote
/datum/vote/map
- question = "Map Vote"
- vote_type_text = "map"
+ question = "Голосование за карту"
+ vote_type_text = "карту"
/datum/vote/map/generate_choices()
for(var/x in subtypesof(/datum/map))
@@ -35,7 +35,7 @@
/datum/vote/map/announce()
..()
for(var/mob/M in GLOB.player_list)
- M.throw_alert("Map Vote", /atom/movable/screen/alert/notify_mapvote, timeout_override = GLOB.configuration.vote.vote_time)
+ M.throw_alert("Голосование за карту", /atom/movable/screen/alert/notify_mapvote, timeout_override = GLOB.configuration.vote.vote_time)
/datum/vote/map/handle_result(result)
// Find target map.
@@ -48,5 +48,5 @@
// Set top voted map
if(result == "[initial(M.fluff_name)] ([initial(M.technical_name)])")
top_voted_map = M
- to_chat(world, "Map for next round: [initial(top_voted_map.fluff_name)] ([initial(top_voted_map.technical_name)])")
+ to_chat(world, "Карта следующего раунда: [initial(top_voted_map.fluff_name)] ([initial(top_voted_map.technical_name)])")
SSmapping.next_map = new top_voted_map
diff --git a/code/modules/vote/vote_verb.dm b/code/modules/vote/vote_verb.dm
index 9dbcad136348..2930fa44f1be 100644
--- a/code/modules/vote/vote_verb.dm
+++ b/code/modules/vote/vote_verb.dm
@@ -5,18 +5,18 @@
if(SSvote.active_vote)
SSvote.active_vote.ui_interact(usr)
else
- to_chat(usr, "There is no active vote")
+ to_chat(usr, "Нет активных голосований")
/client/proc/start_vote()
set category = "Admin"
- set name = "Start Vote"
- set desc = "Start a vote on the server"
+ set name = "Начать голосование"
+ set desc = "Начать голосование на сервере"
if(!check_rights(R_ADMIN))
return
if(SSvote.active_vote)
- to_chat(usr, "A vote is already in progress")
+ to_chat(usr, "Голосование уже в процессе")
return
// Ask admins which type of vote they want to start
@@ -28,7 +28,7 @@
for(var/vtype in vote_types)
votemap["[vtype]"] = vtype
- var/choice = tgui_input_list(usr, "Select a vote type", "Vote", vote_types)
+ var/choice = tgui_input_list(usr, "Выбрать тип голосования", "Голосование", vote_types)
if(choice == null)
return
@@ -40,19 +40,19 @@
return
// Its custom, lets ask
- var/question = tgui_input_text(usr, "What is the vote for?", "Create Vote", encode = FALSE)
+ var/question = tgui_input_text(usr, "За что голосуем?", "Create Vote", encode = FALSE)
if(isnull(question))
return
var/list/choices = list()
for(var/i in 1 to 10)
- var/option = tgui_input_text(usr, "Please enter an option or hit cancel to finish", "Create Vote", encode = FALSE)
+ var/option = tgui_input_text(usr, "Впишите опцию или нажмите отмену для завершения", "Create Vote", encode = FALSE)
if(isnull(option) || !usr.client)
break
choices |= option
- var/c2 = tgui_alert(usr, "Show counts while vote is happening?", "Counts", list("Yes", "No"))
- var/c3 = input(usr, "Select a result calculation type", "Vote", VOTE_RESULT_TYPE_MAJORITY) as anything in list(VOTE_RESULT_TYPE_MAJORITY)
+ var/c2 = tgui_alert(usr, "Показать подсчеты во время голосования?", "Голоса", list("Да", "Нет"))
+ var/c3 = input(usr, "Выберите тип расчета результата", "Голосование", VOTE_RESULT_TYPE_MAJORITY) as anything in list(VOTE_RESULT_TYPE_MAJORITY)
var/datum/vote/V = new /datum/vote(usr.ckey, question, choices, TRUE)
V.show_counts = (c2 == "Yes")
diff --git a/modular_ss220/events/code/headcrabs.dm b/modular_ss220/events/code/headcrabs.dm
index 75b409c96c91..f6a71bceb4d8 100644
--- a/modular_ss220/events/code/headcrabs.dm
+++ b/modular_ss220/events/code/headcrabs.dm
@@ -58,7 +58,7 @@
new /obj/structure/spawner/headcrab(T)
/datum/event/headcrabs/announce()
- GLOB.major_announcement.Announce("Биосканеры фиксируют размножение хедкрабов на борту станции. Избавьтесь от них, прежде чем это начнет влиять на продуктивность станции", "ВНИМАНИЕ: НЕОПОЗНАННЫЕ ФОРМЫ ЖИЗНИ.")
+ GLOB.major_announcement.Announce("Биосканеры фиксируют размножение хедкрабов на борту станции. Избавьтесь от них, прежде чем это начнет влиять на продуктивность станции", "ВНИМАНИЕ: Неопознанные формы жизни.")
/datum/event_container/mundane/New()
. = ..()
diff --git a/modular_ss220/events/code/new_space_laws.dm b/modular_ss220/events/code/new_space_laws.dm
index fb92dd071542..66aa0c647c62 100644
--- a/modular_ss220/events/code/new_space_laws.dm
+++ b/modular_ss220/events/code/new_space_laws.dm
@@ -3,7 +3,7 @@
/datum/event/new_space_law/announce()
var/list/new_space_laws = file2list("strings/new_space_laws.txt")
- GLOB.major_announcement.Announce("В связи с последними событиями в космической политике, [pick(new_space_laws)] теперь признается (или признаются) незаконным(-ыми) по кодовому номеру «1xx» Космического Закона. Вы обязаны незамедлительно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий.", "Юридический отдел Нанотрейзен")
+ GLOB.major_announcement.Announce("В связи с последними событиями в космической политике, [pick(new_space_laws)] теперь признается (или признаются) незаконным(-ыми) по кодовому номеру «1xx» Космического Закона. Вы обязаны незамедлительно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий.", "Юридический отдел Нанотрейзен.")
/datum/event_container/mundane/New()
. = ..()
diff --git a/modular_ss220/objects/code/miscellaneous.dm b/modular_ss220/objects/code/miscellaneous.dm
index 8d3d8a5e8ba4..b746e4921b0e 100644
--- a/modular_ss220/objects/code/miscellaneous.dm
+++ b/modular_ss220/objects/code/miscellaneous.dm
@@ -109,12 +109,12 @@
могут быть использованы для строительства новых отсеков.\
I consent\"", + "replace": "output += \"
Я согласен\"" + }, + { + "original": "output += \"
I DO NOT consent\"", + "replace": "output += \"
Я не согласен\"" + }, + { + "original": "var/datum/browser/popup = new(src, \"privacy_consent\", \"
Setup Character
[real_name]
Настройка персонажа
[real_name]
You are ready (Cancel)
\"", + "replace": "else\toutput += \"Вы готовы (Отмена)
\"" + }, + { + "original": "output += \"\"", + "replace": "output += \"\"" + }, + { + "original": "output += \"\"", + "replace": "output += \"\"" + }, + { + "original": "if(!client.skip_antag) output += \"Global Antag Candidacy\"", + "replace": "if(!client.skip_antag) output += \"
Глобальная настройка антагов\""
+ },
+ {
+ "original": "output += \"
You are [client.skip_antag ? \"ineligible\" : \"eligible\"] for all antag roles.
Observe (Please wait...)
\"", + "replace": "output += \"Наблюдать (Ожидайте...)
\"" + }, + { + "original": "output += \"\"", + "replace": "output += \"\"" + }, + { + "original": "output += \"\"", + "replace": "output += \"\"" + }, + { + "original": "var/datum/browser/popup = new(src, \"playersetup\", \"@z-1NwE-U?P=AFeZI6(@zY9)7SRHs~LP{ZsonNsglMEN?QxI{MH=d1?>vapqvE>-nq@PU19PrtBrvZyT zUa{nrPQ7c@9IIx z=yG}-1xD44m0p=-ruX{^DYa6bFDAVomAR~B#Iv_Z|88s1zm8ZhS-;$;SQGG0^uy~D zevPBw5gLK>rTe#e9oc(C^ IvAK3#F 2tjy ztS)=Kv8{=6*A7eg=XVYN45i3G?~C+m+e)Et)$#PpsN)S;$G?MLk>d#7Xvta^I+sEE z#3EPXT rv2cODMsepiu(?Cp&$+*&wSz5) zxyR-YM5-X9+~4hG Ij(&=>(4fXXy{HDB)JVp8T98O!*cX z$8N@q%J#W}=U@^m3VOq9TF_`m2n3b@>T%@s{S9Y3Vm~2eJz(EVxOz?=>PL6jU~Gz- ze^58U`DkM9&IMn#7n70%8?MmBtPFbSPx+7o5Y BP^|3R331$VpXREEMP+kp(>E+4(qk%l^^X^FH>x533t4M{q88!h;`ziWQ2eucG0S z6`I6X5H#p8INv}H%s=W?I(1MUClZ)YMApYZrRByw^Wu9_0G(rJu|o7e+K~xZwFf~p zAMu0k&mW0jfcO;?E3gsuCG-v&(Il==xL`n%m-6vei}Bf$!wuPDSF QY|@ps7q5&6z6GZ}veGrvjDS4NJj|Ht=@rC4I|?zvUl@;HI72 ztqU&KM{U72J6)S}l &o zR91?Xl*yK;ke`y|(?IS9?Y;<5o)YQPP#AfD(xWi)8zode4CHQ~?+oPbnSVNx_NpXG z6vn@f_yy}wm9aZ8YP)~bHh<&+7wbydHQ7u%lU3gbIhIg$LPqWZOvos=yd~f`z ^A{Ws|KvGmGM+lEows@m=Fxlyt< z|K6fm6-QICQC+SaiBEB!C3c$}u0HwO?pcwuFZ3iZj%17=*irEb*#^TF2^hAOf9+z} z+C(L@gM}q4c*w#z;(`5WV)daQD1ldNJTQyon@D%jd_<0n4cI?#Hy!+KI#(^X$Kf}h zr9x|~Tg&!}l=m>-OZj_VN7;ZiH~3HV$YNBDDf%!7Ly#UR<3uSCk2NSRL&?PPD-U*c z=XRj_PrAdu1~yCiKn>@VgL(=U{m?L80E3%i!gVgn*VYBM=+9n;8bU5@^%%WvV=Q&+ zH{imB$g!a{wo_a8g<}D%ep>AC)>y(|Dv*ivPr<5)*o9jGFwDTB$f9Np3<@MeYCyN@ zPwHjHYS{p5^qWqz+9t`KPfuz;fIb=8^3CMC@cwd+B)A>;gONo2gu`Vnhtv(7hg3G! ziz|-y4Z$f^<*h&qv4+e0XDf~lQftZpl9RXwo0l-k{)m}~D3^ie<#LpD3UOr>V{TMq zz}OtX=BnHl&15wJ^qD``wQw?t240(rp{iI0o;~(}hX;&`!3eaUEcc?1lmpS28I&th z%d})X%9>*APQ~#tzp>e`O=>DMHuy(1`A2Q`r|b^oHfk&GkU+XX)^siy0ZR7)R^kp! z(OhI5br|Q)V4_(1MUijeJ92F{_Y_=Y1Y{vpC4bXol+w^>5g|zpMMX=hGb0d%{> z1Gxy(%__i3 zNQiQMI8mT>2y^^s%m1qQ1L)5MR^ShyR)qi2wb&lZ3v;z_IXiyw0GGCc_Y$$49?H|h zUuYE w>m8d^h9aX7DHJ#07LEKuZ*N+sJYcZ<2$J`!C?2pmul4tpNMjRXttQ4tU~Grb-O zN{%M_?*TEKH&()eT;c3w 2*`U;nqpaNicx`$()AWfY5CPn730paGno< %MH#eQoCR1!M9IX263Icu9~#dtgf~@?Kg!7;aP3tA0AksrPa#mXIdnm| ze29Z`43o56rwW(nIB+=>WM!@!G;~K1y{j2U-;yYgQ^_*mztT$CNTP1R2h&eg$-1 z 5Yz*xyd3P(YlnC>nGl1UgqlJAil z_g;6SVs7Afh;x)fYwj=*T)Nfn{0Ke3?HCYtbk?pXj%GRJ$~aeTAuO6H;k@_OkTFj4 zH)68IU%>F?=#ArC49ALav=&@;g!eZX+q1WcXEu}7-c|bPF}|2fT;f3)yE`^KoVQ#; z>w#&xJSWx{`ipp9<|_Azw-BgUJk}8$9>6XWqdvPXUv_HC1ns37j#1pkRhJ)bNx@AV zM!iY{fC)UJeKE!-?x#VaZ7`1P{@bQihozeeYui_1c=yALw)$b&H6^uG+d>(b2O(K} zqUZ*UiaIil>OXptba9mQ!W}+rE5}zB?KoHfzD&x4aNb(>WeDoo!&Wb2O})|QQ`zsL z;+YdWAM}L0QaMBocbAyuKHv@gm@h`7bjXNr@B%V6_{QSC6JJp{Z>9u(N&vnlvQEIz zi(=UNgOkB1q2k0^3E|_a9s% X>y0ZI&A%8_6oB}E<8Kf4 z4PbjV&XTep3Kc9Ih^`IieY~12>xI_1WT`U(W-$gOO5zeeW@q`q@e&-fFuLW;1y>1u zQecgniV7ohiVAVfpFf;uN{FWfj8eBBR|fix{G!;M0mwZG73X;0DKw%&U_kiIJLUW> zE|K_sDaLSrgYhxujo74cUV#ME52#6g1Rz}kJ2zmKDq!DQEn1?0>EgRL*w8P oiO;%e2u z!EZS4xxbTSI4mh+CDr;+5>JPna0gn@uuN*V+G_p6aNg2*=6J`*%(zrd%tq##fcFB7 z%1n&Pdxk02gT7`oub1O^*#Zn(@NEvgOc#XnvL!V3R#AJsI6W)|0hAaEGf-ya@oA3m zxKBXwI##zax#WAaSFXgZlP~PnyIqG_R(bWrwXhDzy+l)w%*R%&2HlvSDfKHX= X2$UU9(>zD;cGf6MPwE540nzGF}i{`Wjt@mi$1d6RwK$!*@a) z_eG!G$q8i;GK#;_J7zjdX39xt*cF&`j&7AvPvCm2_3$b>gn>L3mYCmWTnDsG=U7$Z z>nSMFgc7ywGZ4DLQbJz%16U`ngpiz;60#baee%3wze)X_`@_MNbnjqp!TdPR1tlO{ zH@z0)e>!Pudw#@oPe6CyVwbkpFAo6k M=_ zmefMIC69nBG62I7!+md5$IMA+(h Gu zZ4~dqInh36xA#E19>`{AinBqa_I@BR)eqE(GozamH3Uij%R##=(jN*Df53IRlva9V z2Iv5l3dX$X`#F1p3+@qkD`?L{4CrFF+_cVOVeT-FD<%>t=wGWk;S#$yx&Iaxow)w1 zQNL6*aXJK4-6|rVC1Zg;1%6`c$*>Tob%8{+L_+B|-P0uhpaNU}jmt0UH`_TsqG3MW z(lRo^{!ME9&6rAjus<}slzN7Ntc{a~fW_qY1u1=F1JUIeG3W o)XCFwxj>oQ !2=nZoJ z3vjBq6M7Py^nJ7IWV>3lm;Oc-394xLyOdZDMfPn~(16AP;pkl$7$@kd=o7%x>Y-@> z5zgE9ypkW7P^@0)ubY?~6f%3nr?@f=I4H88F9(D8_SLR5SvfqrqWw}<(N6oDBvF5B z(Vpj(xWDQWRZn!hqQ5Tbf0d#?#>RD^{~pqRv;+qFkGJT5qn=2AUh-?xzea+z=s%b* zr2l+X5$XTMUx}EczaFRm9?`
uvO{sScaJCMF7@4l^I-;?;fb0GQzh_7ay zO!4JaU<%w%U$Kf=@VB1xooL3=Dg}=lMn`Z^ZLRWO)CIBevSt-BkjU;>6D6cFuWWda z03PPBvTNk5=hrcZrExbOt}9bfBN=sIi#@H0FCIe!P?M`Rx(EB-+r?F<5G0p}QUj(a zexxccGKmY2$bdxbcpkhXfQ0*re?ued1osnD3KfFysy1Uc?Y0 ;0PuMJ$heg=GtL90|kX)Bw8M=RzJabiF%QBSp z&uB(u7?>@WyF?<>v$R*ROHzAbm)>nUlmTT(p_76ml{ykB1H<63&UQFrf!|=9NwFKt zsSGkxM}{Wxhh`?&ZMiawt|tQz7->`}^Rs{)6w00!F~r|MHK_=8?kjDz>MS(YV`mQ| zdshvoQCB2J97n58V$^-cKE@#nyLoVYAiIw!fjKQ>?oqsn_3NZi@L^7RkwMHwMO8Q$ zDowF)-eVFF<`-py!4{ UO@f+iOvGRaf1Yt}2 z5+)e#o)WESsoyMjiFs?Jttozir)7f0U==QsU=obEaXAvw`LH(?B+K3u&r3*)bHoS* ziTu?Lt1EM^s+Th7^tGpes>+q(r2b4e6|KB|00x^2e2C~5!s(`;C0Gp-b~_n%Rr zWyXP(Gch00IO8B6Memw2&OW~-5jxGi8fm1hlz<`nrHX;N$b}f;U@J`Iv=g_9IcyQa zu-!Pm@g^36T_x{pt7p NZ77F>gtO5?7@<7ovgW(lSnwMeHeLx>1L>4YHM_e?!D -CGZJW#8S4sjs7r z069WyXF8=Sv|CPeKatAM^K2AmG)3RX4pJ{=7P(J_;wSDuhO8~Zw#ip~8Gh}BX1yE6 zC45(q)7U!(kGzLx(&-Y0|GtSZX()n|ktX3GLu4{Ez7|kZTrG1*>u5e?H5~w1(C@jS zQ`-MZTt~)b>BhLs4hU6s3+FxfB>4oQXS~ws2k7Q_z@`mKrg`u0lEw6hG(J&ryYcCv z@p-i@j;mDyXsI$jlT1&a=m!Yxrl(ij{I{+qW>sDpo~VWE6EHld;Sd-*sY@GAE }r|fOZ`{D&xo4=!54BE~y z?Tjh1l4@7yA0p1LR-Nq_(Q;XvR*`o%g4mCnx2k)pBY3LhkGy7vdmySCMyX`}m@98D z-rz^A$oq(*H|V54758@5IP(D^X-kN*A8GHQ4aIE3bZUa&%9oWp$avLTfi_qJkA^(P zVQDN|jN8_U{`B~u1IkJFB0XY3h}aM|WY=LVU;f0|j&`4~i(g-u0MGgh1(EbINSXi+ zUW}FE@Ve<(0Cp_JZ6fQ68Cry|#H=f2Xdwhdv)D(Ru}_2UIfr-;3lvG$Jz%eydk2=& zBiyn|bRZ^lX)$5$qc^sk6K@5|2B3Y_5JuUX-5j-W5S!_L0-07|3nd8=#(v-SP9hz^ z)>xU69E1A>Yfr*5IREol7fh3&L?`Rtgq}lzkQEyuKEVY79h$^cGzKfUI6#mBByGEJ zv`>4u(O1 CY?e~)&XV{txcVG7p21k}L0@6_}7)WTu3R5xE7gv}AWgXHi>ShLf$ zzyVzFn1VaFKYP!M`=irv-=i-D7p`~X$3OhTTPK@oxa? DXOfBwGtcpr?D68-|Qc4QTs=E zOET<>S~kFVPI0GcJ?(vo;0Nx eyx+*?*6-_9X#A5O5D5(5jf=V6 zxR^V`-?qhn_@A&Dz#qjne-s)qe2Xi4Gw0{cG}`2@54HCZHvu+hVCzSJp3sMUtRbJ? za}kanDFXXYKXzU=WfYp;UbX(pA7u0jImFB>@sX2#+H#u0(Ka@uu|l#rgV;(6NSFW@ z&Y=XyI2>@i8kM(g2$&;YW(cw6esii9 X&MUldmI zOD?Y_S+XnvFPG_jsNM_xDj#i}mA>>bFe soDN-E1;bH{{Ettjs`8b`M%XL7g3dPx5aZgQ($ff$+RBCVPq zP)EM8TGcNQs*T>p+^nSfCWey1`v@rHCiv{pIa<|NW
ikPx1zk~=%v$=Y9YKKvWBeDA$LW2AE5RY`w2}*!~P!N--uUP zW7b%$dYuH*Cr9y@R<#Q6QLcb@f;y08#%AS)dIRc3!Nr8wjnyq?LQZyW=nf=|4&D@- z0}M|I&FTbUki_evF`;yjuTRd{Aa;mYFl5r0(HE v{b{Cy9*fL zhD H>(sa6=|{!?Kr&bo)?D9RHUxd-6^- zj{nGf2qGLplpEckQ)R(`#r3?>Ou<=B4r2`SwMT*5_hp=lq#$$Z&tt>!_!+E>#*BfD zE&U%Q?d| i`U&imN2vY5qd~9Db5A2P zj*~_nVB6?l+!maIWdQiCz6;$XIibOk5?L+}>!SJ`BeiWg3DYQ}NCJ?kRX1KEi4c5| zaP-DXKKO?bWVAL^l2|E7u3UuxiROd+!rocaIb$dUZGXfn`MmyBcy&bxT@!t=3sq9u zA7!8|=r9*u2HEQNNA8m?ia>+)gNy-upd# J4@<6jIHOdr-O8~F~m#5S~C zoQH5N$p&A~eXH;SgtCu-{_lm=z;Of3jE$li_{75KVkO_@mZ+qe%-{G1N`r@Cbb+gT zNLAg +sYX)Pj;+-nC0- IifujSuY!7V3 zbo2WNxd$}!znCSm*o6%=;LqG+cVCa&-uq i-TYdY<#Pk_@Kxg#PbhJf>gV+jq)(Ts@D(^oI_dijQwXn-nki z;kd5XBUVP#T0}CHQ=z4f{17w1U9G@iBavF)k(~mUo9vY0_!ch|xH+*v_)ZUWG#ty9 z`OtY)-U^Art7>(@T)LOzvxVccMLhUt*7ZwZIN%JBgxWkOcOB=jR^dqsv2V(m@Qn2W zY#){%_e3H0r>Dw7YnX;Yb$DWd0dZB ;IA@vp-#$HFvhl~$32VdBf0+` z+O$kZ&gg?OhfU>t7xeqy>=
2C!=>uJs6Eu@oygDz}o4d!CWI zkB4z%mvwFz8fM E=b`nyKRr0 zNMyJD0=w(F>^8JS_89gAzR0$k173=D?kpFR5_+IXzLT)%j%HPEhD%kE*mHelK3pjg zxdZb4Wz};i!cJ@NEW7*U`py!3e6wTw)+!F;kvR 6||(o+Gzkae>*of$g8EsO%KU zWy}&z+KV9u*mX(y(DDAB{{;Tsg#Y~IBt~cWQkfDj-eWaLRzjZ3sEz&3Zb{cqw#Aj? zQA^Ip5Abp$p%P)=IMMIw%ffVF@DL|O7@t0E^#{25tEU#md2jSWGwvEmgF|M OiTq6%US__QUK;u!; zVyKg^dZncRc2`WdbZ;E6E&tl3)`w4#JYfHImh$Z(w@Lu(Jh#lBKX3j|Wz2Rm X?_=W1zw!sgB gPES%j%@#{$f< zt#TFgfQ^@%c>M%;C81=y7jdlSBuF(B{Iu;nevka{&e$n<1`KRFR!`Ya6!kLjDgyay z)baQNSZ-%vZmKwXr&dkeu~*_`2+sQu2;STCe}mwMnD&VnzUjO{;`5}9*fVj&VwVSu z-BCB@aEK8u6xNIP<-oHzUVTV VBVHBvF5on0`a#s!RHo;JZY`RZx0wprTyM( z{<(hR4Smhq*2wbX115(*#ixwA;Ujtv`nP@-81*TJLI3&BNB0vBf?D`}gc6~nrvjsJ zA^XPu_`c2lLgQP1{g3>T%@ngr)sF8R=YF){GO`^OMBytAV60?;rDQiBke?sC@cca> zpx>o9uN0?~WDb74Mz{JF3LB 1M|X#??%9-Q$MWzq`lf+M@;7l>x~s5!sF zgHBNL)^})d_;xTRu0Q;qPBZJ}S9tM<-;l&4tALnfCc4*-;-c+d^Dpj5LjU2WdeclNd)Ii0`n8jTDtxF(Iq0m>+Pp@ovsDMRAfU zBEuVrFMnPjKjww=EKR~K=jZ wQ_!tIxggJhOg!>?;xR TQsjZj=K~Z^RX6yW`v=t-K9ZLRI9(k|FSwGWO zJd9G6N7lSu-Xj!%;_UpOud+Y+z2WLV0usKX4pWl;!w6gpP@F}56Ai2aDiQRz{SCWn z#d(`k9noJSyUjlq{OV$YFw@U#Mwb(05#P1fVGM)8#X<{InV9=7pnQqfD07t5RvsDq z)$Z|d@tEl^*=767vaeZXe;O~F#j<~4S>~|YCtF;-m&Svc{#Ue1*5Azchy>vihvnri zaFU3x-v)?Mg4l`-@DElVIeO{Ww`nWFl0KKF|2R8z3E+&_kw_nP{y+jN5`VUUS?lAE z5#nitxD*gAaMf3`dNcj!?^@{K^U82gTP-TJAe5ngG2 =mzOw>$EAw6R3r<*-Uz`j1poG66h#CKS^UD?C2oZ^BdQTA_2+0*vV~-k zYVK_S +8f?^tl*I4F5~Q8voB7zrisK zDMZlVhtIq2A)9`C&U@p2Nx!GwPo$sx)`aQ|UEB)jWGifMD8MM1L3DQ@E_#`SF2Pmz zRha%9m`V&&@Q(I%lLW{SBavS=I!6p9cE4u%HeghF >&T`bTeD^;aUzVyEfi84JR6_TOW~|1_3gD$D=j z({Jmw6;FY*5`N_o{rA0Jln8CDw}8=040LJ=yr*LQ3Ba_~2#NzBv3Luw(F>VD*{799 zB*1EE6`Sel8!Z^L2+&94aZxAwECa#b2nD?TMK3^*z1N?;hY;ivLYu{v*gq)d5 u#b!|YAbHxMoDwP@QX7XwQXK` z5lpSj<3N`W6m#S~CxigG>Jit2fzX=U@WtWv=y&KJh#*G{l=RyJf+IPw6^)h2=aAu^ z0t`u?=oPHYQiF9~LWL_&MEB$>4y( a3WCcaysSOH%)rMcI3ZCv^x1rjqphzrH@K?s+-%9wOqrAfZ{v`OXTkt0&!@o$u zpA?5bA`YM9ANZdehu@3vtK;x5NQ6Jj0{=yQ68ay2#{ffgx6yB41XU9FFF5^}&bQvR z>GNkY e*PWW#CfTGX5&hT|HG8z6r z1wS(mzq oZ~;kR!WkfSP7x`G53H=zUXGRU=t$bETVLPzmwriXTw`Im7YYp(vMM7bPFVt zO(e|An477mDEXgU(Ogy0-SLWMAVN;%S)xc)a+6(&EPn~o#cBYFsyio?`rqCXgmg}V znB|0)RF|Z$ `EwI4h2Z>2|JU@m|LZyq#>)MfBqyvv51;UV$tT7T +?nF@N80ec(`(yi2O?ufpenhbfxE6ZYb(JI0Gf{&?Ae8Wyg^&`9HOwl zDHV64EImuQHjC!;cdX4OaM;$Wk{zP gxWv`Str;6MAkf$*(+eerD)tnUaEKm~%ppkuaIOk%Egbx;gGRBhZL?TE_LQ*nm{0 zr@-vBl?XNti*9V(DB(JB <|^1nZ~`K}SNNpo&Slg_uAM4baW$H71AFGQmj zu0o?$+|0uG2Jwn1q&wQfT-ZL^M`II4ogaFIrZ`-7)JAl3X*2gnwEO?IJis27?(dhs zR6cE)(Yig3&SUztEBJ(Ca222EgG|0W!xwWvL)$=^_99 20*l0vWM90}U# W%hz~@ZrFf|OJ@mGB@FjL_xm=P2 z1G}+3Fb&S!K$goN84C>QiNK;HoTqDWOWFq?4gg#%f(>{Zp|-6^$NJD!6hB#Xx4S9Q zGGZnii+R0KNjUG)a=B`a@6mpHKhVV=z5{FKeSsGqPxoPc0(&VMocozd&%Ot0I<5gT zo$?wj6h{C27yGA$zMI=uvR|B~eyl@|L>lEQQk9oRyjX%%;NnVJe|*wg9G73s 4SADE;*<+E);WYNWsT*FdNlP7Q9iRS>${SVHa*q z(N CGuZ0ppCXKd9EjqR%n5@0WDyA>H#!vShO0J)`;Zz*yJB$wlt4xg^6{Ao z5e8s-7Vi69$U<07*E8gO9@zhmywZJJCo{dOMjeLyN&Nqxm?Y0H9l})rd?S4zvR0~5 z3z5+z;RL<-q=V%-Q2v($`O({!AFzpJwP2W1?p!R>&6g#B#IjWYC^t~VS54oPJ8dC< zI2(bleA=(@J!a*!r=2B*5yqHwfWd(%d!=#{I}0}~%59QZ(mce)u*4)ehl!VG+kM|F zzV^)dOCK{d7u3_lO0hy`9rc)ziR^{2e}$HvjhEY&>1_3xYX#x) #SCG7_%1e0reBK9yGwsSdSrBDpwVo6 zhtIxWiZ{2hBQ};F`7&jWHf{B3yl`i06gvP;!JSVoz2_EfwT6%zA;=Zn^pu93=Nt9c z+rJX_fu0SlTJ*zT>g%uQclV~Vr`$JG&wf+SZl+&7yBRC2S&8|N2cVw#@f|U_e}GF< zhrhtrsBphREz6h-+*k~tKm<%Qe^H% -iPrWa<5Kx9d#KO6fKa4AzORtk^@s5S%DK=v2>;UUfJ=72dqE5K7z z2k~unnYoUArmdJwT_XFqo_#Qyh2UE-8RBU2d(oi680Xo+WR5`N@h$d!BnD>qHIr?c z9{xmDc9P}6w`h`guApJTNh_H2pI6XfXA5sLswNX^|G>up8_>cwT`Sn3oAYs`|9H>4 zaj^9@I wlKtUoeuGkqk(hK-AaA?j zx0 fm^+LA236=n$EsuXJgVGOl2VA?8D5My|51=fb)m9Ah(3i`Om|Od2rEm{&OC- z2sdH*okGk5`bHlDII2k~IL@cHHR;@RAFlIoM|%1hze4u47i0AiqCe{nN^zVI4REyy z^p$)5id-?kms5Z)zNv&1GjV+pmdJoi5$3nS%MeB76H^GPa)>R`AeQD=0bU0KQ;FI* zqJ~?MC2H6-Ri5Dp;hXZH1!nKl66w=UDZpPsaDWfp0&_Q-xa9{-UQdnTWOWZH D8T)o0n?7aNT3)8&Cono;R!VC+M@OIU2* zu?jXBH_Q;W_!@7qCnBed* vRwDDVF zCgS%?)}Msmj3oRDC4QjNsI#DgaJ#D5{jjZokb-V7Uxpa@b2N&Y2z${wp4KnE=biJC z{l~9{wQY$kaF4metq oj*o`~ncsfw?=VpZd>Ce?& zA)Mf>!`yfh0hOdbg6+6b5&9!GsZYxaucLB}eNSKF7X!xiJ;%U&ApKK642k-0ao^6R zOZD92+Opp>2W%m9FIZ)=i9RuXspNJ0nlfHz!bA`GI)fKrZv8?x)JFlbuvj>Tce7yO z50eOXk5IW*{(~7f_em s5`8(ihhCpgCpB(3tWm^*VV@}OSPXUlaWI+Z1SlP!g#krqB^4DNQ))FU|D4Pis z*=q^ pXgKe+F56G{;Ky@=0|3C8H1U~BO-2b1DL=qM!Xwa~zK_h}o z8>~yBMkf&TJ1~&|R-&|)d$lyR)FLE+OEow_Gmc|N>uqiAZEb67?XI@qR&N5909plU z5utTM veyx*WbPx=DVHqoaa2}+0S#BrcK;HEFvSX zU023jt y1dm e9} zd;BSsroEPbxR!r3iNQc*HdQY^7Pmd2Px#MkdTzZ=?)iVU7wy75P1g7x825s=d9q@A zo7v&GjJ^HU?l|+Z967vMEwXRXaGDJ#( >%_rnaEH`WLLe4XBZn^n34e2)J!9WV)duUF`N;Ekd=vhtxfM5s5WZr`i@yxLdF< ze?nvg9)ZFf9OwflTswkbA *~5l&oquru2;jZ)3d!Y^8grxnWh13GU@wr5{( HA_9ibiHJ$8JR8Xr2A{urJ?(-bU%=C3#8CB;wK@$Bb#*Vj+R9Ip}o zjfwC^T;q)x!0d=YLEeZ Bp&;vb@iz;a~3D zPxl*m>bUHfHNGVmK$}3ZfQe^p%z%Wn5%cjf&rz}#HlovkZ$W3$BQrZ-u~JB_asMMG z8q;mG_ dV$iIMBMKK*1s*D5x+mHEqie`w){==a zpWU)UK|lp&OywF;ApCE(J#9YyANd`7SEm0t`TcX2m;gXM8D3|*?@k{lq^tkpb9)tHKP4zny1F#^xbOj*D zm@%~BUgbdm1vRnJrSvk9I#Ywa0I6pjWE0$ttpdbHj{(lCP 410WXaRc&ou+V zmtBCI9W_CPe$g}A0CoykI#nQ6WI)_9)<=@zX)rxj;X+ocit;vJDu5|}QI_UTj~hM! zn3j ;8*86 zH{8=PGZ$qCKA%ec2XDMl?5Q6N$FrUe2*xqFV3?j^4#i)73*O`$D{L~o9R<<4(f=;& z9npt}Og;zwOr>`>f1;mIMz>Gp!0c>)lPcLrAISSRdqZY4Eog*rBBbRh8mTU{Z1% z-Wx){1efPBh}L7w^iXiH#8Ty@Z};|Ud>CBtg@|QX%1bsIWh#xE+TSQM&{Y;tJMV|) zL2Fu+e)> 0WGAWC%^YDE6 zmEig1Ecot4Braw}U+VHaJRAI8^3nL6WH4aSI!xfoi1kziO-B@u|9=OS>(0*w$S$GQ zJgBmCVBnkA2Y;3o4zG9(-V7O(A^Mcs?$nN0asqH|q72LS*0&^!OB_Xb@egjbg*M@! zyf1!PlKw-Vh2>WJaHV4z08IZ3F?W9-^Rq>VrYVBq-i4q}y6-iD^v#*CvOn~F@J28G z1JN#!E~GykZmh^oOlKUEU)#L{?)~)gmwS5$2b@yM#yrpFu0y%ahTmf!uj7HxSmcZ`}Pq zHcw-}!l=dz7;rE5o?89Lee_4>`OjAJTw=$a<~_$c7X993pZ|@Nc(d!vJ>Gkccg;Mf zeG~t5Z?kX=>ETV3UQhp@8};pX%N2eW$t8|t>QNN>EIRxBviSW4&Gn^W926K-vFF`= zH}Q~7?N@2c2&rz|9%asOgX!+Q;24LWUuD1&vpZiQEBiJ&jXOt|iQ-=rfk7lmz&%$; zle$BG%{`3o8{gy4{r0Wrw=%v%GUL1E2J`Ja9RpCMZ!hNtQ*I215bJ-sH{R5wftG-w zzoYW$kD9Wt4Hj3Bo*mUOzG}_A(r>AMecP|dGRWT_ivKA7fP!1p{JW)&e|y))%(d~2 z+*HQC+i_|)6s>#aB91Ip+C<>LiumIMXY7&5QJFqIOL- 1b|gxIehBcU^U+d-NoEH cK*HuHM~bHid?0K0-Wl(^@a zoIzbiITFmy?$`Zx(s^sZ(*F&bmOLIcY5h$YsG$HR<%Q9GgW87J 1@k#HrW1z)yQ() zb}!K3XbQOB DVcV9+gdN7~n!<<^s2V9Ha^%lR?SsTea%reQTtF|(P zW(ocdx#84Y@&b}6dIn)&vmhR6|Hhpxo2i5&QAAXU&b)SE_1YVBv;||+w^CB#th=_! z96;$kDqyXDt3jh5d9>OjTFJuvFDF)BrGg`3$N~3GVyAh@IO*>STb>z~C~n@ykd*=9 zzV+42kf)sI)1@l!W+$Z2uY9gy7=r2|unTVcS9N64Eq}2i^@m6Vk@cBUpgj%&LVs z>z3m_K L~Hiu&d*f z?wbS<1{j6(OEUFunI=8~M4|W)g4F-fl{1!nIL(}g3^Oxx9?@6ynjMFR0ROmavVp%U z3;%EP;s5r(_kk#VM;|oynbN#Vv;I`S8?`}89sWc8g7XQ^?l$;Cr)s6}*Tb?%DMjhN zNfbnb$}okJzd&4OL)2~8_{3!;`O6I+g=v&!A7%eiz9iTG(6@h mw*6v&YGHKfn99?YFvh!&FO68?$+pfF&>U{7f=Yf}6Jn$-zt~ F7XNaK&@5Sk~u`S%l10L187=nM4xK{~_W~LipiRdW{SG2EiL1fSR1d z#q3XaR%{Edn4`=1$UD^pcg?*$AV>C_z7GYK3?&7rmFN188o>+nQ}Qji;$GcJ6mNe0 z*noTMcW~TJ{1!K2#UIQ(j;ONrnnw2)Uc2WZIqA}q4G-pn Frd71-h( z)5bhP*PJJ#Y@~t>;fDdfx0eMLDPR@7F*?Hl*oGRsX@}M~T7%=nlM6Lil$@!|QD6}H z3qR$VT =lrxOoSIL*xBwVRH*~T-~-WZbP|b|? FpJ5 = z!fA*~ApSC>jwENBx6WxKf2<=26bhBMGkOj?cdxou+JL3QY!9-M57fB**3fsV8>^Ht zUr6EVXT!m%BnVPK{dux{IVU|c-bvfTY#OKY6|3kJmvrn&!-bHaXKLAMeVlHVo6lE1 zqXBv_CCqF{?k+@^cf-H4m=OF3*tMkCA{c-6(s-_P&{^@_`U$Bn6#b6jZIy7)+YuZ5 zoyUxf!CjBa&}P0;1)<{0%~!U|{umAGNce5j5~qv_*S@=CR9N6sxPe*@kI17#h0h0f zQ>*CW?1LGJ@=>{y8mxb0oPG1vgUSQxY9^i4otgCdM|c>hf2@+fjln5@tba_`k;F+) z7nJM9Yv8x-% i%jXAFtFiC?^y}P^L23Edek(tpxicgGyyx@mb5Fkhf)sa~4|Tcs zyhQ}s NU3m+CHrbwL%k`;!4)*)IzLKX_8|_Nl>?_@uYs7iv?w9^=^eAn!uS~5& zef3pcYhOR3f#=x(YR8cn48hOY@O}a0OqJ{}|4=m3Z3ylbeMHlalbDT8wy|}Au_BSE z<-}-b^{PM?sugXNSu4_=ag|mIdYe9@;bDccx+ z6)pskrAaF$|K?1nQQuVyRSpj~&>X&FcaUjN^8y-7h-CuGHZl9!`kLU4_nFDLvW0^z z);fjt6~R?k&g)$}KX&E3;41Q&>ubWbdl!v#YBy7U8g2r=1+zB&b3UB-Fr^})0kJ>h zCPUwoS3#eonxX$DQ4Lo$R2>#v)g}5j`G3W`e#-Nqdj3 Cw4fHWj zHhi;e_-4+cXgCi2D%i1WFwexG=kTL5qEs*PXWHw2A4Yugyq%7tb!&9hI!A$%Q=I#F zlXRs=Xf=S7_de7{T^8wbjB_895-?uk$Kn0>wHmghiyuM5XB?Z+ol;*!rRl)KuPJTD z2Aa2~z3%Jhs(p;-k+<_JT#ExoZBm^2X0An1EpC!-W&0<4m;2sH+z^~1_3$oUMyt{` zaPDw~NmH<6H|loJay=0|6pY-cfAEeS#L?X$5~$-N_e`N_*`&XfYEIOb3PQcDL!IdL zB>|kcYtzN1g0gyV(n1MoNmPeATdT&4s9VhX+Ak>)yy+&8VAQ_v(OpKp#s1r07L3NZ zNA1iCXU`ggx}o7{*WhsUrM;X#$~}X>A>1qE-rv&)2OrrHSX7dv)DqVpQbdLO X|9gYS9`20hd)Ro7(Ye>jm}gS6>!rZIq(o zG~kmvR;i>IJCyBt(tX!U&Sf^ur}SXgSZ3O3N#F38L{WW6^A42L5bJJ?ZETEf0|Tj_ zfI1+h0{$T6KijO7^B9=l6PhPusJX?7H&uv|ma$e_o%Uq_RBI@UYtHwO
t>RV}sSB-SPflnC2wPymIQi>?uKGPT`LR(fYkxONv?m^e#@6wmO)UE#!7F>u+- z3L>l#YctOTY_(G`rNmuA(6o -TH zNgHHLT-O_WL_90{;eh;#nr~IdaSFvz`Z1nE-8!UB8_z#P;2tI;L#?;h9SlzowAPbn zq#sF%6lKIJtpoeQ9afAuwQp92^rl44QT)n^oPy!H);QU}Ab|l=$YORTa$@?;?Z7A) zjs=*}(&)&@+4>tcfONGE^)6Gt6)+|Z*OzZ7>$A^Rn>ja@o#4rNciCmq-aQfjC9<&^ zC>z$m_{9I_a;=(IVm$5@-i4Tz`)|tIN)+GsN!mF@H>zoe8#nwORYguYga0x1=G {rPgHh$K1?vLNI^I4YUSQHZc z)(LYJs0x){wDU(Ndhn&L!P?DLc>4S{@LdOdEb9eTmC}9qgJQ3)(w}rDKF`4rs?Lgs zi$vt$c~J6JsKvdsSv^Q|UB1RV0_-wMoGvEQj=S~kkKfO*0 b-+KFV@uTy|O+V?! z`yiyxrM0i3nxVWoL~ki*J=^p|63SL~&n;|pj0r1!3j1K`*+xG_A-ooO{iMzQx%Is~ zQ1aotGXG(sIP@w7hZ09TzvXc1S6`Gzgzggtn?9mapFYqmTll|Y;fI^a*kX?1ZAs~S zX8mRrzJty%3SVn84&n!*N8{huzTUPX U8`S2dP@bu0ElW;hXdVx; zG-B4*HSdc{s>i5Gq9%$v qrUUo&iMeE8S~Z^iK9j>GvjRK|fJ~7$ zGCu=>!PgBDujh;f=*MX8DhQ~6v-4 5towR>6!SMz~O05yu6i2I*|{ z?|$Qy<*$&Igj%(_08I)1@R;SVlU=6|B5O*5bDmYJ&+ZO3Z`>XH%sQ`^wY!5Cb@RsX z`=2_TH!oVp^G#eAfAJ5x{>(<+n;-nd#wCR`;C*A>?>5i%?M1YA;%c(q!M_bS+H6Ss zTQ0$IAj+*FZ|gu?6b*k+{%A;8t`U|w*8;lZL+!x6HowF_8NWC4z|u-W`D0KG6NEV_ zs)5PK5>Cj45Yq`B#2>~FAbLv#aSap`vi!_22TK}H9@n2VJ}!S$=Ue6SxA hCEzu@m8H}q%fZ=fi`S>
H}VHoIm2@&bSwy7`F?0oaMdZ^GgqMqGt!%&Sr@r4-!Y5NfgCB>}$fEoFhc|qP3Ws zJpixupBk=ZCjFH?4mq ni0uB*P38)Z1=q{_g^*ja)ns=fPyCat zS^9%)N|ZBJ`2nAI#<3CWl+jM@!m>rzv#XH|@lTyXFou2g+&_|ox;`}C!gs^9TNlr4 zXX`Cz-vUC&Qm6)oaB8Ops%r+h8aLRad&W<^j@q-n}&;A~E{0N1&`mod9a4qZ)=# z<0W+4-+hLuy*ZWceaG}0tLCRNRW^W-wBwf}hViq~7GN$j{wB3NPXM }>j)FS08@KA*!g@$ptXUMOs9Yz<<$4kGAnTiJDNG8;uBK^ z+Oi2c$zz<}NRsH^bDj+EK$=|~J*48grM#4Gn4TynJN)mTQZolRu{mYwNqX+4NxMkn zUYQN%2HDI!{JN+9RWxq^1!Qc0VR2q?Wm9SU2W5*739f1yf?*qL0uDBVJd>W^7(cf< zoGA*?SeTT!3qR_M!$zt^s7%2|RUp{Wkoep?RJX32I_lNNn0b>n8e-4a%V`>@-~7_l zaWB=g^?TCBdLn^Cf~zhxy DIpI)Q d{G_YXWW~WND}J_u9`jzW*meW@9h{2MZGi0j3E*WGKSCd5>YWRsU}uM zb3ZY8Po)Ow>xWi@D(mC>lms*K{R_}O3oWBXC5m5Tlewp#{SDua?34_#IEA+v-6%sW zjv*E;Qnr{;fg|>?uREQ~**&`iWEntm?8?DFmA=JFPW#uczeNxSFobe+jCd0SP87}T zUD~r_VK7g-UNYFrPm|qrjHFk!7Ay8uvDqL0ns@3bGTuDuHtOF)S@rJ*17ghn^N3IO z&ZO0*4#w)(%wg!f#i&kr)^%hP`6?S?-If40?{qf39Z3{jKP_?AO>A^tx>bk2^0;$y zX$OwtZ?Y)F_$H9>igC8feU2N{Kd9COLgGeF)|XilM;)I5lm0+c|MoeW`b}~o&(?6z z7mD}a2(2B)aH4f@e^L#U`wdL6QasjFMs_>IrIuJMrllXLC9kSLrTa~iF4Qio$8yqv zRjY+Z@>)L4BvaZNnmb{Ae%tvQYx!qQj{E>0&s*>C=GWWz6$NilxF6mZigy3q@{RE3 zm%;^5$2pC$?nv-gJ>lhh1MNt)=#9MT>rdP?uE^TPL=aH*iIMuw2ih{~?BwIAYAh z#>ZGb8qX>|Mng%7;jcY%G==b24V#(1q%o1S{>eA+PkvziljqoPd)McEt6c`Pcpu+R z;oI5iqr-{LKqY*!cHNR dt$?y?Jz4#e=x zMcPZXtt7-8pB|DCq6eGZS?^d80LjZDtKHOkrigz+aMhAoD%~3V)zeM^Tk_7DWLXL~ zb|>LQ)zP|doRndYrS9c*tWo1tz$GM2Ktk6oueClHxn10y_2NDot h+qsi8a#|r7tBnjE>k*oX$yny}-~h}CTC?=Eo0-YiPkj1NP`zW5P#--r5bWqN zlVB7Nsdk`s0tHh_D40?t?YsD97d2^|#&FDR>3>Gm(0VkQV7$qpa6|kWxR!9;i;y9T z8eDlLv$rAUos+=oPt53*N;eKEi>Dne;JjJ*iq}QrL>vmI5rSCXO5ul )&5p z(pKnfddnHN79w9eozhA2oEOwbyFQeD+rGDOQK9O|ce^!b6)!G~b`>ifGktn|;RV4* zUN2hAj(Y IM? z)5FUJ>H&VgF*~w8+MT;`)ByZx`@nSLvnfkI`~Fq*GfgRlhJJQ5{l85=wFjo3PP~uy zge$wa2cRJIL_ ?)^qrzkHa|wMDZ@Y8 zHbY6Jiksrm3Q^VGI+~AtQ3~VZ$4agvKzz`qlxg$KW45ovQp7Q))gE{0sbEDBAk&jQ z_ME(h*e>!z_7fDz!s>%*RM>U?5$Qlxno*4<9FdICYj6S(3(yKc1^y%cD6f69Cj5qM zXTeq1%|bRj;}lK@rk;FRc+{k439u6XPAzAc%3)L6RBd8WM&gGORA*JpEk*w;x$d}d z>?s+hzvEdTy!o~8roR#-{&IlW@bAbj{ZsIU@i+k#P}gg$vDrh~_XU>}o723aF9+)l z@2KCr!=K;zQ){;cqwhc>sjJnWv^YFDN>Hrg^9wQmpFAH&Nh9WeWBd>$scla+(+6P5 z|0SpvZ|NvFmlL8!oS&!~(NMEhk>33UOB?hYKSJA?z<)(kW9&Hs{(nM&53am!Ci+A# z=Ed9L*dH1bMMEg5RKkhhK~DT8s+qzbZj60E{h;L3j_qxCq}~8NMN2DXVUybCd0t>5 zD=%rH)oq;jJyg=XA%4jP^-7<}tjij_e( P>i`!;-0i(`jf5Olsbr!`ve(ZB+a34F_mj3(}RM>qILJab43c4XoD-KvA!1> z-d+g>z}tsmlq;3g(?3#Gpq=RwqRujLg?Dx2b_4sUmHnM*XHiqc;)qgV;gSr*I0|B` z%}5Mt#H<)Ffb9${o+U)JIPpt>&RaKsHEz;tt6Jotx&G*kT3qbTK3SZDuQN@1$S?yB z$GS`>w&{Y!b#@NomoR3p>D#@go78kwZqs`wscDN^gG&eJjE)5|=(>6;sx%Q*rUK_> z=V2PM;T63&BP|y7Vv}0XeW(Y0x2H(adbvOn#iwesjA1;VaKw0wW5oZ`|LBsE=#KrJ zmz2b3ft**2Hij@@iHqZzTG^b>w%!D!?tF}Z)Rc1ua5H|QOe4wnIy~Z?MB!^>`Ttt} zy1EdO$jiU-*PqevpAvgB`u%GCLbO7qnmSQ?hQ~_3pQbc2Gt?>PS^bRpHOSF7eYmUi zdv0fWs`!|1vpR|MvwRE>gHd-4>!M?~*wh3v?9$vbtrG;#V`OObzWf!WA@q8=5z^HM zQq911Gh$}m8q 4eF@AJny+wAc)! fS_$~@I)O59$PGyO^?Ek&rI8C{KZj&*>6T@&&v48-$rXhZ=xW!9>#l?|$ zLAp?-T207$Cfow&9*HcFY40YQIwr#{9IcX&!K^42{LA-xwP6ewRJB;H5LkS)?$>B7 zR2-#chO2ZilZ$VYBdX7>#s;Nk;UW~&>q-Kxn7VA1Bq!Hhz-mwjEpUw{pq@Na>#q_X z*BwrrvP;XyX^gF&mMA)i3VkKEw}Qo$DnR+GBfXB)PauuAqKCe=ae_wrL}EcGMOV=m z;~M1_(~UBHM!DD2+I8Pz`VrG}rmQU*Qb5Mp;I<=!s}{jUo}+7&5!qj-IV;|89oc?% zptUSLatfI+BMPJ_5!yFuODNrJR<#KuEW(P!sY?c0&A{%doaiKOFzhqjYp*-8M}7BN zJ%;L&CZ!P p0i6CsBQ@pq&fb#6BX!`e&2OgM zdqHb=>I+PdvM3bRb0@&+kZqHZZSRor4I=HxYWK9c#w+|x{X?3o^sn)3*iYVrg(dqa zTh{&`Gps*L7)%t@V*_^m*IWNljt^3$QF_N}z7BF?_{!KKc2$}Cw9*=6@gHP9I8*tT z`;iaPy3PK(7nu^#S5>&LoTUAXvr9W?PQ$Z;hxXV0D>Exqy6~z>;m5s;*I*1G&rNMy z2{4!mS^(8aR1JL9=djWiFUAjd>x)vWzF-={k%x;f>#N57mhn}O7o74{i#bRioozkT z5J~Y*r{bZWN<(@&!HHWB^`WLs&qKXa*$FZ9F~eK )KT@T;mVez%)U z54|&s;z3VkUaB!Dt8pLYdHXe`W0#z1Xe|DKA)f!rctR6Jr{_k&p|j@@X3$wAc9W&E z)oI9c2{Q6=U57JH)NrDxCb!ITkNIwABzB|sUF=zSvxG>l>trch6`8y+Bxc)g3-WG$ zgL~1}2ZuTrI%Y0nO|bRZCDB(3+dn959p)sampp=q2<$2u;ZEaUaketKl#|AsF+cIG z<;T3fU#gkS7e {lzCLVmBTr4E<~m zSvkYYviRcK<=859DAW{*JDhpHvT1rG-rSrX&61iwi*(Ur8rk! MUND>R> zFdEACibhuR6EqyD4Tai Z9EsChh(m)_>vR5j@=*DQvFv z_S>h&;_PgU?MRpV-{w9g?G`YcX%KirY<;G)#@f|wgV%<_1x8taRtgZS!|0@(^N~I+ zTKCCOhJwi&sNvXpnD2Vo7fSV@9 YQtBib zqmR5aXmN@4XQ$8YBOD#9ZI#V28njWC4TV4*l6@%9v_PwZLfUaX%MNl~D9L;d_e0Z& zsbS8OFZ?QI0BM{$Idt (}z)C8(v{EByui;ugn3ATVU=PCP)O_YaFIiGQ&_E*6J4ig0 zne_)?_MmOwJE(QI+!L*XjggxEv_Bz(7JGL<%=s{yjC$c?& 9C=08QO=x!VJ4)|7a2Li%X{78AwsL{PE8ae7^tPi64qf zNIYEb 1=OFX8mTTxFp^A)S zGvL_gl~MLIp KNVN?8fK&lbKhSWQ^lI2@jq>jf`T^ogJ9X^yF$8v!S<&f!X^`IcrDig )<>}a_d~eY^NtX~8-5Q1~#}O-U zdZoaqaL+JL)OJ)SqvQ*D_AeFW!Yd-EFxspKruLU_wDqOg8${gh&0niM>P!Db|0e9e z!Bq?8e|pC$TwK8lo>I!6=?4D#_q&PTz=*kXu;iwZdfgeRC;1t?LHULz8Lq|rUB+Mk zbRvG-X`ZffW?^7$h~VOq>}Y9BTx3KHFRyHFnvodxymju}Qq^wWHvj}o|7SENh8=<^ zZk8B-(zamFWwedhLv#DJb2sg1X@#`TjC)A?)&;Aam0kP`eV*>r&aP}5VH{h861OUp z_yws$aSuhypAg2@(7iK@e653la&MS=4%j(tB5kdjm!x9{@5?1h=XzR$z)JnHB>>I; zptkRz7KN-Ocbl3~@C;NWo#@)Vxcn;YdRk}dqn@s=Jt$$2A-P)ws&O}^X2^`}?V-nc zvi@3THWut?EJ(??4JIz)Avdeeu5bT)!P3ENi_R`ercn+4UL3q3g8JAHZ;?6s8s= sqTXU) z!$YkQV*!;;fK~{OFP86X5dQBXJcW}*waB&UePtW|-A&P5Y~Qu*_+Jy#h4ib*8uFT( z^epN0hvm3M#R89rzFv?_9}2km6(YeOc7=ks6On1CIzsvAFxDLG8QH|<6X_fXOxUed z4m4D>pZeII`q&d$q%);c6LSVNbe5luYWW-<%t66uFZ?Xr{R&ZVD#xB5zqWj#)gQyc z{0fq}433VR7LSy-n3%K(3I6HcwN1QS Je3b^Ennsj5qfDtYV5+; z p(*Rz<%RF6|hrxSrru*7?ogbsqYwkew-fBlm?&ISv9yJ9`YO-r|AB& zdbtJeJXnmgxG^>%{l#$X? FH2F^|bhB%9qIr9ouO2 z|4CVb{U~5FnD-#{ASqaU>iO{wGg^RYjE{@fmH6;frY{Z0{^7&(x?Amo@^%`Nwy9=X z{5$4D$^rn5JM(`A$+TV&1QCUr&MyEZ`Ze?X0uLln48)S^#9~*(AG15)y5nHEB-&hs zAi)n7aGyIlPlm{Ju5gdmL9!V^Vj1%l{ZtIAUp%bIj=ssnpIGH2_ Kc*Iu716Ma*?|GEx|lQG{x&=(@2Vh_63MHbmQuXx%S| zX{O1z3sumeaw<5O1ASxZ5t1P$!>{$oXx&ZzYv;)wqSvB5sw~^YYp}YK=*xRLReBmY zqfeCd6-n;I{rv|%64sP2IP?4;^Q?Y_Z1i)mWL=o?$=mS+P+0$`b{L46R2t1eLJChH zd^l13Yn6o@$746lYzXm{Mnk~%mvb#Xy)5-TeVk!pPC`7%vN0SH9}|zP1jqfe945;2 z?3dwCUV!6kY(aF*hx3!|`%QWSQIoytqXBc+5yt_8pAbe~;w%DrN;BQt!Tlk|(@9p! z%o29%DVyuh_(ihsJH2Z-KCeg_S&P@iPlmtLlHS$k5|kVoYX7ic$qU%WGm$Oqqb(YO z18_plw;9dBkSFI}(Xg-Q7`0&`)=l3@vh?}okDj03XXfY81I|y`T7Q1-t3JT|{NP_c zKgS< 5^}leIYk*n22k7_F--5yQb# zX!<7l%J-NxcnUEKl+}v=L)i%O^_j*I*=b?~8{LlG5}R3Y;HV}V!wd92aFl|g7{&zJ z=#CdYY>T>MH349dyPDPUwBoFjdU4bw(@SwW0SgXfFRYp}RQM^U7hU2Sth*0Ot~(aT ze{5ey=M8Uq16LBRtnwcu!?nAEH%y1SrHjo=!Bva%BdSKz-@J1^r|3kF;k}f~PM~dS zL-d4jY<(nAJ}D=7`kJXA8A;43z_e*Z{KTGbB*9vq?PpCCwY(IUP{GnM V8snHnF{P>W*FdN3tm7^dDOkMDZ`K=GyYTwtb3 zjWS53uh5yB-emO^O9!|#0o0;0o1lfH=4-j2rgRpe#1ncr>(^w}X&(dB(tyLDw~(bL zPPAKAFWd;1ZD_*#tBcxT-SUhjiog3cpZ30aqNP2!l_p8l_40nj_+gaQzTI~6FHP`m z%=Zbttvx1B;F>k^z~B0=5v{+}_N=eHFK^Se*3bW`{kH$zT(AeU-(Irz+qDW3E`RfG z(P!-Ew$4?;{+nyRiE2?|reMBF{=eTP`|}y@93-Ux^9@Qi{-^Nfm&wn=9~Hd8T4-!$ zYCeD!w<=`xi%8)Vj5p4eCmWS{Ckz#ic40r@wKH9s-iWjmjX+#B$y!_Of3nPeV#BWX zD|^I?EVOECp_$eD9eef)mYOWotbK-#=i6sJW=Erkg5^&LBeKsz*k?rt>A*srRfv5? z{%I>`yeB!_i0pw2Cuj@&6*A0>RrceoRd(0MSY_`|6hE;LiJM@@STIdcEG5G$+zSXR z=gnkjMU4fo`0?8?{6CoZ950XoQFWxT%!U%8I ?f;q2Y gcOJ_MZGh zO;ZzJ9dvHzSx2Hg{xux^2Nus;U^U$R8Ws=vQdkow&XcXvHX9S?#OCZ=Jo<+m`=(j; z%{)HL*f%X0Ium5*Ec8M1U}1 SyQZw 8V%~Tj0Uy6j|Sx&P=m6w z_4T*<&6bf5|5Sc|fBj00qF~wiJFtHBNT)C39z6D6s$VrwTP<4mmk)` M1jed0_hT;F;^{e&LuZUJe{(JgWeBJ*{zrrzuekJDF6giN7<>cvCXW!`4-sz}I zny!!3ub#cf=vR+^6a8xb=mGfMOmos&9>1gh+&`gT1#cW~^P6g9-&e~=UY)mown<$d z&_20(g+GSHNB>LLPtk9+e*Sa+$F85bLkC qf z-j;NY%RWJVPVo#Bj0NJO16e4>Kv7xoG{GCa)Xzf6>|&hXP`fr5J(71*2|DqNl!*fw zDaw~=Ok7aa-%8nZ04t?2_LOg>tTjhfSSzLfD&j?JkEOpGiE;kv`t$-tc{oQi$4Z&{ z``lGT{AmCyrGt%y>t&=&?ko!GnCQe=&u9^`o6szyXx(@BY5LJ{v@LS?5GFcfwr~o! zF T-YaFF8_3HbCVj_u00HhoE$m5UvD2<7RHGEon=!I)(+YZ}t@|VSl=x zNq0=N?k9UR>!slyu!ey#0@A?83<0@8Wz59(2zQ1-p}1 86L8*Ljy$a-0Q< zP{NHW_yT9Ofh31^?8jQcsZ 3e;AA=k5Qa=VK z{ds@?pi2&mv-1BZR)3x+`OnS}{eireIkCs8+F6b`5n4GT@XSCfs#1gY1(-be#q7Vu z(`Dmh$)5w <$lf6Nj zmt5uBaFdU667Ax!Qk6WUYR7U9Kq(RQIz6hLQPMWN;~+p9cCz%Fr3ZT#Q#;nTZA^bQ z5)X^ca@ZK^o68cPKS}7(I$gab+M6xgf12 zxH3Fbt5JKM3}rOY3GeplL h@CGruBnu-$a+q3g=bxE5YanU6CuM3ufjNr<% zCP{DlefkO}$be$_bEI|+W$KuA*c-7U<2K#r&Mz`RvX{s#13d+(kZ};EZ^*q1WAhwM zQ~**CBOg-ouM@>Jz2kG|3)GZ|E?7_|YDIRYJMz!{*1kxgGMO6l@%l~h#;5-U>;EU2 z^?zu;^$#t6 AIDnDrsP z@UsK(g|D;zENeK{V-3p(U=4i${5bxQ4w$7!<%8nD-}@l{V>v{hzC1Q@03KmkWYMI) zEMk57D?W=*{gQ$B!?_m7f%!x1 (8jnOp$+Cl}ywalmESTmW~MvK(wG0BzHX zO$E5>St+Oh>;dHOz2=1jdL~RN04#r_d(A--rUqJ%&D(bJof8~dlv{q}D3csu;saN) zv=n)=d#-PS?M324Im-y?JG*p#QjvM(2e9vCQ~hH+W!Lqq;Z5wMIPo%)1b*IF`&96T z(=Z>j89* D z)~`0YZ81e+fytx^{K<2`HPmcu9gBP %UD**>_XUy8)i?vQ_c*lTh+ z4H<~o ^VQI3-3PCUY)Znh(v-Ly z2@LMK_lpAQuL8I6f93fFPrBb4GajwTt { z3c|5qCil$;K>u$=|5rLdUti;h%;1KY!O^R7D6$)gZL8MTh%%0^@jpE?z$s~S;RfZW z*Vn9Wd%;XoW4uf;_J#8~|6p?)vHSJuvrIsr98xy1;ForH?DLjM1eYkQ!N(;48qLsz z$?Ltg4+==UIcSpP%vw`6(;XWLV>;H1?P8tDJ|gQZUz8UnNw5TK_Nd zRnE@wRem|+t2Fz2WrckWt)A+TS%2lo$*R&~_@lBSTi2w%D4ycGA01XQhK>xxNNlZN zywZ1BlJdk*tjqG3nQzMZCMi zRJw9l$^Nl$gZF=NCa= z|Ly%D--W%H%%TJ47ah<)xx8BvsgH}2*ulrTDE$w!UP>>^NEGj77ik~JuW6pW@cnmz z{F~7`KH5u3{qXnMn2_tH{I1}Iy?jBQO8H*~wf!LLs{H21xGHZkk-@C15~k>98UeSd zbDra>EW=f4J(QP1;LMEYp)55X$}Px8n_u*ztTmXupI`JZ@lR$z6Th0^ZLaul_$PH} zyzigPNie#$kAL#w`>aT>Vf78{pZv8^a0hfz=D_&RxF`)6{aln8|6=^AlE&E8C 2A7L`0rR_Kw|6|!l`XB!(kW+hd{f~3rVT~t>zvUpH zjsNl70rUs=wkP{>0{oBr2i6;W7bIE5)zTVB*wmleCtI%*7i2PIxME9$+Uw^28Emw& zy_DLn>>XrvZIv1y+XVf&q~9ZD^o4KghRmq}-Yf2y4~hcqb)!rZqr4YE0S%iECiS|b zMu`B_dsG$lGrtUoz(;=z2(|%Vg^};=bsM$|pvjU?)E{rHb&U8sSu17HiGm#Pb@T}< zBIE aXX7uH~3W!a78WwRa+QWyG4@RMX$Lti{{CdN *>aq4n1kI$G@{{;LbdF)coJ zHTz#RfVLsiV&7S bC;Rk@3s;G6ml!GUwcnR@3mw}y9+?O*`;ag?$`@k zvfuvhJ34dzL1lLS+v}crUIU< }SAqkM8JlYF}8oib53(byv3K zNTTSBNbTAs3!KCZ*1$eC=dUM(6AEvBqj4MuYEeieG4>3HGr;WrI8HA+2N)^FRQp2f zc;hzC04Mr)x1-y6%N{_Cg-FTsYB_2%E4?2SFuUR}!0gO{dl&tqz*EiKU#|67T g+~&_4Krz %1@C6d|Ys4m-{q@iruhA`2-Ovga0w3xH`=PXCA|88>@2HYnM-C2!rVCZk?Qc zwjkfNpVQIfe8}CjlFN?N-K#wS=D8b>FpqAi;t?O)_UC$!Yux+o *4Y!lTsBMM+F6t2y8Ke&-YY z1fManH2&1b)KAS{l}WD%cRL^!aQev`qrLOx7ipX8NlyIKzkhLjfCDJvROmz$k{~0` z((q$V&E)tUs{^63fU+wFQ6QOkM5WH333hNaL?9WudC{e^R@x5HNq~{su0?ow2=+`~ zxHQcDL9LUbbti2VcSGN#-U1rN8acQ|qX`%@P8BQJ<3UkgUsm?NlO&m?B{H!qKJ7Db z>~&6eN|6|<98oTck27C7kN@HY`#-04S6fxI?!o8OGaH^a`klXP=kG48oC9>P^#}eS zYkyZCXK8J30YQV3{Z9<{&*6U7%zruOHX6~IDug*Le_4lvtNd1X>Y$A8Tk~g5XM&WY z!Xb8B^!0Nh@p1$g+hW$kl-OcTF(0h*=lQe{`M2ayQys?H{0atRcpT+t)}?FO*u1kV zJ&7~?O2bs)4g~^>Pr-(~12QcOM0esa+DG9LiSzE)3!OcyMcr(@dBJR>q4t5lpAW9} zu)cO*Q$82Pp;$rzcdNPZ&YymgiyUd4k00DjPl}3h>K#kCX|F0Cbnh&5Cho^e)3!rp zBdB~qfk3}Q82TnB_~<5f4sXof72>`BXdmXLSR!1nS%n%(w>qWkGB~tnbp}^Fz)%tY z&oaxw4oyKGsRKnmsedvOFCOuQ@d0)Mh2!NLMeCzg=%M@V;mdb=#QuRL_8vp* q728(&v5PSExgtCBTuKys+edQ zI`_?e_ZK<`%IF+ 5JRZF=}w2r|Fx^HJCzzuU5)l=)JW}fi`;PS!&~Wb z$&27RGV!@^{QeRM$KAr*Wzow#|7qJXmcMJVOTEd?%r)oy=C}V6ZTjuI`RyZZ;qQIg z_tAqOs`)YEU;^K`Gv7lG@af+F7y5_lvtG~D2cZ8Qv;h4-BQ7^l^wnbG#kTO*N=syT z$zbi`fKR$rm`#?XQ0;Lyx}Ops6fvn5faWUXOx&W$ZHW}DH9l|f=+B)!6(t;71S#F` z&s{iXeuiuBH*@z3&0USv4S;8YL|dgHrJwxFl2WA }oa*Y52ae&-DLDo- zH5N<|Huy!YuzD^S1%8=3~$BZ(xvO4*#eY3?X5MB^aq{>azqVaCnH}0fjKqgJ7Fv z4#PP!@eL4xBXqc}cJZNIf8pBo!5ek(fZ`Guan}{JUss@_chT;e^q=gfIu?3QaOLR@ z9b1AOJB404uMm1FRm19Vm|ubTBVoONYIS6opOLR-rPvY<2D{UKYOxywdL?2a?;a<^_yH ^+L@tt6uu7D~uU6@p_!8)2c5_|2kw((TG3G4nH0d$XbY|J1}*G%x_OeXrV}?6*I$ zC~MZFv}8zro?O?4XH{tDX?g0i9<^IwjsKxRlGu1GSR(FI3dJOfU-_ZWH6AVJ2H#>- z>G{ufnJ9kuOrBHu8T*bK?qS2s-3RaBZk6u7whMTGbD=vXuYG|BjHN 2O+phiBRjUp|SZ&H3ZUd(ZhC`@$W=xo80N!>K$6Vb~wubHtmT@8`@e_rl@)xzhG@ zun(ktex@Kz6yK{=&o0J*dptL?Y|`3C3OD9c5@nS?2g&^V`>PAuF2sM*Qqnfn5EZ*A z;~}N~4EF*Wt6A)Y`VH%GDoju@RY=-B$C^Aze6g@`;)Y4<33^O=KlOF`&yrH6p(OS! z%XyzPG`^GHf$t>ECvxP2N 46D8@{L8*>Woi`J?o_T==eg$8=vsOd{v zHKVI>N&;Ruw%>`p5Vpl-nyrV*P!eaDEV^I7XIdjVKvV2-PP$|Ibc%h^iFx5pdB`&= z?78Z{VVP#RX7(3YWoW+s%b{)<%^!q }6baCBqNV22zVvRM5pFj1Hr^214k 9z+)G;o zG;mU(+s0NO+e@yhn6e+MZXEYSBZ>dLkz n?+!3g zMrDy#22Tw>xUr$rUWXIQ(Q$FmGg0qMGOVf$PEi4;kaM8RjA5-A0|{Tg-fFaDvpyar zGs>vV^yB`Li!5yli=xjZsD628BcTo*#3_=6I`?M*D>rJ+NrV$jdf(E4yTWiy@doMt z(GNpQUqpMS+U)|5o%$d3Hy7nYoZw!za$uX$1hZ4~p)fng`SVLGsaj{&a!!vkaf7FS zF5wiCD~%CSyM+T}cRK|f6ucW-apPRsirHx-sDVQ~H9A*5g?0L@=JfL{(P{Bhp6)x9 zwa>Jki&kRhdAr5AswHZQP3eK~=ADh>UJNI$CtWpV%e#j+@8Hz$@Sg4A(*2QR#;%Q& zGIwLwN>w|HrkMQ<1W7yp!RVhMDZHBp`6SQ~{MqJCdl^oAOB5jU*PmXf zQ?wRP0+vQY0Sn)vThqs9pQX$B9ov+#^Y(0W#+9$lLT631$=iwo*k@2(jrj$cyPx2f zYWkYn HqMajEaXWn?M%4&_ae3v3lTCYiRJrB2Y zSQvfj9C4%Wmq;pjGCZ-{i033PMdIg`h^spB!*!0)dEwX}4M~B8rQ;h{yc+CytVnNt zrBXF9blOsQ&)*v3p9l75VY8hC@*?!tuBKueC+XfDpgbJi8(MNGweC?Pv0ROONc~Yj zbBisujC>NYY1r*EZUg$Q=r<+RI}*FYYmB^Cv(mp)bvKPW@$)Jj_Pe_m3N?rT$Ish< zhb!BObJU51O?Be=wbaCQ9gdY{k!*2C8wbK223r^k#`tP1U|1OOOqv>1-HIL~ZVApR zMMIsZZs!l#?hwf{+?JQp6t!?;6j@Sbc!PdMg-BjVhTEh_{5xi92+0RmT*V4bUm}?2 zMVPWXZCfKuE4U7}*feKabkCqUB$Oib(bap^yIv;SMnVPHpjCv0ag}2`EhG?7vh-e0 z?f#9K^9WlHy7 OKs#A8*ug!kO$m4F$;cPPZu(-W&*w?=dEQH^|Lc{*kFF+3 zW`jsePJ0-+bQ&g31f~7c@)j|&bxg2jl2$*MyN}^n`55i$5{WGRIm7k8TU6rK@ATqljQo!*3K(Rx_rC$|YAZgg=&M{k%}k$>M`C#^D9zEIg1 z`+Z7wdN_UxN0iEsMPLnZ-ADHJn@(y6_L AC(zstG!}e6>FJ*thQV7jbq-*#JE1Z5W=4KS_f-aOx`Bb2I`VU+7^1aE zTZ&zVQO2(jFd1!w;l3^(7ex1a&Qdp%;^Q(B=WPQCl!g)mPWjR^06pw(avNi>k$%=# z`dVWGH|Qqnd+7Y?;EERDN*~12#@G|;m(FDo3YIk02=ifh%Y&gF7_6q O3Wx#4f=#rHE6FV%kC>hyX+O_c(g*#GJcr@H6p7fpeGC|4&3VM< +t0C1jUXth`@Ve| 3)$V|dYB^{RBPjqa~V-ckj#kX!smWQ&?DF~fJ?`$g`cQ{$PhjDEo@C)%oT z#GJ&-4>2q`1%4y3&8Z@;f-7s1nBLKy*GCdgfy}SLi$(=)e1h`LZwlJ(w+r#IU8*Dx zvH>~XaS{wZkopsXL8r@frQ~?Q8LX2MYL}KF`KI7b-$b%oO3@5w;&YM2c^pCL78=Wb z8wc8kkNp<`^E0-@M;2A*Vn=gCg*Iv)(qy&;bg zLwxB|Mt%~!=EU>YOX#X1Qu+c55 ze#obh#MlDrwj(dYv2Cdq7Is7Dp-GOZEYZv`DGZlcc_VcN0IOkfw|(K*-)!el1__v@ zpk4awk{1-Lt!10wLuQ~lG1%Gjj)_x1S$sYKG{)!qOiD?!?m~(VJBh29- {IhetS7Y#btKezI{qi0vU&h(>6=cR zMTm%4qXvBvcqLN0B`G@W?K1NZ(J*LXsCMt7ElM|~y4I4>^}&@4i=i{WJDt)GQF+TD z0x1Bob>Z0Wg}f8!w;y-&?4K5R8