diff --git a/_maps/voidcrew/RandomRuins/JungleRuins/jungle_stealth_test.dmm b/_maps/voidcrew/RandomRuins/JungleRuins/jungle_stealth_test.dmm new file mode 100644 index 00000000000..5c97ade5ca5 --- /dev/null +++ b/_maps/voidcrew/RandomRuins/JungleRuins/jungle_stealth_test.dmm @@ -0,0 +1,885 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/spawner/human_npc/ruin/scav/lookout{ + dir = 2 + }, +/turf/open/floor/iron, +/area/ruin/powered) +"b" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/bottle/beer, +/obj/item/reagent_containers/cup/glass/bottle/beer, +/obj/item/reagent_containers/cup/glass/bottle/beer, +/turf/open/floor/iron, +/area/ruin/powered) +"c" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/obj/item/coin/iron, +/obj/item/coin/iron, +/obj/item/coin/iron, +/turf/open/floor/iron, +/area/ruin/powered) +"d" = ( +/obj/structure/closet/crate, +/obj/item/gun/ballistic/automatic/pistol, +/obj/item/suppressor, +/obj/item/gun/ballistic/automatic/wt550, +/obj/item/gun/ballistic/rifle/boltaction, +/obj/item/gun/ballistic/bow/longbow, +/obj/item/storage/bag/quiver/full, +/obj/item/jammer, +/obj/item/grenade/flashbang, +/obj/item/grenade/empgrenade, +/turf/open/floor/iron, +/area/ruin/powered) +"e" = ( +/obj/machinery/door/airlock/security{ + name = "Strongroom"; + req_access = list("armory") + }, +/turf/open/floor/iron, +/area/ruin/powered) +"f" = ( +/obj/effect/landmark/stealth_patrol{ + route = "b"; + order = 3 + }, +/turf/open/floor/plating, +/area/ruin/powered) +"g" = ( +/turf/open/floor/carpet, +/area/ruin/powered) +"h" = ( +/obj/effect/landmark/stealth_patrol{ + route = "b"; + order = 1; + route_mode = "pingpong" + }, +/obj/effect/spawner/human_npc/ruin/scav{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/powered) +"i" = ( +/turf/open/misc/grass/jungle, +/area/overmap_encounter/planet_ruin) +"l" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/ruin/powered) +"o" = ( +/obj/effect/landmark/stealth_patrol{ + route = "b"; + order = 2 + }, +/turf/open/floor/plating, +/area/ruin/powered) +"p" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/iron, +/area/ruin/powered) +"q" = ( +/obj/effect/landmark/stealth_patrol{ + route = "a"; + order = 3; + facing = 2 + }, +/obj/effect/spawner/human_npc/ruin/scav{ + dir = 2 + }, +/turf/open/floor/iron, +/area/ruin/powered) +"s" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating, +/area/ruin/powered) +"t" = ( +/obj/machinery/door/airlock/public, +/turf/open/floor/iron, +/area/ruin/powered) +"v" = ( +/obj/effect/landmark/stealth_patrol{ + route = "a"; + order = 4; + facing = 4; + chatter = 1 + }, +/turf/open/floor/iron, +/area/ruin/powered) +"x" = ( +/turf/open/floor/iron, +/area/ruin/powered) +"y" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/ruin/powered) +"z" = ( +/obj/structure/table, +/turf/open/floor/iron, +/area/ruin/powered) +"B" = ( +/obj/structure/closet/crate/large, +/turf/open/floor/plating, +/area/ruin/powered) +"F" = ( +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron, +/area/ruin/powered) +"I" = ( +/obj/effect/landmark/stealth_patrol{ + route = "a"; + order = 2; + facing = 4 + }, +/obj/effect/spawner/human_npc/ruin/scav/lookout{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/powered) +"J" = ( +/turf/closed/wall, +/area/ruin/powered) +"P" = ( +/turf/open/floor/plating, +/area/ruin/powered) +"Q" = ( +/obj/effect/landmark/stealth_group, +/turf/open/floor/iron, +/area/ruin/powered) +"V" = ( +/obj/effect/landmark/stealth_patrol{ + route = "a"; + order = 1; + facing = 8 + }, +/obj/effect/spawner/human_npc/ruin/scav{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/powered) +"W" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/ruin/powered) + +(1,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(2,1,1) = {" +i +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +i +i +"} +(3,1,1) = {" +i +J +x +x +J +P +P +P +P +P +P +P +P +P +P +P +P +P +s +J +i +i +"} +(4,1,1) = {" +i +J +l +x +J +P +P +P +P +P +P +s +P +P +P +P +P +P +P +J +i +i +"} +(5,1,1) = {" +i +J +x +V +J +P +P +h +P +P +P +P +P +P +P +P +P +P +P +J +i +i +"} +(6,1,1) = {" +i +J +x +x +J +P +P +P +P +P +P +P +P +P +P +P +f +P +P +J +i +i +"} +(7,1,1) = {" +i +J +x +x +J +P +P +P +P +P +P +P +P +P +P +P +P +P +P +J +i +i +"} +(8,1,1) = {" +i +J +x +x +t +P +P +P +P +P +P +P +B +P +P +P +P +P +P +J +i +i +"} +(9,1,1) = {" +i +J +x +x +J +P +P +P +P +P +P +P +B +P +P +P +P +P +P +J +i +i +"} +(10,1,1) = {" +i +J +l +x +J +P +B +B +P +P +P +P +P +P +P +P +P +P +P +J +i +i +"} +(11,1,1) = {" +i +J +g +g +J +P +P +P +P +P +P +P +P +P +P +P +P +P +P +J +i +i +"} +(12,1,1) = {" +i +J +g +g +p +P +P +P +P +P +P +P +P +P +P +P +P +P +P +J +i +i +"} +(13,1,1) = {" +i +J +g +g +J +P +P +P +P +P +o +P +P +P +P +B +P +P +P +J +i +i +"} +(14,1,1) = {" +i +J +x +x +J +P +P +P +P +P +P +P +P +P +P +s +P +P +P +J +i +i +"} +(15,1,1) = {" +i +J +x +x +J +P +P +P +P +P +P +P +P +P +P +P +P +P +B +J +i +i +"} +(16,1,1) = {" +i +J +l +x +J +J +J +J +J +e +J +J +J +J +J +J +J +J +J +J +i +i +"} +(17,1,1) = {" +i +J +P +P +J +x +x +x +x +x +Q +x +F +x +x +x +x +x +x +J +i +i +"} +(18,1,1) = {" +i +J +P +P +J +l +x +x +x +x +x +x +x +x +x +x +x +x +W +J +i +i +"} +(19,1,1) = {" +i +J +P +P +p +x +x +x +x +x +x +x +x +x +v +x +x +x +x +J +i +i +"} +(20,1,1) = {" +i +J +x +x +p +x +x +x +x +x +x +x +x +x +x +x +x +x +b +J +i +i +"} +(21,1,1) = {" +i +J +x +x +p +x +x +x +x +x +x +x +x +x +x +x +x +x +c +J +i +i +"} +(22,1,1) = {" +i +J +l +x +J +x +x +x +x +x +x +y +x +x +x +x +x +a +x +t +i +i +"} +(23,1,1) = {" +i +J +x +x +J +x +x +x +x +x +x +x +x +x +x +x +x +x +x +J +i +i +"} +(24,1,1) = {" +i +J +x +x +p +x +x +x +x +x +z +z +x +x +x +x +x +x +d +J +i +i +"} +(25,1,1) = {" +i +J +x +x +p +x +x +x +x +x +z +z +x +x +x +x +x +x +x +J +i +i +"} +(26,1,1) = {" +i +J +I +x +p +x +x +x +x +x +x +x +x +x +x +x +x +x +x +J +i +i +"} +(27,1,1) = {" +i +J +x +x +t +x +x +q +x +x +x +x +x +x +x +x +x +x +x +J +i +i +"} +(28,1,1) = {" +i +J +x +x +J +l +x +x +x +x +x +x +x +x +x +x +x +x +W +J +i +i +"} +(29,1,1) = {" +i +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +J +i +i +"} +(30,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} diff --git a/code/__DEFINES/explosions.dm b/code/__DEFINES/explosions.dm index 7940cf20709..b05dbe6e5ca 100644 --- a/code/__DEFINES/explosions.dm +++ b/code/__DEFINES/explosions.dm @@ -19,17 +19,15 @@ #define GIBTONITE_DETONATE 3 /// A wrapper for [/atom/proc/ex_act] to ensure that the explosion propagation and attendant signal are always handled. -/// VOIDCREW: recheck outpost protection when queued or direct damage is applied. -// VOIDCREW EDIT START: Block explosions on protected trader outposts before contents and signals fire (voidcrew/modules/trade/outpost_security.dm). +/// VOIDCREW: a trader outpost's own floors and walls never react to a blast; whatever stands on them still does. +// VOIDCREW EDIT START: Trader outpost turfs ignore explosions, their contents do not (voidcrew/modules/trade/outpost_security.dm). #define EX_ACT(target, args...)\ - if(!is_trader_outpost_protected(target)) { \ - if(!(target.flags_1 & PREVENT_CONTENTS_EXPLOSION_1)) { \ - target.contents_explosion(##args);\ - };\ - if(!(SEND_SIGNAL(target, COMSIG_ATOM_PRE_EX_ACT, ##args) & COMPONENT_CANCEL_EX_ACT)) { \ - SEND_SIGNAL(target, COMSIG_ATOM_EX_ACT, ##args);\ - target.ex_act(##args);\ - } \ + if(!(target.flags_1 & PREVENT_CONTENTS_EXPLOSION_1)) { \ + target.contents_explosion(##args);\ + };\ + if(!(isturf(target) && is_trader_outpost_protected(target)) && !(SEND_SIGNAL(target, COMSIG_ATOM_PRE_EX_ACT, ##args) & COMPONENT_CANCEL_EX_ACT)) { \ + SEND_SIGNAL(target, COMSIG_ATOM_EX_ACT, ##args);\ + target.ex_act(##args);\ } // VOIDCREW EDIT END diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index c1f1321cc67..1c35930def6 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -299,12 +299,6 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec epicenter = get_turf(epicenter) if(!epicenter) return - // VOIDCREW: suppress the blast before smoke, flashes, fire, or chain reactions. - // VOIDCREW EDIT START: Stop protected outpost blasts before smoke, flash, ignition and damage (voidcrew/modules/trade/outpost_security.dm). - if(is_trader_outpost_protected(epicenter)) - log_game("OUTPOST PROTECTION: Suppressed explosion ([devastation_range], [heavy_impact_range], [light_impact_range]) at [AREACOORD(epicenter)]. Cause: [explosion_cause]. Last fingerprints: [key_name(explosion_cause?.fingerprintslast)].") - return - // VOIDCREW EDIT END if(isnull(flame_range)) flame_range = light_impact_range @@ -398,10 +392,6 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec //flash mobs if(flash_range) for(var/mob/living/L in viewers(flash_range, epicenter)) - // VOIDCREW EDIT START: Stop protected outpost blasts before smoke, flash, ignition and damage (voidcrew/modules/trade/outpost_security.dm). - if(is_trader_outpost_protected(L)) // VOIDCREW - continue - // VOIDCREW EDIT END L.flash_act() var/list/affected_turfs = prepare_explosion_turfs(max_range, epicenter, protect_epicenter, explosion_direction, explosion_arc) @@ -412,16 +402,13 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec // This is gonna be an array, index'd by turfs var/list/cached_exp_block = list() var/list/held_throwturf = src.held_throwturf + // VOIDCREW EDIT ADDITION START: who the blast caught at a trader outpost (voidcrew/modules/trade/outpost_security.dm) + var/list/outpost_blast_victims + // VOIDCREW EDIT ADDITION END //lists are guaranteed to contain at least 1 turf at this point //we presuppose that we'll be iterating away from the epicenter for(var/turf/explode as anything in affected_turfs) - // VOIDCREW: outside blasts cannot damage, ignite, or throw outpost contents. - // VOIDCREW EDIT START: Stop protected outpost blasts before smoke, flash, ignition and damage (voidcrew/modules/trade/outpost_security.dm). - if(is_trader_outpost_protected(explode)) - cached_exp_block[explode] = INFINITY - continue - // VOIDCREW EDIT END var/our_x = explode.x var/our_y = explode.y var/dist = CHEAP_HYPOTENUSE(our_x, our_y, x0, y0) @@ -446,6 +433,11 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec else if(dist + (block * EXPLOSION_BLOCK_LIGHT) < light_impact_range) severity = EXPLODE_LIGHT + // VOIDCREW EDIT ADDITION START: a blast that catches someone at a trader outpost is an attack (voidcrew/modules/trade/outpost_security.dm) + if(severity != EXPLODE_NONE) + outpost_blast_victims = note_outpost_blast_victims(explode, outpost_blast_victims) + // VOIDCREW EDIT ADDITION END + if(explode == epicenter) // Ensures explosives detonating from bags trigger other explosives in that bag var/list/items = list() for(var/atom/holder as anything in explode) @@ -491,6 +483,11 @@ ADMIN_VERB(check_bomb_impacts, R_DEBUG, "Check Bomb Impact", "See what the effec explosion_index += 1 + // VOIDCREW EDIT ADDITION START: the police hear of it like any other attack (voidcrew/modules/trade/outpost_security.dm) + if(outpost_blast_victims) + GLOB.outpost_pvp_enforcement.on_outpost_bombing(explosion_cause, outpost_blast_victims) + // VOIDCREW EDIT ADDITION END + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_EXPLOSION, epicenter, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range, explosion_cause, explosion_index) // Explosion SFX defines... diff --git a/tgstation.dme b/tgstation.dme index 34c6bdf341f..d50658d3b20 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6720,6 +6720,7 @@ #include "voidcrew\_DEFINES\outpost_market_shop.dm" #include "voidcrew\_DEFINES\outpost_market_storage.dm" #include "voidcrew\_DEFINES\outpost_market_teleporter.dm" +#include "voidcrew\_DEFINES\outpost_police.dm" #include "voidcrew\_DEFINES\outpost_prison_boss_moves.dm" #include "voidcrew\_DEFINES\outpost_prison_bounty.dm" #include "voidcrew\_DEFINES\outpost_prison_changeling.dm" @@ -6735,6 +6736,7 @@ #include "voidcrew\_DEFINES\outpost_prison_security.dm" #include "voidcrew\_DEFINES\outpost_prison_social.dm" #include "voidcrew\_DEFINES\outpost_prison_trouble.dm" +#include "voidcrew\_DEFINES\outpost_recovery.dm" #include "voidcrew\_DEFINES\outpost_styles.dm" #include "voidcrew\_DEFINES\overmap.dm" #include "voidcrew\_DEFINES\overmap_zones.dm" @@ -6747,6 +6749,8 @@ #include "voidcrew\_DEFINES\ship_signals.dm" #include "voidcrew\_DEFINES\shuttles.dm" #include "voidcrew\_DEFINES\sound.dm" +#include "voidcrew\_DEFINES\stealth.dm" +#include "voidcrew\_DEFINES\stealth_hearing.dm" #include "voidcrew\_DEFINES\subsystems.dm" #include "voidcrew\_DEFINES\techweb_nodes.dm" #include "voidcrew\_DEFINES\trade.dm" @@ -6927,6 +6931,7 @@ #include "voidcrew\edits\modules\mob\living\basic\lavaland\legion\spawn_legions.dm" #include "voidcrew\edits\modules\mob\living\carbon\floored_fall.dm" #include "voidcrew\edits\modules\mob\living\carbon\inventory.dm" +#include "voidcrew\edits\modules\mob\living\carbon\human\human_stripping.dm" #include "voidcrew\edits\modules\mod\modules\modules_supply.dm" #include "voidcrew\edits\modules\modular_computers\file_system\programs\budgetordering.dm" #include "voidcrew\edits\modules\power\supermatter_anomalies.dm" @@ -7579,6 +7584,26 @@ #include "voidcrew\modules\outfits\pirate_factions.dm" #include "voidcrew\modules\outfits\syndicate.dm" #include "voidcrew\modules\outfits\western.dm" +#include "voidcrew\modules\outpost_police\evidence_locker.dm" +#include "voidcrew\modules\outpost_police\police_arrest.dm" +#include "voidcrew\modules\outpost_police\police_cell.dm" +#include "voidcrew\modules\outpost_police\police_core.dm" +#include "voidcrew\modules\outpost_police\police_dispatch.dm" +#include "voidcrew\modules\outpost_police\police_force.dm" +#include "voidcrew\modules\outpost_police\police_hud.dm" +#include "voidcrew\modules\outpost_police\police_life.dm" +#include "voidcrew\modules\outpost_police\police_perception.dm" +#include "voidcrew\modules\outpost_police\police_property.dm" +#include "voidcrew\modules\outpost_police\police_units.dm" +#include "voidcrew\modules\outpost_police\police_wanted.dm" +#include "voidcrew\modules\outpost_police\recovery_core.dm" +#include "voidcrew\modules\outpost_police\recovery_crews.dm" +#include "voidcrew\modules\outpost_police\recovery_janitor.dm" +#include "voidcrew\modules\outpost_police\recovery_medic.dm" +#include "voidcrew\modules\outpost_police\recovery_morgue.dm" +#include "voidcrew\modules\outpost_police\recovery_offscreen.dm" +#include "voidcrew\modules\outpost_police\recovery_robbery.dm" +#include "voidcrew\modules\outpost_police\recovery_staff.dm" #include "voidcrew\modules\overmap\code\controllers\subsystem\overmap.dm" #include "voidcrew\modules\overmap\code\controllers\subsystem\shuttle.dm" #include "voidcrew\modules\overmap\code\controllers\subsystem\worldgen_queue.dm" @@ -7848,6 +7873,26 @@ #include "voidcrew\modules\shuttle\survey\survey_data_disk.dm" #include "voidcrew\modules\shuttle\survey\survey_designs.dm" #include "voidcrew\modules\slime_extract_piles\slime_extract_piles.dm" +#include "voidcrew\modules\stealth\scav_guards.dm" +#include "voidcrew\modules\stealth\stealth_admin.dm" +#include "voidcrew\modules\stealth\stealth_admin_noise.dm" +#include "voidcrew\modules\stealth\stealth_ai.dm" +#include "voidcrew\modules\stealth\stealth_closet.dm" +#include "voidcrew\modules\stealth\stealth_crits.dm" +#include "voidcrew\modules\stealth\stealth_doors.dm" +#include "voidcrew\modules\stealth\stealth_hearing.dm" +#include "voidcrew\modules\stealth\stealth_knife.dm" +#include "voidcrew\modules\stealth\stealth_light.dm" +#include "voidcrew\modules\stealth\stealth_meter.dm" +#include "voidcrew\modules\stealth\stealth_noise.dm" +#include "voidcrew\modules\stealth\stealth_noise_sources.dm" +#include "voidcrew\modules\stealth\stealth_patrol.dm" +#include "voidcrew\modules\stealth\stealth_perception.dm" +#include "voidcrew\modules\stealth\stealth_radio.dm" +#include "voidcrew\modules\stealth\stealth_skill.dm" +#include "voidcrew\modules\stealth\stealth_test_ruin.dm" +#include "voidcrew\modules\stealth\stealth_turns.dm" +#include "voidcrew\modules\stealth_police\police_stealth.dm" #include "voidcrew\modules\storage\cargo_shelf.dm" #include "voidcrew\modules\storage\smart_locker.dm" #include "voidcrew\modules\storage\wall_locker.dm" diff --git a/tgui/packages/voidcrew_tgui/interfaces/OvermapManagement.tsx b/tgui/packages/voidcrew_tgui/interfaces/OvermapManagement.tsx index ac76f57597d..8047e7911b3 100644 --- a/tgui/packages/voidcrew_tgui/interfaces/OvermapManagement.tsx +++ b/tgui/packages/voidcrew_tgui/interfaces/OvermapManagement.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { type ReactNode, useEffect, useState } from 'react'; import { Box, Button, @@ -123,6 +123,13 @@ const duration = (seconds: number) => const wrapping = { whiteSpace: 'normal', overflowWrap: 'anywhere' } as const; +// One line, cut with a mark: the full text is on hover +const cut = { + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', +} as const; + export const OvermapManagement = () => { const { act, data } = useBackend(); const [search, setSearch] = useState(''); @@ -698,11 +705,28 @@ const ContactDetails = ({ contact }: { contact: Details }) => { ); }; +// A label and a field. The field may shrink, so a long name is cut with a mark and never pushes past the window. +const FormRow = ({ + label, + children, +}: { + label: string; + children: ReactNode; +}) => ( + + + {label}: + + + {children} + + +); + const BAN_KINDS = { trader: [ { value: 'embargo', displayText: 'Trade embargo (ship)' }, - { value: 'aggressor', displayText: 'Marked for violence (person)' }, - { value: 'trespass', displayText: 'Refused service (person)' }, + { value: 'wanted', displayText: 'Warrant (person)' }, ], player: [{ value: 'ship_ban', displayText: 'Denied docking (ship)' }], }; @@ -717,6 +741,7 @@ const OutpostBans = ({ bans }: { bans: Bans }) => { const [kind, setKind] = useState(null); const [targetRef, setTargetRef] = useState(null); const [minutes, setMinutes] = useState(15); + const [stars, setStars] = useState(3); const query = search.trim().toLowerCase(); const entries = bans.entries @@ -729,7 +754,8 @@ const OutpostBans = ({ bans }: { bans: Bans }) => { ) .sort( (a, b) => - a.outpost.localeCompare(b.outpost) || a.name.localeCompare(b.name), + (a.outpost || '').localeCompare(b.outpost || '') || + (a.name || '').localeCompare(b.name || ''), ); const outposts = [...bans.outposts].sort((a, b) => a.name.localeCompare(b.name), @@ -787,7 +813,7 @@ const OutpostBans = ({ bans }: { bans: Bans }) => { - + {entries.length === 0 && ( {bans.entries.length > 0 ? 'No matching bans.' : 'Nobody is banned.'} @@ -797,14 +823,17 @@ const OutpostBans = ({ bans }: { bans: Bans }) => { - - {entry.name} + + {entry.name || 'Unknown'} - - {entry.label} · {entry.outpost} - {entry.seconds !== null + + {entry.label || 'Restricted'} ·{' '} + {entry.outpost || 'Unknown outpost'} + {entry.seconds !== null && entry.seconds !== undefined ? ` · ${duration(entry.seconds)} left` - : ' · Until lifted'} + : entry.kind === 'wanted' + ? ' · At large' + : ' · Until lifted'} @@ -827,65 +856,75 @@ const OutpostBans = ({ bans }: { bans: Bans }) => {
- - - ({ - value: option.ref, - displayText: option.name, - }))} - onSelected={(value) => { - setOutpostRef(value); - setKind(null); - setTargetRef(null); - }} - /> - - - { - setKind(value); - setTargetRef(null); - setMinutes(value === 'trespass' ? 30 : 15); - }} + + ({ + value: option.ref, + displayText: option.name, + }))} + onSelected={(value) => { + setOutpostRef(value); + setKind(null); + setTargetRef(null); + }} + /> + + + { + setKind(value); + setTargetRef(null); + setMinutes(15); + setStars(3); + }} + /> + + + + + {kind === 'embargo' && ( + + - - - + )} + {kind === 'wanted' && ( + + - - {!!kind && kind !== 'ship_ban' && ( - - - - )} - + + )}