From 30cfa30c732c98bbd7b5068a6d015f4e2c726746 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Mon, 2 Mar 2015 02:38:12 +0000 Subject: [PATCH] Absolute paths --- code/modules/reagents/dispenser/cartridge.dm | 126 ++++---- code/modules/reagents/dispenser/dispenser2.dm | 276 +++++++++--------- 2 files changed, 201 insertions(+), 201 deletions(-) diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm index eca2d3bc71..fdb5e1fe76 100644 --- a/code/modules/reagents/dispenser/cartridge.dm +++ b/code/modules/reagents/dispenser/cartridge.dm @@ -10,81 +10,81 @@ // Large, but inaccurate. Use a chem dispenser or beaker for accuracy. possible_transfer_amounts = list(50, 100) - New() - ..() - if(spawn_reagent) - reagents.add_reagent(spawn_reagent, volume) - var/datum/reagent/R = chemical_reagents_list[spawn_reagent] - setLabel(R.name) - var/spawn_reagent = null var/label = "" - examine(mob/user) - ..() - user << "It has a capacity of [volume] units." - if(reagents.total_volume <= 0) - user << "It is empty." - else - user << "It contains [reagents.total_volume] units of liquid." - if(!is_open_container()) - user << "The cap is sealed." +/obj/item/weapon/reagent_containers/chem_disp_cartridge/New() + ..() + if(spawn_reagent) + reagents.add_reagent(spawn_reagent, volume) + var/datum/reagent/R = chemical_reagents_list[spawn_reagent] + setLabel(R.name) - verb/setLabel(L as text) - set name = "Set Cartridge Label" - set category = "Object" - set src in view(usr, 1) - if(L) - if(usr) - usr << "You set the label on \the [src] to '[L]'." +/obj/item/weapon/reagent_containers/chem_disp_cartridge/examine(mob/user) + ..() + user << "It has a capacity of [volume] units." + if(reagents.total_volume <= 0) + user << "It is empty." + else + user << "It contains [reagents.total_volume] units of liquid." + if(!is_open_container()) + user << "The cap is sealed." - label = L - name = "[initial(name)] - '[L]'" - else - if(usr) - usr << "You clear the label on \the [src]." - label = "" - name = initial(name) +/obj/item/weapon/reagent_containers/chem_disp_cartridge/verb/setLabel(L as text) + set name = "Set Cartridge Label" + set category = "Object" + set src in view(usr, 1) + if(L) + if(usr) + usr << "You set the label on \the [src] to '[L]'." - attack_self() - ..() - if (is_open_container()) - usr << "You put the cap on \the [src]." - flags ^= OPENCONTAINER - else - usr << "You take the cap off \the [src]." - flags |= OPENCONTAINER + label = L + name = "[initial(name)] - '[L]'" + else + if(usr) + usr << "You clear the label on \the [src]." + label = "" + name = initial(name) - afterattack(obj/target, mob/user , flag) - if (!is_open_container() || !flag) +/obj/item/weapon/reagent_containers/chem_disp_cartridge/attack_self() + ..() + if (is_open_container()) + usr << "You put the cap on \the [src]." + flags ^= OPENCONTAINER + else + usr << "You take the cap off \the [src]." + flags |= OPENCONTAINER + +/obj/item/weapon/reagent_containers/chem_disp_cartridge/afterattack(obj/target, mob/user , flag) + if (!is_open_container() || !flag) + return + + else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. + target.add_fingerprint(user) + + if(!target.reagents.total_volume && target.reagents) + user << "\The [target] is empty." return - else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - target.add_fingerprint(user) + if(reagents.total_volume >= reagents.maximum_volume) + user << "\The [src] is full." + return - if(!target.reagents.total_volume && target.reagents) - user << "\The [target] is empty." - return + var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) + user << "You fill \the [src] with [trans] units of the contents of \the [target]." - if(reagents.total_volume >= reagents.maximum_volume) - user << "\The [src] is full." - return + else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. - var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) - user << "You fill \the [src] with [trans] units of the contents of \the [target]." + if(!reagents.total_volume) + user << "\The [src] is empty." + return - else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "\The [target] is full." + return - if(!reagents.total_volume) - user << "\The [src] is empty." - return + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + user << "You transfer [trans] units of the solution to \the [target]." - if(target.reagents.total_volume >= target.reagents.maximum_volume) - user << "\The [target] is full." - return - - var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) - user << "You transfer [trans] units of the solution to \the [target]." - - else - return ..() \ No newline at end of file + else + return ..() \ No newline at end of file diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm index 4b4a3f9301..fb7299fcd9 100644 --- a/code/modules/reagents/dispenser/dispenser2.dm +++ b/code/modules/reagents/dispenser/dispenser2.dm @@ -18,158 +18,158 @@ density = 1 anchored = 1 - New() - ..() +/obj/machinery/chemical_dispenser/New() + ..() - if(spawn_cartridges) - for(var/type in spawn_cartridges) - add_cartridge(new type(src)) + if(spawn_cartridges) + for(var/type in spawn_cartridges) + add_cartridge(new type(src)) - examine(mob/user) - ..() - user << "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more." - - proc/add_cartridge(obj/item/weapon/reagent_containers/chem_disp_cartridge/C, mob/user) - if(!istype(C)) - if(user) - user << "\The [C] will not fit in \the [src]!" - return - - if(cartridges.len >= DISPENSER_MAX_CARTRIDGES) - if(user) - user << "\The [src] does not have any slots open for \the [C] to fit into!" - return - - if(!C.label) - if(user) - user << "\The [C] does not have a label!" - return - - if(cartridges[C.label]) - if(user) - user << "\The [src] already contains a cartridge with that label!" - return +/obj/machinery/chemical_dispenser/examine(mob/user) + ..() + user << "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more." +/obj/machinery/chemical_dispenser/proc/add_cartridge(obj/item/weapon/reagent_containers/chem_disp_cartridge/C, mob/user) + if(!istype(C)) if(user) - user.drop_from_inventory(C) - user << "You add \the [C] to \the [src]." + user << "\The [C] will not fit in \the [src]!" + return - C.loc = src - cartridges[C.label] = C - cartridges = sortAssoc(cartridges) - nanomanager.update_uis(src) + if(cartridges.len >= DISPENSER_MAX_CARTRIDGES) + if(user) + user << "\The [src] does not have any slots open for \the [C] to fit into!" + return - proc/remove_cartridge(label) - . = cartridges[label] - cartridges -= label - nanomanager.update_uis(src) + if(!C.label) + if(user) + user << "\The [C] does not have a label!" + return - attackby(obj/item/weapon/W, mob/user) - if(istype(W, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user << "You begin to [anchored ? "un" : ""]fasten \the [src]." - if (do_after(user, 20)) - user.visible_message( - "\The [user] [anchored ? "un" : ""]fastens \the [src].", - "You have [anchored ? "un" : ""]fastened \the [src].", - "You hear a ratchet.") - anchored = !anchored - else - user << "You decide not to [anchored ? "un" : ""]fasten \the [src]." + if(cartridges[C.label]) + if(user) + user << "\The [src] already contains a cartridge with that label!" + return - else if(istype(W, /obj/item/weapon/reagent_containers/chem_disp_cartridge)) - add_cartridge(W, user) + if(user) + user.drop_from_inventory(C) + user << "You add \the [C] to \the [src]." - else if(istype(W, /obj/item/weapon/screwdriver)) - var/label = input(user, "Which cartridge would you like to remove?", "Chemical Dispenser") as null|anything in cartridges - if(!label) return - var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = remove_cartridge(label) - if(C) - user << "You remove \the [C] from \the [src]." - C.loc = loc + C.loc = src + cartridges[C.label] = C + cartridges = sortAssoc(cartridges) + nanomanager.update_uis(src) - else if(istype(W, /obj/item/weapon/reagent_containers/glass) || istype(W, /obj/item/weapon/reagent_containers/food)) - var/obj/item/weapon/reagent_containers/RC = W - - if(!accept_drinking && istype(RC,/obj/item/weapon/reagent_containers/food)) - user << "This machine only accepts beakers!" - return - - if(!RC.is_open_container()) - user << "You don't see how \the [src] could dispense reagents into \the [RC]." - return - - container = RC - user.drop_from_inventory(RC) - RC.loc = src - user << "You set \the [RC] on \the [src]." - nanomanager.update_uis(src) // update all UIs attached to src +/obj/machinery/chemical_dispenser/proc/remove_cartridge(label) + . = cartridges[label] + cartridges -= label + nanomanager.update_uis(src) +/obj/machinery/chemical_dispenser/attackby(obj/item/weapon/W, mob/user) + if(istype(W, /obj/item/weapon/wrench)) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user << "You begin to [anchored ? "un" : ""]fasten \the [src]." + if (do_after(user, 20)) + user.visible_message( + "\The [user] [anchored ? "un" : ""]fastens \the [src].", + "You have [anchored ? "un" : ""]fastened \the [src].", + "You hear a ratchet.") + anchored = !anchored else - return ..() + user << "You decide not to [anchored ? "un" : ""]fasten \the [src]." - ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null, var/force_open = 1) - if(stat & (BROKEN|NOPOWER)) return - if(user.stat || user.restrained()) return + else if(istype(W, /obj/item/weapon/reagent_containers/chem_disp_cartridge)) + add_cartridge(W, user) - // this is the data which will be sent to the ui - var/data[0] - data["amount"] = amount - data["isBeakerLoaded"] = container ? 1 : 0 - data["glass"] = accept_drinking - var beakerD[0] - if(container && container.reagents && container.reagents.reagent_list.len) - for(var/datum/reagent/R in container.reagents.reagent_list) - beakerD[++beakerD.len] = list("name" = R.name, "volume" = R.volume) - data["beakerContents"] = beakerD + else if(istype(W, /obj/item/weapon/screwdriver)) + var/label = input(user, "Which cartridge would you like to remove?", "Chemical Dispenser") as null|anything in cartridges + if(!label) return + var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = remove_cartridge(label) + if(C) + user << "You remove \the [C] from \the [src]." + C.loc = loc - if(container) - data["beakerCurrentVolume"] = container.reagents.total_volume - data["beakerMaxVolume"] = container.reagents.maximum_volume - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null + else if(istype(W, /obj/item/weapon/reagent_containers/glass) || istype(W, /obj/item/weapon/reagent_containers/food)) + var/obj/item/weapon/reagent_containers/RC = W - var chemicals[0] - for(var/label in cartridges) - var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = cartridges[label] - chemicals[++chemicals.len] = list("label" = label, "amount" = C.reagents.total_volume) - data["chemicals"] = chemicals - - // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "chem_disp.tmpl", ui_title, 390, 680) - ui.set_initial_data(data) - ui.open() - - Topic(href, href_list) - if(stat & (NOPOWER|BROKEN)) - return 0 // don't update UIs attached to this object - - if(href_list["amount"]) - amount = round(text2num(href_list["amount"]), 1) // round to nearest 1 - amount = max(0, min(120, amount)) // Since the user can actually type the commands himself, some sanity checking - - else if(href_list["dispense"]) - var/label = href_list["dispense"] - if(cartridges[label] && container && container.is_open_container()) - var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = cartridges[label] - C.reagents.trans_to(container, amount) - - else if(href_list["ejectBeaker"]) - if(container) - var/obj/item/weapon/reagent_containers/B = container - B.loc = loc - container = null - - add_fingerprint(usr) - return 1 // update UIs attached to this object - - attack_ai(mob/user as mob) - src.attack_hand(user) - - attack_hand(mob/user as mob) - if(stat & BROKEN) + if(!accept_drinking && istype(RC,/obj/item/weapon/reagent_containers/food)) + user << "This machine only accepts beakers!" return - ui_interact(user) \ No newline at end of file + + if(!RC.is_open_container()) + user << "You don't see how \the [src] could dispense reagents into \the [RC]." + return + + container = RC + user.drop_from_inventory(RC) + RC.loc = src + user << "You set \the [RC] on \the [src]." + nanomanager.update_uis(src) // update all UIs attached to src + + else + return ..() + +/obj/machinery/chemical_dispenser/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null, var/force_open = 1) + if(stat & (BROKEN|NOPOWER)) return + if(user.stat || user.restrained()) return + + // this is the data which will be sent to the ui + var/data[0] + data["amount"] = amount + data["isBeakerLoaded"] = container ? 1 : 0 + data["glass"] = accept_drinking + var beakerD[0] + if(container && container.reagents && container.reagents.reagent_list.len) + for(var/datum/reagent/R in container.reagents.reagent_list) + beakerD[++beakerD.len] = list("name" = R.name, "volume" = R.volume) + data["beakerContents"] = beakerD + + if(container) + data["beakerCurrentVolume"] = container.reagents.total_volume + data["beakerMaxVolume"] = container.reagents.maximum_volume + else + data["beakerCurrentVolume"] = null + data["beakerMaxVolume"] = null + + var chemicals[0] + for(var/label in cartridges) + var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = cartridges[label] + chemicals[++chemicals.len] = list("label" = label, "amount" = C.reagents.total_volume) + data["chemicals"] = chemicals + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "chem_disp.tmpl", ui_title, 390, 680) + ui.set_initial_data(data) + ui.open() + +/obj/machinery/chemical_dispenser/Topic(href, href_list) + if(stat & (NOPOWER|BROKEN)) + return 0 // don't update UIs attached to this object + + if(href_list["amount"]) + amount = round(text2num(href_list["amount"]), 1) // round to nearest 1 + amount = max(0, min(120, amount)) // Since the user can actually type the commands himself, some sanity checking + + else if(href_list["dispense"]) + var/label = href_list["dispense"] + if(cartridges[label] && container && container.is_open_container()) + var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = cartridges[label] + C.reagents.trans_to(container, amount) + + else if(href_list["ejectBeaker"]) + if(container) + var/obj/item/weapon/reagent_containers/B = container + B.loc = loc + container = null + + add_fingerprint(usr) + return 1 // update UIs attached to this object + +/obj/machinery/chemical_dispenser/attack_ai(mob/user as mob) + src.attack_hand(user) + +/obj/machinery/chemical_dispenser/attack_hand(mob/user as mob) + if(stat & BROKEN) + return + ui_interact(user) \ No newline at end of file