mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-26 22:42:26 +01:00
Display Case Update (#10993)
You can now open display cases with a captain level ID.
You can now play any item in a display case.
This commit is contained in:
@@ -1,79 +1,116 @@
|
||||
/obj/structure/displaycase
|
||||
name = "display case"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "glassbox1"
|
||||
desc = "A display case for prized possessions. It taunts you to kick it."
|
||||
density = 1
|
||||
anchored = 1
|
||||
unacidable = 1//Dissolving the case would also delete the gun.
|
||||
icon = 'icons/obj/display_case.dmi'
|
||||
icon_state = "glassbox"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
unacidable = TRUE
|
||||
req_access = list(access_captain)
|
||||
var/health = 30
|
||||
var/occupied = 1
|
||||
var/destroyed = 0
|
||||
var/obj/held_obj
|
||||
var/open = FALSE
|
||||
var/destroyed = FALSE
|
||||
var/spawn_contained_type
|
||||
|
||||
/obj/structure/displaycase/Initialize(mapload)
|
||||
. = ..()
|
||||
if(spawn_contained_type)
|
||||
var/obj/O = new spawn_contained_type(src)
|
||||
held_obj = O
|
||||
update_icon()
|
||||
|
||||
/obj/structure/displaycase/ex_act(severity)
|
||||
switch(severity)
|
||||
if (1)
|
||||
new /obj/item/material/shard( src.loc )
|
||||
if (occupied)
|
||||
new /obj/item/gun/energy/captain( src.loc )
|
||||
occupied = 0
|
||||
qdel(src)
|
||||
do_destroy()
|
||||
if (2)
|
||||
if (prob(50))
|
||||
src.health -= 15
|
||||
src.healthcheck()
|
||||
if(prob(50))
|
||||
health -= 15
|
||||
health_check()
|
||||
if (3)
|
||||
if (prob(50))
|
||||
src.health -= 5
|
||||
src.healthcheck()
|
||||
if(prob(50))
|
||||
health -= 5
|
||||
health_check()
|
||||
|
||||
|
||||
/obj/structure/displaycase/bullet_act(var/obj/item/projectile/Proj)
|
||||
health -= Proj.get_structure_damage()
|
||||
..()
|
||||
src.healthcheck()
|
||||
return
|
||||
health_check()
|
||||
|
||||
/obj/structure/displaycase/proc/healthcheck()
|
||||
if (src.health <= 0)
|
||||
if (!( src.destroyed ))
|
||||
src.density = 0
|
||||
src.destroyed = 1
|
||||
new /obj/item/material/shard( src.loc )
|
||||
playsound(src, /decl/sound_category/glass_break_sound, 70, 1)
|
||||
update_icon()
|
||||
/obj/structure/displaycase/proc/health_check()
|
||||
if(health <= 0)
|
||||
do_destroy()
|
||||
else
|
||||
playsound(src.loc, 'sound/effects/glass_hit.ogg', 75, 1)
|
||||
return
|
||||
playsound(loc, 'sound/effects/glass_hit.ogg', 75, 1)
|
||||
|
||||
/obj/structure/displaycase/proc/do_destroy()
|
||||
if(!destroyed)
|
||||
density = FALSE
|
||||
destroyed = TRUE
|
||||
new /obj/item/material/shard(loc)
|
||||
playsound(src, /decl/sound_category/glass_break_sound, 70, 1)
|
||||
update_icon()
|
||||
|
||||
/obj/structure/displaycase/update_icon()
|
||||
if(src.destroyed)
|
||||
src.icon_state = "glassboxb[src.occupied]"
|
||||
underlays = list()
|
||||
if(destroyed)
|
||||
icon_state = "glassbox-broken"
|
||||
else if(open)
|
||||
icon_state = "glassbox-open"
|
||||
else
|
||||
src.icon_state = "glassbox[src.occupied]"
|
||||
return
|
||||
icon_state = "glassbox"
|
||||
if(held_obj)
|
||||
var/image/I = image(held_obj.icon, src, held_obj.icon_state)
|
||||
underlays += I
|
||||
|
||||
|
||||
/obj/structure/displaycase/attackby(obj/item/W as obj, mob/user as mob)
|
||||
/obj/structure/displaycase/attackby(obj/item/W, mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
src.health -= W.force
|
||||
src.healthcheck()
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/displaycase/attack_hand(mob/user as mob)
|
||||
if (src.destroyed && src.occupied)
|
||||
new /obj/item/gun/energy/captain( src.loc )
|
||||
to_chat(user, "<span class='notice'>You deactivate the hover field built into the case.</span>")
|
||||
src.occupied = 0
|
||||
src.add_fingerprint(user)
|
||||
if(istype(W, /obj/item/card/id))
|
||||
if(destroyed)
|
||||
to_chat(user, SPAN_WARNING("\The [src] has been destroyed and cannot be unlocked."))
|
||||
return
|
||||
var/obj/item/card/id/ID = W
|
||||
if(check_access(ID))
|
||||
user.visible_message("<b>[user]</b> presses their ID against \the [src], [open ? "closing" : "opening"] it.", SPAN_NOTICE("You press your ID against \the [src], [open ? "closing" : "opening"] it."))
|
||||
open = !open
|
||||
update_icon()
|
||||
else
|
||||
to_chat(user, SPAN_WARNING("Access denied."))
|
||||
else if(!held_obj && (destroyed || open))
|
||||
to_chat(user, SPAN_NOTICE("You set \the [W] down on \the [src]."))
|
||||
user.drop_from_inventory(W, src)
|
||||
held_obj = W
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
to_chat(usr, text("<span class='warning'>You kick the display case.</span>"))
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
to_chat(O, "<span class='warning'>[usr] kicks the display case.</span>")
|
||||
src.health -= 2
|
||||
healthcheck()
|
||||
return
|
||||
if(destroyed)
|
||||
to_chat(user, SPAN_WARNING("\The [src] has already been destroyed."))
|
||||
return
|
||||
health -= W.force
|
||||
health_check()
|
||||
return ..()
|
||||
|
||||
/obj/structure/displaycase/attack_hand(mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(destroyed || open)
|
||||
if(!held_obj)
|
||||
to_chat(user, SPAN_WARNING("There is nothing held inside \the [src]!"))
|
||||
else
|
||||
user.put_in_hands(held_obj)
|
||||
to_chat(user, SPAN_NOTICE("You take \the [held_obj] out of \the [src]."))
|
||||
held_obj = null
|
||||
update_icon()
|
||||
else
|
||||
if(user.a_intent != I_HURT)
|
||||
if(held_obj)
|
||||
to_chat(user, SPAN_NOTICE("You peer inside \the [src], noticing it has \a [held_obj] inside."))
|
||||
else
|
||||
to_chat(user, SPAN_NOTICE("You peer inside \the [src], noticing it has nothing inside."))
|
||||
else
|
||||
user.visible_message("<b>[user]</b> kicks \the [src].", SPAN_WARNING("You kick \the [src]."))
|
||||
health -= 2
|
||||
health_check()
|
||||
|
||||
/obj/structure/displaycase/captain_laser
|
||||
spawn_contained_type = /obj/item/gun/energy/captain
|
||||
Reference in New Issue
Block a user