[READY]Refactors reagent container types
This commit is contained in:
committed by
CitadelStationBot
parent
d5708c981a
commit
522b8383d8
@@ -59,6 +59,19 @@
|
||||
if(my_atom && my_atom.reagents == src)
|
||||
my_atom.reagents = null
|
||||
|
||||
|
||||
// Used in attack logs for reagents in pills and such
|
||||
/datum/reagents/proc/log_list()
|
||||
if(!length(reagent_list))
|
||||
return "no reagents"
|
||||
|
||||
var/list/data = list()
|
||||
for(var/r in reagent_list) //no reagents will be left behind
|
||||
var/datum/reagent/R = r
|
||||
data += "[R.id] ([round(R.volume, 0.1)]u)"
|
||||
//Using IDs because SOME chemicals (I'm looking at you, chlorhydrate-beer) have the same names as other chemicals.
|
||||
return english_list(data)
|
||||
|
||||
/datum/reagents/proc/remove_any(amount = 1)
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/total_transfered = 0
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
if(default_unfasten_wrench(user, I))
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1))
|
||||
if(istype(I, /obj/item/reagent_containers) && I.is_open_container())
|
||||
var/obj/item/reagent_containers/B = I
|
||||
. = 1 //no afterattack
|
||||
if(beaker)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1))
|
||||
if(istype(I, /obj/item/reagent_containers) && I.is_open_container())
|
||||
. = 1 //no afterattack
|
||||
if(beaker)
|
||||
to_chat(user, "<span class='warning'>A container is already loaded into [src]!</span>")
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
if(default_unfasten_wrench(user, I))
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1))
|
||||
if(istype(I, /obj/item/reagent_containers) && I.is_open_container())
|
||||
. = 1 // no afterattack
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='warning'>You can't use the [src.name] while its panel is opened!</span>")
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
|
||||
|
||||
/obj/machinery/computer/pandemic/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1))
|
||||
if(istype(I, /obj/item/reagent_containers) && I.is_open_container())
|
||||
. = TRUE //no afterattack
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
if(default_unfasten_wrench(user, I))
|
||||
return
|
||||
|
||||
if (istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1) )
|
||||
if (istype(I, /obj/item/reagent_containers) && I.is_open_container())
|
||||
if (!beaker)
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
to_chat(user, "<span class='warning'>[I] is stuck to your hand!</span>")
|
||||
|
||||
@@ -48,15 +48,6 @@
|
||||
/obj/item/reagent_containers/afterattack(obj/target, mob/user , flag)
|
||||
return
|
||||
|
||||
/obj/item/reagent_containers/proc/reagentlist(obj/item/reagent_containers/snack) //Attack logs for regents in pills
|
||||
var/data
|
||||
if(snack.reagents.reagent_list && snack.reagents.reagent_list.len) //find a reagent list if there is and check if it has entries
|
||||
for (var/datum/reagent/R in snack.reagents.reagent_list) //no reagents will be left behind
|
||||
data += "[R.id]([R.volume] units); " //Using IDs because SOME chemicals(I'm looking at you, chlorhydrate-beer) have the same names as other chemicals.
|
||||
return data
|
||||
else
|
||||
return "No reagents"
|
||||
|
||||
/obj/item/reagent_containers/proc/canconsume(mob/eater, mob/user)
|
||||
if(!iscarbon(eater))
|
||||
return 0
|
||||
@@ -127,7 +118,11 @@
|
||||
reagents.clear_reagents()
|
||||
|
||||
/obj/item/reagent_containers/microwave_act(obj/machinery/microwave/M)
|
||||
<<<<<<< HEAD
|
||||
if(is_open_container())
|
||||
reagents.chem_temp = max(reagents.chem_temp, 1000)
|
||||
reagents.handle_reactions()
|
||||
=======
|
||||
reagents.expose_temperature(1000)
|
||||
>>>>>>> 40699a8... [READY]Refactors reagent container types (#33470)
|
||||
..()
|
||||
|
||||
@@ -173,7 +173,7 @@ Borg Shaker
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
else if(target.is_open_container() && target.reagents)
|
||||
else if(target.is_refillable())
|
||||
var/datum/reagents/R = reagent_list[mode]
|
||||
if(!R.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is currently out of this ingredient! Please allow some time for the synthesizer to produce more.</span>")
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
amount_per_transfer_from_this = 5
|
||||
possible_transfer_amounts = list(1, 2, 3, 4, 5)
|
||||
volume = 5
|
||||
container_type = TRANSPARENT_1
|
||||
container_type = TRANSPARENT
|
||||
|
||||
/obj/item/reagent_containers/dropper/afterattack(obj/target, mob/user , proximity)
|
||||
if(!proximity)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
|
||||
volume = 50
|
||||
container_type = OPENCONTAINER_1
|
||||
container_type = OPENCONTAINER
|
||||
spillable = TRUE
|
||||
resistance_flags = ACID_PROOF
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
if(!reagents || !reagents.total_volume)
|
||||
return // The drink might be empty after the delay, such as by spam-feeding
|
||||
M.visible_message("<span class='danger'>[user] feeds something to [M].</span>", "<span class='userdanger'>[user] feeds something to you.</span>")
|
||||
add_logs(user, M, "fed", reagentlist(src))
|
||||
add_logs(user, M, "fed", reagents.log_list())
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You swallow a gulp of [src].</span>")
|
||||
var/fraction = min(5/reagents.total_volume, 1)
|
||||
@@ -56,32 +56,30 @@
|
||||
if((!proximity) || !check_allowed_items(target,target_self=1))
|
||||
return
|
||||
|
||||
else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
|
||||
|
||||
if(target.reagents && !target.reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[target] is empty and can't be refilled!</span>")
|
||||
return
|
||||
|
||||
if(reagents.total_volume >= reagents.maximum_volume)
|
||||
to_chat(user, "<span class='notice'>[src] is full.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You fill [src] with [trans] unit\s of the contents of [target].</span>")
|
||||
|
||||
else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
|
||||
if(target.is_refillable()) //Something like a glass. Player probably wants to transfer TO it.
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return
|
||||
|
||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
if(target.reagents.holder_full())
|
||||
to_chat(user, "<span class='warning'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
|
||||
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You transfer [trans] unit\s of the solution to [target].</span>")
|
||||
|
||||
else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us.
|
||||
if(!target.reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[target] is empty and can't be refilled!</span>")
|
||||
return
|
||||
|
||||
if(reagents.holder_full())
|
||||
to_chat(user, "<span class='warning'>[src] is full.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You fill [src] with [trans] unit\s of the contents of [target].</span>")
|
||||
|
||||
else if(reagents.total_volume)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
user.visible_message("<span class='danger'>[user] splashes the contents of [src] onto [target]!</span>", \
|
||||
@@ -169,7 +167,6 @@
|
||||
volume = 100
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(5,10,15,20,25,30,50,100)
|
||||
flags_1 = OPENCONTAINER_1
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/noreact
|
||||
name = "cryostasis beaker"
|
||||
@@ -179,7 +176,6 @@
|
||||
materials = list(MAT_METAL=3000)
|
||||
volume = 50
|
||||
amount_per_transfer_from_this = 10
|
||||
flags_1 = OPENCONTAINER_1
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/noreact/Initialize()
|
||||
. = ..()
|
||||
@@ -195,7 +191,6 @@
|
||||
volume = 300
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300)
|
||||
flags_1 = OPENCONTAINER_1
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/cryoxadone
|
||||
list_reagents = list("cryoxadone" = 30)
|
||||
@@ -238,7 +233,6 @@
|
||||
amount_per_transfer_from_this = 20
|
||||
possible_transfer_amounts = list(10,15,20,25,30,50,70)
|
||||
volume = 70
|
||||
flags_1 = OPENCONTAINER_1
|
||||
flags_inv = HIDEHAIR
|
||||
slot_flags = SLOT_HEAD
|
||||
resistance_flags = NONE
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
volume = 30
|
||||
possible_transfer_amounts = list()
|
||||
resistance_flags = ACID_PROOF
|
||||
container_type = OPENCONTAINER_1
|
||||
container_type = OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
var/ignore_flags = 0
|
||||
var/infinite = FALSE
|
||||
@@ -88,7 +88,7 @@
|
||||
amount_per_transfer_from_this = 10
|
||||
volume = 10
|
||||
ignore_flags = 1 //so you can medipen through hardsuits
|
||||
container_type = DRAWABLE_1
|
||||
container_type = DRAWABLE
|
||||
flags_1 = null
|
||||
list_reagents = list("epinephrine" = 10)
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
"<span class='userdanger'>[user] forces [M] to [apply_method] [src].</span>")
|
||||
|
||||
|
||||
add_logs(user, M, "fed", reagentlist(src))
|
||||
add_logs(user, M, "fed", reagents.log_list())
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, apply_type)
|
||||
reagents.trans_to(M, reagents.total_volume)
|
||||
@@ -57,10 +57,15 @@
|
||||
/obj/item/reagent_containers/pill/afterattack(obj/target, mob/user , proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(target.is_open_container() != 0 && target.reagents)
|
||||
if(!target.reagents.total_volume)
|
||||
if(target.is_refillable())
|
||||
if(target.is_drainable() && !target.reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[target] is empty! There's nothing to dissolve [src] in.</span>")
|
||||
return
|
||||
|
||||
if(target.reagents.holder_full())
|
||||
to_chat(user, "<span class='warning'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You dissolve [src] in [target].</span>")
|
||||
for(var/mob/O in viewers(2, user)) //viewers is necessary here because of the small radius
|
||||
to_chat(O, "<span class='warning'>[user] slips something into [target]!</span>")
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
|
||||
flags_1 = NOBLUDGEON_1
|
||||
container_type = OPENCONTAINER_1
|
||||
container_type = OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -23,17 +23,17 @@
|
||||
possible_transfer_amounts = list(5,10,15,20,25,30,50,100)
|
||||
|
||||
|
||||
/obj/item/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user)
|
||||
/obj/item/reagent_containers/spray/afterattack(atom/A, mob/user)
|
||||
if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics))
|
||||
return
|
||||
|
||||
if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution
|
||||
if(!A.reagents.total_volume && A.reagents)
|
||||
to_chat(user, "<span class='notice'>\The [A] is empty.</span>")
|
||||
if((A.is_drainable() && !A.is_refillable()) && get_dist(src,A) <= 1)
|
||||
if(!A.reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[A] is empty.</span>")
|
||||
return
|
||||
|
||||
if(reagents.total_volume >= reagents.maximum_volume)
|
||||
to_chat(user, "<span class='notice'>\The [src] is full.</span>")
|
||||
if(reagents.holder_full())
|
||||
to_chat(user, "<span class='warning'>[src] is full.</span>")
|
||||
return
|
||||
|
||||
var/trans = A.reagents.trans_to(src, 50) //transfer 50u , using the spray's transfer amount would take too long to refill
|
||||
@@ -41,7 +41,7 @@
|
||||
return
|
||||
|
||||
if(reagents.total_volume < amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='warning'>\The [src] is empty!</span>")
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return
|
||||
|
||||
spray(A)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/busy = FALSE // needed for delayed drawing of blood
|
||||
var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun
|
||||
materials = list(MAT_METAL=10, MAT_GLASS=20)
|
||||
container_type = TRANSPARENT_1
|
||||
container_type = TRANSPARENT
|
||||
|
||||
/obj/item/reagent_containers/syringe/Initialize()
|
||||
. = ..()
|
||||
@@ -107,11 +107,8 @@
|
||||
update_icon()
|
||||
|
||||
if(SYRINGE_INJECT)
|
||||
//Always log attemped injections for admins
|
||||
var/list/rinject = list()
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
rinject += R.name
|
||||
var/contained = english_list(rinject)
|
||||
// Always log attemped injections for admins
|
||||
var/contained = reagents.log_list()
|
||||
add_logs(user, L, "attemped to inject", src, addition="which had [contained]")
|
||||
|
||||
if(!reagents.total_volume)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "water"
|
||||
density = TRUE
|
||||
anchored = FALSE
|
||||
container_type = DRAWABLE_1
|
||||
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
|
||||
@@ -18,7 +18,7 @@
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/reagent_containers))
|
||||
if(W.is_refillable())
|
||||
return 0 //so we can refill them via their afterattack.
|
||||
else
|
||||
return ..()
|
||||
@@ -28,14 +28,6 @@
|
||||
reagents.add_reagent(reagent_id, tank_volume)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/reagent_dispensers/examine(mob/user)
|
||||
..()
|
||||
if(reagents.total_volume)
|
||||
to_chat(user, "<span class='notice'>It has [reagents.total_volume] unit\s left.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='danger'>It's empty.</span>")
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/proc/boom()
|
||||
visible_message("<span class='danger'>\The [src] ruptures!</span>")
|
||||
chem_splash(loc, 5, list(reagents))
|
||||
|
||||
Reference in New Issue
Block a user