Advertisement
EditorRUS

secure_closets.dm

Nov 8th, 2013
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.12 KB | None | 0 0
  1. /obj/structure/closet/secure_closet
  2. name = "secure locker"
  3. desc = "It's an immobile card-locked storage unit."
  4. icon = 'icons/obj/closet.dmi'
  5. icon_state = "secure1"
  6. density = 1
  7. opened = 0
  8. var/locked = 1
  9. var/broken = 0
  10. var/large = 1
  11. icon_closed = "secure"
  12. var/icon_locked = "secure1"
  13. icon_opened = "secureopen"
  14. var/icon_broken = "securebroken"
  15. var/icon_off = "secureoff"
  16. wall_mounted = 0 //never solid (You can always pass over it)
  17. health = 200
  18.  
  19. /obj/structure/closet/secure_closet/can_open()
  20. ..()
  21. if(src.locked)
  22. return 0
  23. return 1
  24.  
  25. /obj/structure/closet/secure_closet/close()
  26. ..()
  27. if(broken)
  28. icon_state = src.icon_off
  29. return 1
  30.  
  31. /obj/structure/closet/secure_closet/emp_act(severity)
  32. for(var/obj/O in src)
  33. O.emp_act(severity)
  34. if(!broken)
  35. if(prob(50/severity))
  36. src.locked = !src.locked
  37. src.update_icon()
  38. if(prob(20/severity) && !opened)
  39. if(!locked)
  40. open()
  41. else
  42. src.req_access = list()
  43. src.req_access += pick(get_all_accesses())
  44. ..()
  45.  
  46. /obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob)
  47. if(src.allowed(user))
  48. src.locked = !src.locked
  49. for(var/mob/O in viewers(user, 3))
  50. if((O.client && !( O.blinded )))
  51. O << "<span class='notice'>The locker has been [locked ? null : "un"]locked by [user].</span>"
  52. if(src.locked)
  53. src.icon_state = src.icon_locked
  54. else
  55. src.icon_state = src.icon_closed
  56. else
  57. user << "<span class='notice'>Access Denied</span>"
  58.  
  59. /obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
  60. if(issilicon(user))
  61. return
  62. if(src.opened)
  63. if(istype(W, /obj/item/weapon/grab))
  64. if(src.large)
  65. src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
  66. else
  67. user << "<span class='notice'>The locker is too small to stuff [W] into!</span>"
  68. user.drop_item()
  69. if(W)
  70. W.loc = src.loc
  71. else if(src.broken)
  72. user << "<span class='notice'>The locker appears to be broken.</span>"
  73. return
  74. else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken)
  75. broken = 1
  76. locked = 0
  77. desc = "It appears to be broken."
  78. icon_state = icon_off
  79. flick(icon_broken, src)
  80. if(istype(W, /obj/item/weapon/melee/energy/blade))
  81. var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
  82. spark_system.set_up(5, 0, src.loc)
  83. spark_system.start()
  84. playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
  85. playsound(src.loc, "sparks", 50, 1)
  86. for(var/mob/O in viewers(user, 3))
  87. O.show_message("<span class='warning'>The locker has been sliced open by [user] with an energy blade!</span>", 1, "You hear metal being sliced and sparks flying.", 2)
  88. else
  89. for(var/mob/O in viewers(user, 3))
  90. O.show_message("<span class='warning'>The locker has been broken by [user] with an electromagnetic card!</span>", 1, "You hear a faint electrical spark.", 2)
  91. else
  92. if(istype(W, /obj/item/weapon/weldingtool))
  93. var/obj/item/weapon/weldingtool/WT = W
  94. if(!WT.remove_fuel(0,user))
  95. user << "<span class='notice'>You need more welding fuel to complete this task.</span>"
  96. return
  97. src.welded =! src.welded
  98. src.update_icon()
  99. for(var/mob/M in viewers(src))
  100. M.show_message("<span class='warning'>[src] has been [welded?"welded shut":"unwelded"] by [user.name].</span>", 3, "You hear welding.", 2)
  101. else
  102. togglelock(user)
  103.  
  104. /obj/structure/closet/secure_closet/relaymove(mob/user as mob)
  105. if(user.stat || !isturf(src.loc))
  106. return
  107.  
  108. if(!(src.locked))
  109. for(var/obj/item/I in src)
  110. I.loc = src.loc
  111. for(var/mob/M in src)
  112. M.loc = src.loc
  113. if(M.client)
  114. M.client.eye = M.client.mob
  115. M.client.perspective = MOB_PERSPECTIVE
  116. src.icon_state = src.icon_opened
  117. src.opened = 1
  118. else
  119. user << "<span class='notice'>The locker is locked!</span>"
  120. if(world.time > lastbang+5)
  121. lastbang = world.time
  122. for(var/mob/M in hearers(src, null))
  123. M << "<FONT size=[max(0, 5 - get_dist(src, M))]>BANG, bang!</FONT>"
  124. return
  125.  
  126. /obj/structure/closet/secure_closet/attack_hand(mob/user as mob)
  127. src.add_fingerprint(user)
  128.  
  129. if(!src.toggle())
  130. return src.attackby(null, user)
  131.  
  132. /obj/structure/closet/secure_closet/attack_paw(mob/user as mob)
  133. return src.attack_hand(user)
  134.  
  135. /obj/structure/closet/secure_closet/verb/verb_togglelock()
  136. set src in oview(1) // One square distance
  137. set category = "Object"
  138. set name = "Toggle Lock"
  139.  
  140. if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain
  141. return
  142.  
  143. if(get_dist(usr, src) != 1)
  144. return
  145.  
  146. if(src.broken)
  147. return
  148.  
  149. if (ishuman(usr))
  150. if (!opened)
  151. togglelock(usr)
  152. else
  153. usr << "<span class='warning'>This mob type can't use this verb.</span>"
  154.  
  155. /obj/structure/closet/secure_closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
  156. overlays.Cut()
  157. if(!opened)
  158. if(locked)
  159. icon_state = icon_locked
  160. else
  161. icon_state = icon_closed
  162. if(welded)
  163. overlays += "welded"
  164. else
  165. icon_state = icon_opened
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement