diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index b5071cda21f..5627e85c0b2 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -42,133 +42,137 @@ /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/constructable_frame) - New() - ..() - base_name = name +/obj/item/weapon/reagent_containers/glass/New() + ..() + base_name = name - examine(mob/user) - if(!..(user, 2)) +/obj/item/weapon/reagent_containers/glass/examine(mob/user) + if(!..(user, 2)) + return + if (!is_open_container()) + user << "Airtight lid seals it completely." + +/obj/item/weapon/reagent_containers/glass/attack_self() + ..() + if (is_open_container()) + usr << "You put the lid on \the [src]." + flags ^= OPENCONTAINER + else + usr << "You take the lid off \the [src]." + flags |= OPENCONTAINER + update_icon() + +/obj/item/weapon/reagent_containers/glass/afterattack(obj/target, mob/user, proximity) + if(!proximity) return + if (!is_open_container()) + return + + for(var/type in can_be_placed_into) + if(istype(target, type)) return - if (!is_open_container()) - user << "\blue Airtight lid seals it completely." - attack_self() - ..() - if (is_open_container()) - usr << "You put the lid on \the [src]." - flags ^= OPENCONTAINER + if(ismob(target) && target.reagents && reagents.total_volume) + user << "You splash the solution onto [target]." + + var/mob/living/M = target + var/list/injected = list() + for(var/datum/reagent/R in reagents.reagent_list) + injected += R.name + var/contained = english_list(injected) + M.attack_log += text("\[[time_stamp()]\] Has been splashed with [name] by [key_name(user)]. Reagents: [contained]") + user.attack_log += text("\[[time_stamp()]\] Used the [name] to splash [key_name(M)]. Reagents: [contained]") + if(M.ckey) + msg_admin_attack("[key_name_admin(user)] splashed [key_name_admin(M)] with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])") + if(!iscarbon(user)) + M.LAssailant = null else - usr << "You take the lid off \the [src]." - flags |= OPENCONTAINER - update_icon() + M.LAssailant = user - afterattack(obj/target, mob/user, proximity) - if(!proximity) return - if (!is_open_container()) + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("[] has been splashed with something by []!", target, user), 1) + reagents.reaction(target, TOUCH) + spawn(5) reagents.clear_reagents() + return + else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. + + if(!target.reagents.total_volume && target.reagents) + user << "[target] is empty." return - for(var/type in src.can_be_placed_into) - if(istype(target, type)) - return - - if(ismob(target) && target.reagents && reagents.total_volume) - user << "\blue You splash the solution onto [target]." - - var/mob/living/M = target - var/list/injected = list() - for(var/datum/reagent/R in src.reagents.reagent_list) - injected += R.name - var/contained = english_list(injected) - M.attack_log += text("\[[time_stamp()]\] Has been splashed with [src.name] by [key_name(user)]. Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to splash [key_name(M)]. Reagents: [contained]") - if(M.ckey) - msg_admin_attack("[key_name_admin(user)] splashed [key_name_admin(M)] with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])") - if(!iscarbon(user)) - M.LAssailant = null - else - M.LAssailant = user - - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\red [] has been splashed with something by []!", target, user), 1) - src.reagents.reaction(target, TOUCH) - spawn(5) src.reagents.clear_reagents() - return - else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - - if(!target.reagents.total_volume && target.reagents) - user << "\red [target] is empty." - return - - if(reagents.total_volume >= reagents.maximum_volume) - user << "\red [src] is full." - return - - var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - user << "\blue You fill [src] with [trans] units of the contents of [target]." - - else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. - if(!reagents.total_volume) - user << "\red [src] is empty." - return - - if(target.reagents.total_volume >= target.reagents.maximum_volume) - user << "\red [target] is full." - return - - // /vg/: Logging transfers of bad things - if(target.reagents_to_log.len) - var/list/badshit=list() - for(var/bad_reagent in target.reagents_to_log) - if(reagents.has_reagent(bad_reagent)) - badshit += reagents_to_log[bad_reagent] - if(badshit.len) - var/hl="\red ([english_list(badshit)]) \black" - message_admins("[key_name_admin(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl]") - log_game("[key_name(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].") - - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) - user << "\blue You transfer [trans] units of the solution to [target]." - - /*else if(istype(target, /obj/machinery/bunsen_burner)) + if(reagents.total_volume >= reagents.maximum_volume) + user << "[src] is full." return - else if(istype(target, /obj/machinery/radiocarbon_spectrometer)) - return*/ + var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) + user << "You fill [src] with [trans] units of the contents of [target]." - else if(istype(target, /obj/effect/decal/cleanable)) //stops splashing while scooping up fluids + else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. + if(!reagents.total_volume) + user << "[src] is empty." return - else if(reagents.total_volume) - user << "\blue You splash the solution onto [target]." - src.reagents.reaction(target, TOUCH) - spawn(5) src.reagents.clear_reagents() + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "[target] is full." return + // /vg/: Logging transfers of bad things + if(target.reagents_to_log.len) + var/list/badshit=list() + for(var/bad_reagent in target.reagents_to_log) + if(reagents.has_reagent(bad_reagent)) + badshit += reagents_to_log[bad_reagent] + if(badshit.len) + var/hl="\red ([english_list(badshit)]) \black" + message_admins("[key_name_admin(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl]") + log_game("[key_name(user)] added [reagents.get_reagent_ids(1)] to \a [target] with [src].") - attackby(var/obj/item/I, mob/user as mob, params) - if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird - return - if(is_hot(I)) - if(src.reagents) - src.reagents.chem_temp += 15 - user << "You heat [src] with [I]." - src.reagents.handle_reactions() - if(istype(I, /obj/item/weapon/pen) || istype(I, /obj/item/device/flashlight/pen)) - var/tmp_label = sanitize(input(user, "Enter a label for [src.name]","Label",src.label_text)) - if(length(tmp_label) > 10) - user << "\red The label can be at most 10 characters long." - else - user << "\blue You set the label to \"[tmp_label]\"." - src.label_text = tmp_label - src.update_name_label() - if(istype(I,/obj/item/weapon/storage/bag)) - ..() + var/trans = reagents.trans_to(target, amount_per_transfer_from_this) + user << "You transfer [trans] units of the solution to [target]." - proc/update_name_label() - if(src.label_text == "") - src.name = src.base_name + else if(istype(target, /obj/item/weapon/reagent_containers/glass) && !target.is_open_container()) + user << "You cannot fill [target] while it is sealed." + return + + /*else if(istype(target, /obj/machinery/bunsen_burner)) + return + + else if(istype(target, /obj/machinery/radiocarbon_spectrometer)) + return*/ + + else if(istype(target, /obj/effect/decal/cleanable)) //stops splashing while scooping up fluids + return + + else if(reagents.total_volume) + user << "You splash the solution onto [target]." + reagents.reaction(target, TOUCH) + spawn(5) reagents.clear_reagents() + return + + +/obj/item/weapon/reagent_containers/glass/attackby(var/obj/item/I, mob/user as mob, params) + if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird + return + if(is_hot(I)) + if(reagents) + reagents.chem_temp += 15 + user << "You heat [src] with [I]." + reagents.handle_reactions() + if(istype(I, /obj/item/weapon/pen) || istype(I, /obj/item/device/flashlight/pen)) + var/tmp_label = sanitize(input(user, "Enter a label for [name]","Label",label_text)) + if(length(tmp_label) > 10) + user << "\red The label can be at most 10 characters long." else - src.name = "[src.base_name] ([src.label_text])" + user << "You set the label to \"[tmp_label]\"." + label_text = tmp_label + update_name_label() + if(istype(I,/obj/item/weapon/storage/bag)) + ..() + +/obj/item/weapon/reagent_containers/glass/proc/update_name_label() + if(label_text == "") + name = base_name + else + name = "[base_name] ([label_text])" /obj/item/weapon/reagent_containers/glass/beaker name = "beaker" @@ -179,45 +183,45 @@ materials = list(MAT_GLASS=500) var/obj/item/device/assembly_holder/assembly = null - on_reagent_change() - update_icon() - - pickup(mob/user) - ..() - update_icon() - - dropped(mob/user) - ..() - update_icon() - - attack_hand() - ..() - update_icon() - +/obj/item/weapon/reagent_containers/glass/beaker/on_reagent_change() update_icon() - overlays.Cut() - if(reagents.total_volume) - var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") +/obj/item/weapon/reagent_containers/glass/beaker/pickup(mob/user) + ..() + update_icon() - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 9) filling.icon_state = "[icon_state]-10" - if(10 to 24) filling.icon_state = "[icon_state]10" - if(25 to 49) filling.icon_state = "[icon_state]25" - if(50 to 74) filling.icon_state = "[icon_state]50" - if(75 to 79) filling.icon_state = "[icon_state]75" - if(80 to 90) filling.icon_state = "[icon_state]80" - if(91 to INFINITY) filling.icon_state = "[icon_state]100" +/obj/item/weapon/reagent_containers/glass/beaker/dropped(mob/user) + ..() + update_icon() - filling.icon += mix_color_from_reagents(reagents.reagent_list) - overlays += filling +/obj/item/weapon/reagent_containers/glass/beaker/attack_hand() + ..() + update_icon() - if (!is_open_container()) - var/image/lid = image(icon, src, "lid_[initial(icon_state)]") - overlays += lid - if(assembly) - overlays += "assembly" +/obj/item/weapon/reagent_containers/glass/beaker/update_icon() + overlays.Cut() + + if(reagents.total_volume) + var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") + + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) filling.icon_state = "[icon_state]-10" + if(10 to 24) filling.icon_state = "[icon_state]10" + if(25 to 49) filling.icon_state = "[icon_state]25" + if(50 to 74) filling.icon_state = "[icon_state]50" + if(75 to 79) filling.icon_state = "[icon_state]75" + if(80 to 90) filling.icon_state = "[icon_state]80" + if(91 to INFINITY) filling.icon_state = "[icon_state]100" + + filling.icon += mix_color_from_reagents(reagents.reagent_list) + overlays += filling + + if (!is_open_container()) + var/image/lid = image(icon, src, "lid_[initial(icon_state)]") + overlays += lid + if(assembly) + overlays += "assembly" /obj/item/weapon/reagent_containers/glass/beaker/verb/remove_assembly() set name = "Remove Assembly" @@ -309,23 +313,20 @@ possible_transfer_amounts = list(5,10,15,25,30,50,100,300) flags = OPENCONTAINER -/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone - New() - ..() - reagents.add_reagent("cryoxadone", 30) - update_icon() +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone/New() + ..() + reagents.add_reagent("cryoxadone", 30) + update_icon() -/obj/item/weapon/reagent_containers/glass/beaker/sulphuric - New() - ..() - reagents.add_reagent("sacid", 50) - update_icon() +/obj/item/weapon/reagent_containers/glass/beaker/sulphuric/New() + ..() + reagents.add_reagent("sacid", 50) + update_icon() -/obj/item/weapon/reagent_containers/glass/beaker/slime - New() - ..() - reagents.add_reagent("slimejelly", 50) - update_icon() +/obj/item/weapon/reagent_containers/glass/beaker/slime/New() + ..() + reagents.add_reagent("slimejelly", 50) + update_icon() /obj/item/weapon/reagent_containers/glass/bucket desc = "It's a bucket." @@ -340,15 +341,15 @@ volume = 120 flags = OPENCONTAINER - attackby(var/obj/D, mob/user as mob, params) - if(isprox(D)) - user << "You add [D] to [src]." - qdel(D) - user.put_in_hands(new /obj/item/weapon/bucket_sensor) - user.unEquip(src) - qdel(src) - else - ..() +/obj/item/weapon/reagent_containers/glass/bucket/attackby(var/obj/D, mob/user as mob, params) + if(isprox(D)) + user << "You add [D] to [src]." + qdel(D) + user.put_in_hands(new /obj/item/weapon/bucket_sensor) + user.unEquip(src) + qdel(src) + else + ..() /obj/item/weapon/reagent_containers/glass/beaker/vial name = "vial"