diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index dfeef3b004e..c3c7269515e 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -23,11 +23,9 @@ health = 40 melee_damage_lower = 1 melee_damage_upper = 5 - var/datum/reagents/udder = null + var/milk_content = 0 /mob/living/simple_animal/hostile/retaliate/goat/New() - udder = new(50) - udder.my_atom = src ..() /mob/living/simple_animal/hostile/retaliate/goat/Life() @@ -42,9 +40,8 @@ LoseTarget() src.visible_message("\blue [src] calms down.") - if(stat == CONSCIOUS) - if(udder && prob(5)) - udder.add_reagent("milk", rand(5, 10)) + if(stat == CONSCIOUS && prob(5)) + milk_content = min(50, milk_content+rand(5, 10)) if(locate(/obj/effect/plant) in loc) var/obj/effect/plant/SV = locate(/obj/effect/plant) in loc @@ -75,12 +72,15 @@ /mob/living/simple_animal/hostile/retaliate/goat/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] milks [src] using \the [O].") var/obj/item/weapon/reagent_containers/glass/G = O - var/transfered = udder.trans_id_to(G, "milk", rand(5,10)) - if(G.reagents.total_volume >= G.volume) - user << "\red The [O] is full." - if(!transfered) + var/transfered = min(milk_content, rand(5,10), (G.volume - G.reagents.total_volume)) + if(transfered > 0) + user.visible_message("[user] milks [src] using \the [O].") + G.reagents.add_reagent("milk", transfered) + milk_content -= transfered + else if(G.reagents.total_volume >= G.volume) + user << "\red \The [O] is full." + else user << "\red The udder is dry. Wait a bit longer..." else ..() @@ -106,30 +106,31 @@ response_harm = "kicks the" attacktext = "kicks" health = 50 - var/datum/reagents/udder = null + var/milk_content = 0 /mob/living/simple_animal/cow/New() - udder = new(50) - udder.my_atom = src ..() /mob/living/simple_animal/cow/attackby(var/obj/item/O as obj, var/mob/user as mob, params, params) if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) - user.visible_message("[user] milks [src] using \the [O].") + user.changeNext_move(CLICK_CD_MELEE) var/obj/item/weapon/reagent_containers/glass/G = O - var/transfered = udder.trans_id_to(G, "milk", rand(5,10)) - if(G.reagents.total_volume >= G.volume) - user << "\red The [O] is full." - if(!transfered) + var/transfered = min(milk_content, rand(5,10), (G.volume - G.reagents.total_volume)) + if(transfered > 0) + user.visible_message("[user] milks [src] using \the [O].") + G.reagents.add_reagent("milk", transfered) + milk_content -= transfered + else if(G.reagents.total_volume >= G.volume) + user << "\red \The [O] is full." + else user << "\red The udder is dry. Wait a bit longer..." else ..() /mob/living/simple_animal/cow/Life() . = ..() - if(stat == CONSCIOUS) - if(udder && prob(5)) - udder.add_reagent("milk", rand(5, 10)) + if(stat == CONSCIOUS && prob(5)) + milk_content = min(50, milk_content+rand(5, 10)) /mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M as mob) if(!stat && M.a_intent == "disarm" && icon_state != icon_dead)