Files
Paradise/code/game/objects/structures/tank_dispenser.dm
T
Vi3trice f4b37b4177 Port TG updating appearances (#17943)
* Get pants that match or else you gonna look silly yo

* Posters

* Fix other hud elements

* Rereviewed

* Update shotglass.dm

* Fix for new merged PRs

* Typo

* Coming across other stuff

* Update theblob.dm

* No takebacksies

* smh i forget to leave a comment

* Updated for the detgun and cards

* Should have rerun langserver again

* No longer plastic, more in scope

* Damn you bluespace

* Reverting turret logic, out of scope at this point

* Tweak that part

* Went over energy guns again, and fixed UI White's sprite sheet

* Welding masks, glasses, and JUSTICE

* Update portable_atmospherics.dm

* Cleaning up, clearing things up

* Review and suggestions

* Update valve.dm

* More tweaks

* Missing character

* Not distinct lightmasks, so they can be overlays

* Update generator.dm

* Add parameter so holodeck doesn't try to make a perfect copy

* Update unsorted.dm

* Spiders

* Better fix for spiders, fix vamps too

* Ghosts

* Update telekinesis.dm

* Cleaning up old procs

* It's set up to not copy datums... Unless they're in a list

* Donuts, duct tape, and detgun. D3VR coming to Early Access

* Update procs that interact with doors so they call update_state instead

* Forgot one spot, and actually might as well just force lock

* Cleaning up other things... Sigh, and kitty ears

* oops

* Getting used to how it works

* blinds

* Going back to the suit obscuring thing, so it doesn't update all the time

* Missed that from merging master

* I made this PR and forgot about it

* Fix runtimes in cards

* Make things a bit more unified

* Update update_icons.dm

* yarn, really?

* Update library_equipment.dm

* Update shieldgen.dm

* Every time Charlie merges something, I go back and see if I can improve things further

* what's this? more?

* Update misc_special.dm

* wow, paper

* Review

* More reviews

* To be sure, seems like being broken messed something sometimes

* Brought airlocks closer to how TG works to iron out some stuff

* Pizza and morgue

* Doesn't seem to hurt, tried with holodeck

* Revert "Doesn't seem to hurt, tried with holodeck"

This reverts commit 158529302b.

* Icon conflict

* Fix organ damage

* Don't ask how. Why. It's like that on prod too.

* Cutting down on things and updating from TG.

* More flexible. Just in case the thing you stuck it on didn't destroy.

* Hydro was one the things I touched earlier on, better rework it

* Reviews

* Cleaning up further, also bri'ish

* Undo a change I did, and switch over to a more recent implementation

* Update biogenerator.dm

* Rolling back to old airlocks, but with new duct taped note

* Functionally the same. I'd just rather not have the smoothing happen there

* Went over APCs again

* Fix welding helmet names in species files

* Update airlock.dm

* Update persistent_overlay.dm

* Oh, topic
2022-07-21 08:11:59 +02:00

149 lines
4.5 KiB
Plaintext

#define MAX_TANK_STORAGE 10
/obj/structure/dispenser
name = "tank storage unit"
desc = "A simple yet bulky storage device for gas tanks. Has room for up to ten oxygen tanks, and ten plasma tanks."
icon = 'icons/obj/objects.dmi'
icon_state = "dispenser"
density = TRUE
anchored = TRUE
var/starting_oxygen_tanks = MAX_TANK_STORAGE // The starting amount of oxygen tanks the dispenser gets when it's spawned
var/starting_plasma_tanks = MAX_TANK_STORAGE // Starting amount of plasma tanks
var/list/stored_oxygen_tanks = list() // List of currently stored oxygen tanks
var/list/stored_plasma_tanks = list() // And plasma tanks
/obj/structure/dispenser/oxygen
starting_plasma_tanks = 0
/obj/structure/dispenser/plasma
starting_oxygen_tanks = 0
/obj/structure/dispenser/Initialize(mapload)
. = ..()
initialize_tanks()
update_icon(UPDATE_OVERLAYS)
/obj/structure/dispenser/Destroy()
QDEL_LIST(stored_plasma_tanks)
QDEL_LIST(stored_oxygen_tanks)
return ..()
/obj/structure/dispenser/proc/initialize_tanks()
for(var/I in 1 to starting_plasma_tanks)
var/obj/item/tank/internals/plasma/P = new(src)
stored_plasma_tanks.Add(P)
for(var/I in 1 to starting_oxygen_tanks)
var/obj/item/tank/internals/oxygen/O = new(src)
stored_oxygen_tanks.Add(O)
/obj/structure/dispenser/update_overlays()
. = ..()
var/oxy_tank_amount = LAZYLEN(stored_oxygen_tanks)
switch(oxy_tank_amount)
if(1 to 3)
. += "oxygen-[oxy_tank_amount]"
if(4 to INFINITY)
. += "oxygen-4"
var/pla_tank_amount = LAZYLEN(stored_plasma_tanks)
switch(pla_tank_amount)
if(1 to 4)
. += "plasma-[pla_tank_amount]"
if(5 to INFINITY)
. += "plasma-5"
/obj/structure/dispenser/attack_hand(mob/user)
if(..())
return 1
add_fingerprint(user)
ui_interact(user)
/obj/structure/dispenser/attack_ghost(mob/user)
ui_interact(user)
/obj/structure/dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "TankDispenser", name, 275, 100, master_ui, state)
ui.open()
/obj/structure/dispenser/ui_data(user)
var/list/data = list()
data["o_tanks"] = LAZYLEN(stored_oxygen_tanks)
data["p_tanks"] = LAZYLEN(stored_plasma_tanks)
return data
/obj/structure/dispenser/ui_act(action, list/params)
if(..())
return
switch(action)
if("oxygen")
try_remove_tank(usr, stored_oxygen_tanks)
if("plasma")
try_remove_tank(usr, stored_plasma_tanks)
add_fingerprint(usr)
return TRUE
/obj/structure/dispenser/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/tank/internals/oxygen) || istype(I, /obj/item/tank/internals/air) || istype(I, /obj/item/tank/internals/anesthetic))
try_insert_tank(user, stored_oxygen_tanks, I)
return
if(istype(I, /obj/item/tank/internals/plasma))
try_insert_tank(user, stored_plasma_tanks, I)
return
if(istype(I, /obj/item/wrench))
if(anchored)
to_chat(user, "<span class='notice'>You lean down and unwrench [src].</span>")
anchored = FALSE
else
to_chat(user, "<span class='notice'>You wrench [src] into place.</span>")
anchored = TRUE
return
return ..()
/// Called when the user clicks on the oxygen or plasma tank UI buttons, and tries to withdraw a tank.
/obj/structure/dispenser/proc/try_remove_tank(mob/living/user, list/tank_list)
if(!LAZYLEN(tank_list))
return // There are no tanks left to withdraw.
var/obj/item/tank/internals/T = tank_list[1]
tank_list.Remove(T)
if(!user.put_in_hands(T))
T.forceMove(loc) // If the user's hands are full, place it on the tile of the dispenser.
to_chat(user, "<span class='notice'>You take [T] out of [src].</span>")
update_icon(UPDATE_OVERLAYS)
/// Called when the user clicks on the dispenser with a tank. Tries to insert the tank into the dispenser, and updates the UI if successful.
/obj/structure/dispenser/proc/try_insert_tank(mob/living/user, list/tank_list, obj/item/tank/T)
if(LAZYLEN(tank_list) >= MAX_TANK_STORAGE)
to_chat(user, "<span class='warning'>[src] is full.</span>")
return
if(!user.drop_item()) // Antidrop check
to_chat(user, "<span class='warning'>[T] is stuck to your hand!</span>")
return
T.forceMove(src)
tank_list.Add(T)
update_icon(UPDATE_OVERLAYS)
to_chat(user, "<span class='notice'>You put [T] in [src].</span>")
SStgui.update_uis(src)
/obj/structure/tank_dispenser/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
for(var/X in src)
var/obj/item/I = X
I.forceMove(loc)
new /obj/item/stack/sheet/metal(loc, 2)
qdel(src)
#undef MAX_TANK_STORAGE