/obj/structure/reagent_dispensers name = "Dispenser" desc = "..." icon = 'icons/obj/objects.dmi' icon_state = "water" density = TRUE anchored = FALSE container_type = DRAINABLE | AMOUNT_VISIBLE pressure_resistance = 2*ONE_ATMOSPHERE max_integrity = 300 var/tank_volume = 1000 //In units, how much the dispenser can hold var/reagent_id = "water" //The ID of the reagent that the dispenser uses /obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() if(. && obj_integrity > 0) if(tank_volume && (damage_flag == "bullet" || damage_flag == "laser")) boom() /obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params) if(W.is_refillable()) return 0 //so we can refill them via their afterattack. else return ..() /obj/structure/reagent_dispensers/Initialize() create_reagents(tank_volume) reagents.add_reagent(reagent_id, tank_volume) . = ..() /obj/structure/reagent_dispensers/proc/boom() visible_message("\The [src] ruptures!") chem_splash(loc, 5, list(reagents)) qdel(src) /obj/structure/reagent_dispensers/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) if(!disassembled) boom() else qdel(src) /obj/structure/reagent_dispensers/watertank name = "water tank" desc = "A water tank." icon_state = "water" /obj/structure/reagent_dispensers/watertank/high name = "high-capacity water tank" desc = "A highly pressurized water tank made to hold gargantuan amounts of water." icon_state = "water_high" //I was gonna clean my room... tank_volume = 100000 /obj/structure/reagent_dispensers/foamtank name = "firefighting foam tank" desc = "A tank full of firefighting foam." icon_state = "foam" reagent_id = "firefighting_foam" tank_volume = 500 /obj/structure/reagent_dispensers/fueltank name = "fuel tank" desc = "A tank full of industrial welding fuel. Do not consume." icon_state = "fuel" reagent_id = "welding_fuel" /obj/structure/reagent_dispensers/fueltank/boom() explosion(get_turf(src), 0, 1, 5, flame_range = 5) qdel(src) /obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B) boom() /obj/structure/reagent_dispensers/fueltank/ex_act() boom() /obj/structure/reagent_dispensers/fueltank/fire_act(exposed_temperature, exposed_volume) boom() /obj/structure/reagent_dispensers/fueltank/tesla_act() ..() //extend the zap boom() /obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/P) ..() if(!QDELETED(src)) //wasn't deleted by the projectile's effects. if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE))) var/boom_message = "[ADMIN_LOOKUPFLW(P.firer)] triggered a fueltank explosion via projectile." GLOB.bombers += boom_message message_admins(boom_message) P.firer.log_message("triggered a fueltank explosion via projectile.", LOG_ATTACK) boom() /obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/weldingtool)) if(!reagents.has_reagent("welding_fuel")) to_chat(user, "[src] is out of fuel!") return var/obj/item/weldingtool/W = I if(!W.welding) if(W.reagents.has_reagent("welding_fuel", W.max_fuel)) to_chat(user, "Your [W.name] is already full!") return reagents.trans_to(W, W.max_fuel) user.visible_message("[user] refills [user.p_their()] [W.name].", "You refill [W].") playsound(src, 'sound/effects/refill.ogg', 50, 1) W.update_icon() else var/turf/T = get_turf(src) user.visible_message("[user] catastrophically fails at refilling [user.p_their()] [W.name]!", "That was stupid of you.") var/message_admins = "[ADMIN_LOOKUPFLW(user)] triggered a fueltank explosion via welding tool at [ADMIN_VERBOSEJMP(T)]." GLOB.bombers += message_admins message_admins(message_admins) user.log_message("triggered a fueltank explosion via welding tool.", LOG_ATTACK) boom() return return ..() /obj/structure/reagent_dispensers/peppertank name = "pepper spray refiller" desc = "Contains condensed capsaicin for use in law \"enforcement.\"" icon_state = "pepper" anchored = TRUE density = FALSE reagent_id = "condensedcapsaicin" /obj/structure/reagent_dispensers/peppertank/Initialize() . = ..() if(prob(1)) desc = "IT'S PEPPER TIME, BITCH!" /obj/structure/reagent_dispensers/water_cooler name = "liquid cooler" desc = "A machine that dispenses liquid to drink." icon = 'icons/obj/vending.dmi' icon_state = "water_cooler" anchored = TRUE tank_volume = 500 var/paper_cups = 25 //Paper cups left from the cooler /obj/structure/reagent_dispensers/water_cooler/examine(mob/user) ..() if (paper_cups > 1) to_chat(user, "There are [paper_cups] paper cups left.") else if (paper_cups == 1) to_chat(user, "There is one paper cup left.") else to_chat(user, "There are no paper cups left.") /obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user) . = ..() if(.) return if(!paper_cups) to_chat(user, "There aren't any cups left!") return user.visible_message("[user] takes a cup from [src].", "You take a paper cup from [src].") var/obj/item/reagent_containers/food/drinks/sillycup/S = new(get_turf(src)) user.put_in_hands(S) paper_cups-- /obj/structure/reagent_dispensers/beerkeg name = "beer keg" desc = "Beer is liquid bread, it's good for you..." icon_state = "beer" reagent_id = "beer" /obj/structure/reagent_dispensers/beerkeg/blob_act(obj/structure/blob/B) explosion(src.loc,0,3,5,7,10) if(!QDELETED(src)) qdel(src) /obj/structure/reagent_dispensers/virusfood name = "virus food dispenser" desc = "A dispenser of low-potency virus mutagenic." icon_state = "virus_food" anchored = TRUE density = FALSE reagent_id = "virusfood" /obj/structure/reagent_dispensers/cooking_oil name = "vat of cooking oil" desc = "A huge metal vat with a tap on the front. Filled with cooking oil for use in frying food." icon_state = "vat" anchored = TRUE reagent_id = "cooking_oil"