/
tank_holder.dm
127 lines (102 loc) · 3.42 KB
/
tank_holder.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
///?
/obj/structure/tank_holder
name = "tank holder"
desc = "A metallic frame that can hold tanks and extinguishers."
icon = 'icons/obj/tank.dmi'
icon_state = "holder"
custom_materials = list(/datum/material/iron = 2000)
density = FALSE
anchored = FALSE
pass_flags_self = LETPASSTHROW
max_integrity = 20
resistance_flags = FIRE_PROOF
/// The stored tank. If this is a path, it gets created into contents at Initialize.
var/obj/item/tank
/obj/structure/tank_holder/Initialize()
. = ..()
if(tank)
var/obj/item/tank_ = new tank(null)
tank = null
SEND_SIGNAL(tank_, COMSIG_CONTAINER_TRY_ATTACH, src, null)
/obj/structure/tank_holder/Destroy()
QDEL_NULL(tank)
return ..()
/obj/structure/tank_holder/CanAllowThrough(atom/movable/mover, turf/target)
. = ..()
if(istype(mover) && mover.throwing)
return TRUE
/obj/structure/tank_holder/examine(mob/user)
. = ..()
. += "<span class='notice'>It is held together by some <b>screws</b>.</span>"
/obj/structure/tank_holder/attackby(obj/item/W, mob/living/user, params)
if(user.combat_mode)
return ..()
if(!SEND_SIGNAL(W, COMSIG_CONTAINER_TRY_ATTACH, src, user))
to_chat(user, "<span class='warning'>[W] does not fit in [src].</span>")
/obj/structure/tank_holder/screwdriver_act(mob/living/user, obj/item/I)
if(..())
return TRUE
if(tank)
return FALSE
I.play_tool_sound(src)
deconstruct(TRUE)
return TRUE
/obj/structure/tank_holder/deconstruct(disassembled = TRUE)
var/atom/Tsec = drop_location()
new /obj/item/stack/rods(Tsec, 2)
if(tank)
tank.forceMove(Tsec)
after_detach_tank()
qdel(src)
/obj/structure/tank_holder/attack_paw(mob/user, list/modifiers)
return attack_hand(user, modifiers)
/obj/structure/tank_holder/attack_hand(mob/user, list/modifiers)
if(!tank)
return ..()
if(!Adjacent(user) || issilicon(user))
return ..()
to_chat(user, "<span class='notice'>You take [tank] from [src].</span>")
add_fingerprint(user)
tank.add_fingerprint(user)
user.put_in_hands(tank)
after_detach_tank()
/obj/structure/tank_holder/handle_atom_del(atom/A)
if(A == tank)
after_detach_tank()
return ..()
/obj/structure/tank_holder/contents_explosion(severity, target)
if(tank)
tank.ex_act(severity, target)
/// Call this after taking the tank from contents in order to update references, icon
/// and density.
/obj/structure/tank_holder/proc/after_detach_tank()
tank = null
density = FALSE
icon_state = "holder"
/obj/structure/tank_holder/oxygen
icon_state = "holder_oxygen"
tank = /obj/item/tank/internals/oxygen
/obj/structure/tank_holder/anesthetic
icon_state = "holder_anesthetic"
tank = /obj/item/tank/internals/anesthetic
/obj/structure/tank_holder/oxygen/yellow
icon_state = "holder_oxygen_f"
tank = /obj/item/tank/internals/oxygen/yellow
/obj/structure/tank_holder/oxygen/red
icon_state = "holder_oxygen_fr"
tank = /obj/item/tank/internals/oxygen/red
/obj/structure/tank_holder/emergency_oxygen
icon_state = "holder_emergency"
tank = /obj/item/tank/internals/emergency_oxygen
/obj/structure/tank_holder/emergency_oxygen/engi
icon_state = "holder_emergency_engi"
tank = /obj/item/tank/internals/emergency_oxygen/engi
/obj/structure/tank_holder/generic
icon_state = "holder_generic"
tank = /obj/item/tank/internals/generic
/obj/structure/tank_holder/extinguisher
icon_state = "holder_extinguisher"
tank = /obj/item/extinguisher
/obj/structure/tank_holder/extinguisher/advanced
icon_state = "holder_foam_extinguisher"
tank = /obj/item/extinguisher/advanced