diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 24e58b502ad..286f8ce7095 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -122,6 +122,10 @@
throw_item(A)
return
+ if(isLivingSSD(A))
+ if(client && client.send_ssd_warning(A))
+ return
+
var/obj/item/W = get_active_hand()
if(W == A)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 30e99027523..c5d8b79cb30 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -70,6 +70,7 @@
var/assistantratio = 2 //how many assistants to security members
var/auto_cryo_ssd_mins = 0
+ var/ssd_warning = 0
var/prob_free_golems = 75 //chance for free golems spawners to appear roundstart
var/unrestricted_free_golems = FALSE //if true, free golems can appear on all roundtypes
@@ -298,6 +299,9 @@
if("auto_cryo_ssd_mins")
config.auto_cryo_ssd_mins = text2num(value)
+ if("ssd_warning")
+ config.ssd_warning = 1
+
if("log_ooc")
config.log_ooc = 1
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 00900fe5fd1..1d26a013986 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -46,7 +46,7 @@
var/received_irc_pm = -99999
var/irc_admin //IRC admin that spoke with them last.
var/mute_irc = 0
-
+ var/ssd_warning_acknowledged = FALSE
////////////////////////////////////
//things that require the database//
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index ac9a88aaa08..175a41fa196 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -225,6 +225,9 @@
vote_on_poll(pollid, optionid, 1)
src << browse(null, "window=playerpoll")
handle_player_polling()
+ if(href_list["ssdwarning"])
+ ssd_warning_acknowledged = TRUE
+ to_chat(src, "SSD warning acknowledged.")
switch(href_list["action"])
if("openLink")
@@ -770,3 +773,15 @@
winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF")
else
winset(src, "rpane.changelog", "background-color=none;text-color=#000000")
+
+
+/client/proc/send_ssd_warning(mob/M)
+ if(!config.ssd_warning)
+ return FALSE
+ if(ssd_warning_acknowledged)
+ return FALSE
+ if(M && M.player_logged < 30) // Give it ~60 seconds, just in case they drop SSD during combat.
+ return FALSE
+ to_chat(src, "Interacting with SSD players is against server rules unless you've ahelped first for permission. If you have, confirm that and proceed.")
+ return TRUE
+
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ee04e624f02..15ab31f8f92 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -901,13 +901,18 @@ var/list/slot_equipment_priority = list( \
/mob/MouseDrop(mob/M as mob)
..()
if(M != usr) return
- if(isliving(M)) // Ewww
+ if(isliving(M))
var/mob/living/L = M
if(L.mob_size <= MOB_SIZE_SMALL)
return // Stops pAI drones and small mobs (borers, parrots, crabs) from stripping people. --DZD
- if(!M.can_strip) return
- if(usr == src) return
- if(!Adjacent(usr)) return
+ if(!M.can_strip)
+ return
+ if(usr == src)
+ return
+ if(!Adjacent(usr))
+ return
+ if(isLivingSSD(src) && M.client && M.client.send_ssd_warning(src))
+ return
show_inv(usr)
/mob/proc/can_use_hands()
diff --git a/config/example/config.txt b/config/example/config.txt
index 161d953f9d7..50f8c0f1333 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -253,6 +253,9 @@ ASSISTANT_RATIO 2
# Mins before SSD crew are cryoed.
AUTO_CRYO_SSD_MINS 15
+# If enabled, prevents people interacting with SSD players unless they acknowledge they have read the server rules.
+SSD_WARNING
+
## Remove the # to make rounds which end instantly (Rev, Wizard, Malf) to continue until the shuttle is called or the station is nuked.
## Malf and Rev will let the shuttle be called when the antags/protags are dead.
#CONTINUOUS_ROUNDS
@@ -405,4 +408,4 @@ DISABLE_HIGH_POP_MC_MODE_AMOUNT 60
#DISABLE_LOCALHOST_ADMIN
## Uncomment to give a confirmation before hitting start now
-#START_NOW_CONFIRMATION
\ No newline at end of file
+#START_NOW_CONFIRMATION