diff --git a/code/game/objects/items/weapons/batons.dm b/code/game/objects/items/weapons/batons.dm
index 991d7745d57..995ff2eff86 100644
--- a/code/game/objects/items/weapons/batons.dm
+++ b/code/game/objects/items/weapons/batons.dm
@@ -54,10 +54,9 @@
return ..()
if(on_cooldown)
return
- if(issilicon(target) && !affect_silicon)
+ if((issilicon(target) || isbot(target)) && !affect_silicon)
return ..()
- else
- baton_knockdown(target, user)
+ baton_knockdown(target, user)
/**
* Called when a target is about to be hit non-lethally.
@@ -71,15 +70,21 @@
user.visible_message("[user] pulses [target]'s sensors with [src]!",\
"You pulse [target]'s sensors with [src]!")
on_silicon_stun(target, user)
- else
- // Check for shield/countering
- if(ishuman(target))
- var/mob/living/carbon/human/H = target
- if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
- return FALSE
+
+ // Check for shield/countering
+ else if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
+ return FALSE
user.visible_message("[user] knocks down [target] with [src]!",\
"You knock down [target] with [src]!")
on_non_silicon_stun(target, user)
+
+ else if(isbot(target))
+ user.visible_message("[user] pulses [target]'s sensors with [src]!",\
+ "You pulse [target]'s sensors with [src]!")
+ var/mob/living/simple_animal/bot/H = target
+ H.disable(stun_time_silicon)
// Visuals and sound
user.do_attack_animation(target)
playsound(target, stun_sound, 75, TRUE, -1)
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index b51f66e8d6a..ff5b3ab9770 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -32,6 +32,7 @@
var/allow_pai = TRUE // Are we even allowed to insert a pai card.
var/bot_name
+ var/disabling_timer_id = null
var/list/player_access = list()
var/emagged = 0
var/obj/item/card/id/access_card // the ID card that the bot "holds"
@@ -121,6 +122,8 @@
return "[mode_name[mode]]"
/mob/living/simple_animal/bot/proc/turn_on()
+ if(disabling_timer_id)
+ return FALSE
if(stat)
return 0
on = TRUE
@@ -417,6 +420,20 @@
if(was_on)
turn_on()
+/mob/living/simple_animal/bot/proc/disable(time)
+ if(disabling_timer_id)
+ deltimer(disabling_timer_id) // if we already have disabling timer, lets replace it with new one
+ if(on)
+ turn_off()
+ disabling_timer_id = addtimer(CALLBACK(src, PROC_REF(enable)), time, TIMER_STOPPABLE)
+
+/mob/living/simple_animal/bot/proc/enable()
+ if(disabling_timer_id)
+ deltimer(disabling_timer_id)
+ disabling_timer_id = null
+ if(!on)
+ turn_on()
+
/mob/living/simple_animal/bot/rename_character(oldname, newname)
if(!..(oldname, newname))
return 0