Generalizes the feed and force feed checks.

This commit is contained in:
PsiOmegaDelta
2015-10-23 10:30:49 +02:00
parent 8305404a14
commit d845a2f587
6 changed files with 68 additions and 63 deletions

View File

@@ -34,9 +34,7 @@
else
return ..()
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.can_eat(src))
if(!M.can_eat(src))
return
if (reagents.total_volume > 0)

View File

@@ -1,11 +1,37 @@
/mob/living/carbon/human/proc/can_eat(var/food, var/feedback = 1)
if(!check_has_mouth())
#define HUMAN_EATING_NO_ISSUE 0
#define HUMAN_EATING_NO_MOUTH 1
#define HUMAN_EATING_BLOCKED_MOUTH 2
/mob/living/carbon/human/can_eat(var/food, var/feedback = 1)
var/status = can_eat_status()
if(status == HUMAN_EATING_NO_ISSUE)
return 1
if(feedback)
if(status == HUMAN_EATING_NO_MOUTH)
src << "Where do you intend to put \the [food]? You don't have a mouth!"
return 0
var/obj/item/blocked = check_mouth_coverage()
if(blocked)
if(feedback)
else if(status == HUMAN_EATING_BLOCKED_MOUTH)
src << "<span class='warning'>\The [blocked] is in the way!</span>"
return 0
/mob/living/carbon/human/can_force_feed(var/feeder, var/food, var/feedback = 1)
var/status = can_eat_status()
if(status == HUMAN_EATING_NO_ISSUE)
return 1
if(feedback)
if(status == HUMAN_EATING_NO_MOUTH)
feeder << "Where do you intend to put \the [food]? \The [src] doesn't have a mouth!"
else if(status == HUMAN_EATING_BLOCKED_MOUTH)
feeder << "<span class='warning'>\The [blocked] is in the way!</span>"
return 0
/mob/living/carbon/human/proc/can_eat_status()
if(!check_has_mouth())
return HUMAN_EATING_NO_MOUTH
var/obj/item/blocked = check_mouth_coverage()
if(blocked)
return HUMAN_EATING_BLOCKED_MOUTH
return HUMAN_EATING_NO_ISSUE
#undef HUMAN_EATING_NO_ISSUE
#undef HUMAN_EATING_NO_MOUTH
#undef HUMAN_EATING_BLOCKED_MOUTH

View File

@@ -14,6 +14,11 @@
emote_see = list("jiggles", "bounces in place")
var/colour = "grey"
/mob/living/simple_animal/slime/can_force_feed(var/feeder, var/food, var/feedback)
if(feedback)
feeder << "Where do you intend to put \the [food]? \The [src] doesn't have a mouth!"
return 0
/mob/living/simple_animal/adultslime
name = "pet slime"
desc = "A lovable, domesticated slime."

View File

@@ -619,6 +619,12 @@ proc/is_blind(A)
/mob/proc/is_client_active(var/active = 1)
return client && client.inactivity < active MINUTES
/mob/proc/can_eat()
return 1
/mob/proc/can_force_feed()
return 1
#define SAFE_PERP -50
/mob/living/proc/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest)
if(stat == DEAD)

View File

@@ -43,9 +43,7 @@
if(istype(M, /mob/living/carbon))
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
if(M == user) //If you're eating it yourself
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(!H.can_eat(src))
if(!M.can_eat(src))
return
if (fullness <= 50)
@@ -60,17 +58,8 @@
M << "<span class='danger'>You cannot force any more of [src] to go down your throat.</span>"
return 0
else
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(!H.check_has_mouth())
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
if(!M.can_force_feed(user, src))
return
var/obj/item/blocked = H.check_mouth_coverage()
if(blocked)
user << "<span class='warning'>\The [blocked] is in the way!</span>"
return
if(!istype(M, /mob/living/carbon/slime)) //If you're feeding it to someone else.
if (fullness <= (550 * (1 + M.overeatduration / 1000)))
user.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>")
@@ -86,10 +75,6 @@
user.visible_message("<span class='danger'>[user] feeds [M] [src].</span>")
else
user << "This creature does not seem to have a mouth!"
return
if(reagents) //Handle ingestion of the reagent.
playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
if(reagents.total_volume)

View File

@@ -19,15 +19,7 @@
attack(mob/M as mob, mob/user as mob, def_zone)
if(M == user)
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(!H.check_has_mouth())
user << "Where do you intend to put \the [src]? You don't have a mouth!"
return
var/obj/item/blocked = H.check_mouth_coverage()
if(blocked)
user << "<span class='warning'>\The [blocked] is in the way!</span>"
if(!M.can_eat(src))
return
M << "<span class='notice'>You swallow \the [src].</span>"
@@ -38,14 +30,7 @@
return 1
else if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(!H.check_has_mouth())
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
return
var/obj/item/blocked = H.check_mouth_coverage()
if(blocked)
user << "<span class='warning'>\The [blocked] is in the way!</span>"
if(!M.can_force_feed(user, src))
return
user.visible_message("<span class='warning'>[user] attempts to force [M] to swallow \the [src].</span>")