diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 71115cf9fc0..789369bd5e4 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -61,6 +61,8 @@ GLOBAL_VAR(genname) //Nanotrasen officer name for fax send via fax panel, random GLOBAL_VAR_INIT(pacifism_after_gt, FALSE) +GLOBAL_VAR_INIT(full_lockdown, FALSE) + GLOBAL_VAR_INIT(communications_blackout, FALSE) ///All currently running polls held as datums diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm index fadbd95cda1..102f76061e3 100644 --- a/code/game/gamemodes/blob/blob_report.dm +++ b/code/game/gamemodes/blob/blob_report.dm @@ -44,7 +44,7 @@ Любой ценой необходимо активировать систему самоуничтожения станции, код[(off_auto_nuke_codes)? " будет направлен Центральным Коммандованием в скором времени" : ": [nukecode]"]." aiPlayer.set_zeroth_law(law) SSticker?.score?.save_silicon_laws(aiPlayer, additional_info = "вспышка блоба, добавлен новый нулевой закон'[law]'") - to_chat(aiPlayer, "Законы обновлены: [law]") + to_chat(aiPlayer, span_warning("Законы обновлены: [law]")) if(BLOB_THIRD_REPORT) interceptname = "Секретное постановление [command_name()]" @@ -65,7 +65,7 @@ if(aiPlayer.client) aiPlayer.laws.clear_zeroth_laws() SSticker?.score?.save_silicon_laws(aiPlayer, additional_info = "блоб уничтожен, нулевой закон удален") - to_chat(aiPlayer, "Законы обновлены") + to_chat(aiPlayer, span_warning("Законы обновлены")) print_command_report(intercepttext, interceptname, FALSE) GLOB.event_announcement.Announce("Отчёт был загружен и распечатан на всех консолях связи.", "Входящее засекреченное сообщение.", 'sound/AI/commandreport.ogg', from = "[command_name()] обновление") diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index e9d6a0114c6..c1067ad5507 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -338,7 +338,18 @@ if(!ADMIN_CHECK(ui.user)) to_chat(ui.user, span_warning("Вашего уровня доступа не хватает для отправки кодов аутентификации.")) return - print_nuke_codes() + var/response = tgui_alert(ui.user, "Вы хотите просто отправить коды на консоль или объявить директиву 7-12? \ + Директива предпочтительнее в случае, если коды даются на биоугрозу. \ + Директива 7-12 дополнительно сменит коды на боеголовке, выдаст ИИ нулевой закон на предотвращение побега экипажа \ + и взведение боеголовки, с указанием кодов в законе. \ + В остальных случаях лучше просто отправить коды на консоль.", "Тип отправки кодов", list("Отправить коды", "Директива 7-12")) + switch(response) + if("Отправить коды") + print_nuke_codes() + if("Директива 7-12") + directive_7_12() + else + return if("move_gamma_armory") if(!FULL_ADMIN_CHECK(ui.user)) @@ -397,7 +408,34 @@ P.info += "

Несоблюдение нормативных требований компании по конфиденциальности может привести к немедленному увольнению по приказу сотрудников Центрального Командования." - +/proc/directive_7_12() + var/nukecode = rand(10000, 99999) + for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) + if(bomb && bomb.r_code) + if(is_station_level(bomb.z)) + bomb.r_code = nukecode + var/intercepttext + var/interceptname + interceptname = "Секретное постановление [command_name()]" + intercepttext += "Постановление Nanotrasen: Предупреждение о биологической угрозе.
" + intercepttext += "Для [station_name()] была издана директива 7-12.
" + intercepttext += "Биологическая угроза вышла из-под контроля.
" + intercepttext += "Вам приказано следующее:
" + intercepttext += " 1. Защищать диск ядерной аутентификации.
" + intercepttext += " 2. Взорвать ядерную боеголовку, находящуюся в хранилище станции.
" + intercepttext += "Код ядерной аутентификации: [nukecode]
" + intercepttext += "Конец сообщения." + + for(var/mob/living/silicon/ai/aiPlayer in GLOB.player_list) + if(aiPlayer.client) + var/law = "Станция находится на карантине. Не позволяйте никому покидать ее.\ + При необходимости игнорируйте законы 1-3, чтобы любыми средствами предотвратить чей-либо побег со станции. \ + Любой ценой необходимо активировать систему самоуничтожения, код [nukecode]." + aiPlayer.set_zeroth_law(law) + SSticker?.score?.save_silicon_laws(aiPlayer, additional_info = "вспышка биоугрозы, добавлен новый нулевой закон'[law]'") + to_chat(aiPlayer, span_warning("Законы обновлены: [law]")) + print_command_report(intercepttext, interceptname, FALSE) + GLOB.event_announcement.Announce("Отчёт был загружен и распечатан на всех консолях связи.", "Входящее засекреченное сообщение.", 'sound/AI/commandreport.ogg', from = "[command_name()] обновление") /obj/machinery/computer/communications/emag_act(user as mob) if(!emagged) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index d502d816560..ebd9bb723f1 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -212,7 +212,8 @@ /obj/machinery/computer/teleporter/proc/targets_teleport() var/list/L = list() var/list/areaindex = list() - + var/turf/teleporter_turf = get_turf(src) + var/is_station_teleport = is_station_level(teleporter_turf.z) for(var/obj/item/radio/beacon/R in GLOB.beacons) var/turf/T = get_turf(R) if(!T) @@ -221,6 +222,8 @@ continue if(R.syndicate && !emagged) continue + if(GLOB.full_lockdown && is_station_teleport && !is_station_level(T.z)) + continue var/tmpname = T.loc.name if(areaindex[tmpname]) tmpname = "[tmpname] ([++areaindex[tmpname]])" @@ -243,6 +246,8 @@ var/turf/T = get_turf(M) if(!T) continue if(!is_teleport_allowed(T.z)) continue + if(GLOB.full_lockdown && is_station_teleport && !is_station_level(T.z)) + continue var/tmpname = M.real_name if(areaindex[tmpname]) tmpname = "[tmpname] ([++areaindex[tmpname]])" diff --git a/code/modules/admin/check_antagonists.dm b/code/modules/admin/check_antagonists.dm index 2c67828f14c..d63d0ff3315 100644 --- a/code/modules/admin/check_antagonists.dm +++ b/code/modules/admin/check_antagonists.dm @@ -35,6 +35,7 @@ else dat += span_danger("Emergency shuttle lockdowned") dat += "
Stop lockdown
" + dat += "Full LockdownNow: [GLOB.full_lockdown? "ON" : "OFF"]
" dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
" var/connected_players = GLOB.clients.len var/lobby_players = 0 diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 53feb4da903..c9ec62b86c4 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -414,6 +414,17 @@ log_and_message_admins(span_adminnotice("[key_name_admin(usr)] lockdowned the Emergency Shuttle")) href_list["secrets"] = "check_antagonist" + else if(href_list["full_lockdown"]) + if(!check_rights(R_ADMIN)) + return + + if(!you_realy_want_do_this()) + return + + GLOB.full_lockdown = !GLOB.full_lockdown + log_and_message_admins("[GLOB.full_lockdown? "enabled" : "disabled"] Full Lockdown") + href_list["secrets"] = "check_antagonist" + else if(href_list["delay_round_end"]) if(!check_rights(R_SERVER)) return diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index baf25e99d26..2f9d6d0bcd4 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -4,6 +4,7 @@ circuit = /obj/item/circuitboard/labor_shuttle shuttleId = "laborcamp" possible_destinations = "laborcamp_home;laborcamp_away" + lockdown_affected = TRUE req_access = list(ACCESS_BRIG) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 56f0ba5e765..fcf73653179 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -64,6 +64,7 @@ circuit = /obj/item/circuitboard/mining_shuttle shuttleId = "mining" possible_destinations = "mining_home;mining_away" + lockdown_affected = TRUE /******************************Lantern*******************************/ diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index ea463127747..34004102f65 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -779,6 +779,7 @@ var/shuttleId var/possible_destinations = "" var/admin_controlled + var/lockdown_affected = FALSE var/max_connect_range = 7 var/moved = FALSE //workaround for nukie shuttle, hope I find a better way to do this... @@ -837,6 +838,7 @@ /obj/machinery/computer/shuttle/ui_data(mob/user) var/list/data = list() var/obj/docking_port/mobile/mobile_docking_port = SSshuttle.getShuttle(shuttleId) + var/lockdown_check = lockdown_affected && GLOB.full_lockdown data["docked_location"] = mobile_docking_port ? mobile_docking_port.getStatusText() : "Unknown" data["timer_str"] = mobile_docking_port ? mobile_docking_port.getTimerStr() : "00:00" if(!mobile_docking_port) @@ -844,6 +846,8 @@ return data if(admin_controlled) data["status"] = "Unauthorized Access" + else if(lockdown_check) + data["status"] = "Lockdown" else switch(mobile_docking_port.mode) if(SHUTTLE_IGNITING) @@ -875,7 +879,7 @@ data["locked"] = TRUE data["status"] = "Locked" data["docking_ports_len"] = docking_ports.len - data["admin_controlled"] = admin_controlled + data["admin_controlled"] = admin_controlled || lockdown_check return data /obj/machinery/computer/shuttle/ui_act(action, params) diff --git a/tgui/packages/tgui/interfaces/AlertModal.tsx b/tgui/packages/tgui/interfaces/AlertModal.tsx index e45dcad7e78..775209148a5 100644 --- a/tgui/packages/tgui/interfaces/AlertModal.tsx +++ b/tgui/packages/tgui/interfaces/AlertModal.tsx @@ -84,7 +84,7 @@ export const AlertModal = (props, context) => { {message} - + {!!autofocus && } {isVerbose ? ( @@ -158,6 +158,7 @@ const VerticalButtons = (props: ButtonDisplayProps, context) => { width={large_buttons ? '100%' : undefined} key={index} m={0} + mb={large_buttons ? 2.5 : 0} >