# Conflicts:
#	code/game/objects/items/weapons/tools.dm
#	code/modules/mob/living/silicon/robot/robot_modules/station.dm
#	config/custom_items.txt
#	vorestation.dme
This commit is contained in:
Kelshark
2017-10-17 08:49:37 -04:00
364 changed files with 6881 additions and 2642 deletions

View File

@@ -23,6 +23,9 @@
/obj/item/weapon/reagent_containers/borghypo/crisis
reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/lost
reagent_ids = list("tricordrazine", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/New()
..()

View File

@@ -146,3 +146,22 @@
underlays += I
else continue
side = "right"
/obj/item/weapon/reagent_containers/food/drinks/glass2/afterattack(var/obj/target, var/mob/user, var/proximity)
if(user.a_intent == I_HURT) //We only want splashing to be done if they are on harm intent.
if(!is_open_container() || !proximity)
return 1
if(standard_splash_mob(user, target))
return 1
if(reagents && reagents.total_volume) //They are on harm intent, aka wanting to spill it.
user << "<span class='notice'>You splash the solution onto [target].</span>"
reagents.splash(target, reagents.total_volume)
return 1
else
return
/obj/item/weapon/reagent_containers/food/drinks/glass2/standard_feed_mob(var/mob/user, var/mob/target)
if(afterattack(target, user)) //Check to see if harm intent & splash.
return
else
..() //If they're splashed, no need to do anything else.

View File

@@ -3459,7 +3459,7 @@
/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks
name = "\improper SkrellSnax"
desc = "Cured fungus shipped all the way from Jargon 4, almost like jerky! Almost."
desc = "Cured fungus shipped all the way from Qerr'balak, almost like jerky! Almost."
icon_state = "skrellsnacks"
filling_color = "#A66829"
center_of_mass = list("x"=15, "y"=12)
@@ -3494,4 +3494,4 @@
/obj/item/weapon/reagent_containers/food/snacks/croissant/New()
..()
bitesize = 2
bitesize = 2

View File

@@ -78,25 +78,27 @@
/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/proximity)
if(!is_open_container() || !proximity)
return
if(!is_open_container() || !proximity) //Is the container open & are they next to whatever they're clicking?
return //If not, do nothing.
for(var/type in can_be_placed_into)
for(var/type in can_be_placed_into) //Is it something it can be placed into?
if(istype(target, type))
return
if(standard_splash_mob(user, target))
return
if(standard_dispenser_refill(user, target))
return
if(standard_pour_into(user, target))
if(standard_dispenser_refill(user, target)) //Are they clicking a water tank/some dispenser?
return
if(reagents && reagents.total_volume)
user << "<span class='notice'>You splash the solution onto [target].</span>"
reagents.splash(target, reagents.total_volume)
if(standard_pour_into(user, target)) //Pouring into another beaker?
return
if(user.a_intent == I_HURT) //Harm intent?
if(standard_splash_mob(user, target)) //If harm intent and can splash a mob, go ahead.
return
if(reagents && reagents.total_volume) //Otherwise? Splash the floor.
user << "<span class='notice'>You splash the solution onto [target].</span>"
reagents.splash(target, reagents.total_volume)
return
/obj/item/weapon/reagent_containers/glass/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
@@ -265,6 +267,41 @@
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
overlays += lid
obj/item/weapon/reagent_containers/glass/bucket/wood
desc = "An old wooden bucket."
name = "wooden bucket"
icon = 'icons/obj/janitor.dmi'
icon_state = "woodbucket"
item_state = "woodbucket"
matter = list("wood" = 50)
w_class = ITEMSIZE_LARGE
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60,120)
volume = 120
flags = OPENCONTAINER
unacidable = 0
/obj/item/weapon/reagent_containers/glass/bucket/wood/attackby(var/obj/D, mob/user as mob)
if(isprox(D))
user << "This wooden bucket doesn't play well with electronics."
return
else if(istype(D, /obj/item/weapon/material/hatchet))
to_chat(user, "<span class='notice'>You cut a big hole in \the [src] with \the [D]. It's kinda useless as a bucket now.</span>")
user.put_in_hands(new /obj/item/clothing/head/helmet/bucket/wood)
user.drop_from_inventory(src)
qdel(src)
return
else if(istype(D, /obj/item/weapon/mop))
if(reagents.total_volume < 1)
user << "<span class='warning'>\The [src] is empty!</span>"
else
reagents.trans_to_obj(D, 5)
user << "<span class='notice'>You wet \the [D] in \the [src].</span>"
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
return
else
return ..()
/obj/item/weapon/reagent_containers/glass/cooler_bottle
desc = "A bottle for a water-cooler."
name = "water-cooler bottle"

View File

@@ -58,7 +58,7 @@
return
if(mode == SYRINGE_BROKEN)
user << "<span class='warning'>This syringe is broken!</span>"
to_chat(user, "<span class='warning'>This syringe is broken!</span>")
return
if(user.a_intent == I_HURT && ismob(target))
@@ -70,26 +70,31 @@
switch(mode)
if(SYRINGE_DRAW)
if(!reagents.get_free_space())
user << "<span class='warning'>The syringe is full.</span>"
to_chat(user, "<span class='warning'>The syringe is full.</span>")
mode = SYRINGE_INJECT
return
if(ismob(target))//Blood!
if(reagents.has_reagent("blood"))
user << "<span class='notice'>There is already a blood sample in this syringe.</span>"
to_chat(user, "<span class='notice'>There is already a blood sample in this syringe.</span>")
return
if(istype(target, /mob/living/carbon))
var/amount = reagents.get_free_space()
var/mob/living/carbon/T = target
if(!T.dna)
user << "<span class='warning'>You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).</span>"
to_chat(user, "<span class='warning'>You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum).</span>")
return
if(NOCLONE in T.mutations) //target done been et, no more blood in him
user << "<span class='warning'>You are unable to locate any blood.</span>"
to_chat(user, "<span class='warning'>You are unable to locate any blood.</span>")
return
if(T.isSynthetic())
to_chat(user, "<span class = 'warning'>You can't draw blood from a synthetic!</span>")
return
if(drawing)
user << "<span class='warning'>You are already drawing blood from [T.name].</span>"
to_chat(user, "<span class='warning'>You are already drawing blood from [T.name].</span>")
return
var/datum/reagent/B
@@ -117,50 +122,51 @@
reagents.update_total()
on_reagent_change()
reagents.handle_reactions()
user << "<span class='notice'>You take a blood sample from [target].</span>"
to_chat(user, "<span class='notice'>You take a blood sample from [target].</span>")
for(var/mob/O in viewers(4, user))
O.show_message("<span class='notice'>[user] takes a blood sample from [target].</span>", 1)
else //if not mob
if(!target.reagents.total_volume)
user << "<span class='notice'>[target] is empty.</span>"
to_chat(user, "<span class='notice'>[target] is empty.</span>")
return
if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/weapon/reagent_containers/food))
user << "<span class='notice'>You cannot directly remove reagents from this object.</span>"
to_chat(user, "<span class='notice'>You cannot directly remove reagents from this object.</span>")
return
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
user << "<span class='notice'>You fill the syringe with [trans] units of the solution.</span>"
to_chat(user, "<span class='notice'>You fill the syringe with [trans] units of the solution.</span>")
update_icon()
if(!reagents.get_free_space())
mode = SYRINGE_INJECT
update_icon()
if(SYRINGE_INJECT)
if(!reagents.total_volume)
user << "<span class='notice'>The syringe is empty.</span>"
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
mode = SYRINGE_DRAW
return
if(istype(target, /obj/item/weapon/implantcase/chem))
return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
user << "<span class='notice'>You cannot directly fill this object.</span>"
to_chat(user, "<span class='notice'>You cannot directly fill this object.</span>")
return
if(!target.reagents.get_free_space())
user << "<span class='notice'>[target] is full.</span>"
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
var/mob/living/carbon/human/H = target
if(istype(H))
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
if(!affected)
user << "<span class='danger'>\The [H] is missing that limb!</span>"
to_chat(user, "<span class='danger'>\The [H] is missing that limb!</span>")
return
else if(affected.robotic >= ORGAN_ROBOT)
user << "<span class='danger'>You cannot inject a robotic limb.</span>"
to_chat(user, "<span class='danger'>You cannot inject a robotic limb.</span>")
return
if(ismob(target) && target != user)
@@ -200,9 +206,9 @@
else
trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
if(trans)
user << "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>"
to_chat(user, "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>")
else
user << "<span class='notice'>The syringe is empty.</span>"
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
mode = SYRINGE_DRAW
update_icon()
@@ -245,7 +251,7 @@
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
if (!affecting || affecting.is_stump())
user << "<span class='danger'>They are missing that limb!</span>"
to_chat(user, "<span class='danger'>They are missing that limb!</span>")
return
var/hit_area = affecting.name
@@ -302,10 +308,10 @@
/obj/item/weapon/reagent_containers/syringe/ld50_syringe/afterattack(obj/target, mob/user, flag)
if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
user << "<span class='notice'>This needle isn't designed for drawing blood.</span>"
to_chat(user, "<span class='notice'>This needle isn't designed for drawing blood.</span>")
return
if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
user << "<span class='notice'>This syringe is too big to stab someone with it.</span>"
to_chat(user, "<span class='notice'>This syringe is too big to stab someone with it.</span>")
..()
////////////////////////////////////////////////////////////////////////////////