diff --git a/code/__DEFINES/~skyrat_defines/banning.dm b/code/__DEFINES/~skyrat_defines/banning.dm
new file mode 100644
index 00000000000..aa54f46037b
--- /dev/null
+++ b/code/__DEFINES/~skyrat_defines/banning.dm
@@ -0,0 +1,3 @@
+#define BAN_PACIFICATION "Pacification ban"
+#define BAN_DONOTREVIVE "Do not revive ban"
+#define BAN_RESPAWN "Respawn ban"
diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm
index fc7a2d8bdca..1a41102aed3 100644
--- a/code/modules/admin/sql_ban_system.dm
+++ b/code/modules/admin/sql_ban_system.dm
@@ -290,7 +290,9 @@
ROLE_MONKEY, ROLE_NINJA, ROLE_OPERATIVE,
ROLE_OVERTHROW, ROLE_REV, ROLE_REVENANT,
ROLE_REV_HEAD, ROLE_SYNDICATE,
- ROLE_TRAITOR, ROLE_WIZARD, ROLE_HIVE , ROLE_HERETIC)) //ROLE_REV_HEAD is excluded from this because rev jobbans are handled by ROLE_REV
+ ROLE_TRAITOR, ROLE_WIZARD, ROLE_HIVE , ROLE_HERETIC,
+ ROLE_ASSAULTOP), //ROLE_REV_HEAD is excluded from this because rev jobbans are handled by ROLE_REV //SKYRAT EDIT ADDITION - EXTA_BANS
+ "Skyrat Ban Options" = list(BAN_PACIFICATION, BAN_DONOTREVIVE, BAN_RESPAWN)) //SKYRAT EDIT ADDITION - EXTRA_BANS
for(var/department in long_job_lists)
output += "
"
break_counter = 0
@@ -548,6 +550,11 @@
is_admin = TRUE
if(roles_to_ban[1] == "Server" && (!is_admin || (is_admin && applies_to_admins)))
qdel(C)
+ //SKYRAT EDIT ADDITION BEGIN - EXTRA_BANS
+ if(BAN_PACIFICATION in roles_to_ban)
+ if(ismob(C.mob))
+ ADD_TRAIT(C.mob, TRAIT_PACIFISM, ROUNDSTART_TRAIT)
+ //SKYRAT EDIT END
if(roles_to_ban[1] == "Server" && AH)
AH.Resolve()
for(var/client/i in GLOB.clients - C)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 24d387e0f4c..0b486838467 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -710,6 +710,11 @@
to_chat(usr, "You must be dead to use this!")
return
+ if(ckey)
+ if(is_banned_from(ckey, BAN_RESPAWN))
+ to_chat(usr, "You are respawn banned, you can't respawn!")
+ return
+
log_game("[key_name(usr)] used abandon mob.")
to_chat(usr, "Please roleplay correctly!")
diff --git a/html/admin/banpanel.css b/html/admin/banpanel.css
index 5ce3c49887c..59fbd239fd6 100644
--- a/html/admin/banpanel.css
+++ b/html/admin/banpanel.css
@@ -72,3 +72,7 @@
.antagonistpositions {
background-color: #6d3f40;
}
+
+.skyratbanoptions {
+ background-color: #00f7ff;
+}
diff --git a/modular_skyrat/modules/banning/code/skyrat_bans.dm b/modular_skyrat/modules/banning/code/skyrat_bans.dm
new file mode 100644
index 00000000000..1a7e7e69b6b
--- /dev/null
+++ b/modular_skyrat/modules/banning/code/skyrat_bans.dm
@@ -0,0 +1,12 @@
+/mob/living/Login()
+ . = ..()
+ if(ckey)
+ if(is_banned_from(ckey, BAN_PACIFICATION))
+ ADD_TRAIT(src, TRAIT_PACIFISM, ROUNDSTART_TRAIT)
+
+/mob/dead/observer/Login()
+ . = ..()
+ if(ckey)
+ if(is_banned_from(ckey, BAN_DONOTREVIVE))
+ to_chat(src, "As you are revival banned, you cannot reenter your body.")
+ can_reenter_corpse = FALSE
diff --git a/tgstation.dme b/tgstation.dme
index 83094ef10b1..039d874707b 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -149,6 +149,7 @@
#include "code\__DEFINES\~skyrat_defines\ambitions.dm"
#include "code\__DEFINES\~skyrat_defines\ammo_defines.dm"
#include "code\__DEFINES\~skyrat_defines\assaultops.dm"
+#include "code\__DEFINES\~skyrat_defines\banning.dm"
#include "code\__DEFINES\~skyrat_defines\blueshield.dm"
#include "code\__DEFINES\~skyrat_defines\combat.dm"
#include "code\__DEFINES\~skyrat_defines\DNA.dm"
@@ -3597,6 +3598,7 @@
#include "modular_skyrat\modules\autotransfer\code\autotransfer.dm"
#include "modular_skyrat\modules\autotransfer\code\autotransfer_config.dm"
#include "modular_skyrat\modules\autotransfer\code\shuttle.dm"
+#include "modular_skyrat\modules\banning\code\skyrat_bans.dm"
#include "modular_skyrat\modules\biohazard_blob\code\_biohazard_blob_defines.dm"
#include "modular_skyrat\modules\biohazard_blob\code\biohazard_blob_controller.dm"
#include "modular_skyrat\modules\biohazard_blob\code\biohazard_blob_disease.dm"