diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm
index 315202016f..708c06db12 100644
--- a/code/modules/mining/ore.dm
+++ b/code/modules/mining/ore.dm
@@ -125,10 +125,12 @@
//VOREStation Add
/obj/item/weapon/ore/attack(mob/living/M as mob, mob/living/user as mob)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species.eat_ore == 1)
- H.handle_eat_ore(src)
- return
+ if(M.handle_eat_ore(src, user))
+ return
+ ..()
+
+/obj/item/weapon/ore/attack_generic(var/mob/living/user) //Allow adminbussed mobs to eat ore if they click it while NOT on help intent.
+ if(user.handle_eat_ore(src))
+ return
..()
//VOREStation Add End
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index 6ec6814275..535768fea3 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -29,6 +29,7 @@
var/can_be_drop_pred = TRUE // Mobs are pred by default.
var/next_preyloop // For Fancy sound internal loop
var/adminbus_trash = FALSE // For abusing trash eater for event shenanigans.
+ var/adminbus_eat_ore = FALSE // This creature subsists on a diet of pure adminium.
var/vis_height = 32 // Sprite height used for resize features.
//
@@ -696,24 +697,35 @@
handle_eat_ore()
-/mob/living/proc/handle_eat_ore(obj/item/snack)
+/mob/living/proc/handle_eat_ore(obj/item/snack, mob/living/user)
+ var/mob/living/feeder = user ? user : src //Whoever's doing the feeding - us or someone else.
+ var/mob/living/carbon/human/H = src
+ if(!(adminbus_eat_ore || (istype(H) && H.species.eat_ore))) //Am I awesome enough to eat a shiny rock?
+ return
+
if(!vore_selected)
to_chat(src, "You either don't have a belly selected, or don't have a belly!")
return
- var/obj/item/I = (snack ? snack : get_active_hand())
+ var/obj/item/I = (snack ? snack : feeder.get_active_hand())
if(!I)
- to_chat(src, "You are not holding anything.")
+ to_chat(feeder, "Why is the ore gone?")
return
var/obj/item/weapon/ore/O = I
- if(istype(O))
+ if(!istype(O))
+ to_chat(src, "You pause for a moment to examine [I] and realize it's not even worth the energy to chew.")
+ return
+ else
//Eat the ore using the vorebelly for the sound then get rid of the ore to prevent infinite nutrition.
- drop_item()
+ feeder.drop_item()
O.forceMove(vore_selected)
qdel(O)
-
- log_admin("VORE: [src] used Eat Ore to swallow [O].")
+ if(feeder != src)
+ to_chat(feeder, "You feed [O] to [src].")
+ log_admin("VORE: [feeder] fed [src] [O].")
+ else
+ log_admin("VORE: [src] used Eat Ore to swallow [O].")
//List in list, define by material property of ore in code/mining/modules/ore.dm.
//50 nutrition = 5 ore to get 250 nutrition. 250 is the beginning of the 'well fed' range.
@@ -742,9 +754,8 @@
nutrition += 15
else //Random rock.
to_chat(src, "You taste stony, gravelly goodness - but you crave something with actual nutritional value.")
- return
- to_chat(src, "You pause for a moment to examine [I] and realize it's not even worth the energy to chew.")
- return
+
+ return TRUE //Good eats, cheers mate.
/mob/living/proc/switch_scaling()
set name = "Switch scaling mode"