/obj/rack
name = "rack"
icon = 'icons/obj/objects.dmi'
icon_state = "rack"
density = 1
flags = FPRINT | NOSPLASH
anchored = 1.0
desc = "A metal frame used to hold objects. Can be wrenched and made portable."
event_handler_flags = USE_FLUID_ENTER | USE_CANPASS
/obj/rack/New()
..()
var/bonus = 0
for (var/obj/O in loc)
if (isitem(O))
bonus += 4
if (istype(O, /obj/table))
return
if (istype(O, /obj/rack) && O != src)
return
var/area/Ar = get_area(src)
if (Ar)
Ar.sims_score = min(Ar.sims_score + bonus, 100)
/obj/rack/ex_act(severity)
switch(severity)
if(1.0)
//src.deconstruct()
qdel(src)
return
if(2.0)
if (prob(50))
src.deconstruct()
return
if(3.0)
if (prob(25))
src.icon_state = "rackbroken"
src.set_density(0)
else
return
/obj/rack/blob_act(var/power)
if(prob(power * 2.5))
src.deconstruct()
return
else if(prob(power * 2.5))
src.icon_state = "rackbroken"
src.set_density(0)
return
/obj/rack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if (mover.flags & TABLEPASS)
return 1
else
return 0
/obj/rack/MouseDrop_T(obj/O as obj, mob/user as mob)
if (!isitem(O) || !in_range(user, src) || !in_range(user, O) || user.restrained() || user.getStatusDuration("paralysis") || user.sleeping || user.stat || user.lying)
return
var/obj/item/I = O
if (istype(I,/obj/item/satchel))
var/obj/item/satchel/S = I
if (S.contents.len < 1)
boutput(usr, "There's nothing in [S]!")
else
user.visible_message("[user] dumps out [S]'s contents onto [src]!")
for (var/obj/item/thing in S.contents)
thing.set_loc(src.loc)
S.desc = "A leather bag. It holds 0/[S.maxitems] [S.itemstring]."
S.satchel_updateicon()
return
if (isrobot(user) || user.equipped() != I || (I.cant_drop || I.cant_self_remove))
return
user.drop_item()
if (I.loc != src.loc)
step(I, get_dir(I, src))
return
/obj/rack/dispose()
var/turf/OL = get_turf(src)
loc = null
if (!OL)
return
if (!(locate(/obj/table) in OL) && !(locate(/obj/rack) in OL))
var/area/Ar = OL.loc
for (var/obj/item/I in OL)
Ar.sims_score -= 4
Ar.sims_score = max(Ar.sims_score, 0)
..()
/obj/rack/attackby(obj/item/W as obj, mob/user as mob)
if (iswrenchingtool(W))
actions.start(new /datum/action/bar/icon/rack_tool_interact(src, W), user)
else
src.place_on(W, user)
return
/obj/rack/proc/deconstruct()
var/obj/item/furniture_parts/P = new /obj/item/furniture_parts/rack(src.loc)
if (P && src.material)
P.setMaterial(src.material)
qdel(src)
/obj/rack/meteorhit(obj/O as obj)
if(prob(75))
qdel(src)
return
else
src.icon_state = "rackbroken"
src.set_density(0)
return
/datum/action/bar/icon/rack_tool_interact
id = "rack_tool_interact"
interrupt_flags = INTERRUPT_MOVE | INTERRUPT_ACT | INTERRUPT_STUNNED | INTERRUPT_ACTION
duration = 50
icon = 'icons/ui/actions.dmi'
icon_state = "working"
var/obj/rack/the_rack
var/obj/item/the_tool
New(var/obj/rack/rak, var/obj/item/tool, var/duration_i)
..()
if (rak)
the_rack = rak
if (tool)
the_tool = tool
icon = the_tool.icon
icon_state = the_tool.icon_state
if (duration_i)
duration = duration_i
if (ishuman(owner))
var/mob/living/carbon/human/H = owner
if (H.traitHolder.hasTrait("carpenter"))
duration = round(duration / 2)
onUpdate()
..()
if (the_rack == null || the_tool == null || owner == null || get_dist(owner, the_rack) > 1)
interrupt(INTERRUPT_ALWAYS)
return
var/mob/source = owner
if (istype(source) && the_tool != source.equipped())
interrupt(INTERRUPT_ALWAYS)
onStart()
..()
playsound(get_turf(the_rack), "sound/items/Ratchet.ogg", 50, 1)
owner.visible_message("[owner] begins disassembling [the_rack].")
onEnd()
..()
playsound(get_turf(the_rack), "sound/items/Deconstruct.ogg", 50, 1)
owner.visible_message("[owner] disassembles [the_rack].")
the_rack.deconstruct()