Additional admin interaction additions

This commit is contained in:
Markolie
2017-02-21 13:26:18 +01:00
parent fb1cef8029
commit 389890bb2d
6 changed files with 141 additions and 120 deletions
@@ -22,7 +22,7 @@
..()
spawn(1)
if(!opened) // if closed, any item at the crate's loc is put in the contents
for(var/obj/item/I in src.loc)
for(var/obj/item/I in loc)
if(I.density || I.anchored || I == src) continue
I.forceMove(src)
@@ -39,7 +39,7 @@
return (!density)
/obj/structure/closet/proc/can_open()
if(src.welded)
if(welded)
return 0
return 1
@@ -59,46 +59,46 @@
throwing = 0
/obj/structure/closet/proc/open()
if(src.opened)
if(opened)
return 0
if(!src.can_open())
if(!can_open())
return 0
src.dump_contents()
dump_contents()
src.icon_state = src.icon_opened
src.opened = 1
icon_state = icon_opened
opened = 1
if(sound)
playsound(src.loc, src.sound, 15, 1, -3)
playsound(loc, sound, 15, 1, -3)
else
playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3)
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
density = 0
return 1
/obj/structure/closet/proc/close()
if(!src.opened)
if(!opened)
return 0
if(!src.can_close())
if(!can_close())
return 0
var/itemcount = 0
//Cham Projector Exception
for(var/obj/effect/dummy/chameleon/AD in src.loc)
for(var/obj/effect/dummy/chameleon/AD in loc)
if(itemcount >= storage_capacity)
break
AD.forceMove(src)
itemcount++
for(var/obj/item/I in src.loc)
for(var/obj/item/I in loc)
if(itemcount >= storage_capacity)
break
if(!I.anchored)
I.forceMove(src)
itemcount++
for(var/mob/M in src.loc)
for(var/mob/M in loc)
if(itemcount >= storage_capacity)
break
if(istype (M, /mob/dead/observer))
@@ -109,37 +109,37 @@
M.forceMove(src)
itemcount++
src.icon_state = src.icon_closed
src.opened = 0
icon_state = icon_closed
opened = 0
if(sound)
playsound(src.loc, src.sound, 15, 1, -3)
playsound(loc, sound, 15, 1, -3)
else
playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3)
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
density = 1
return 1
/obj/structure/closet/proc/toggle(mob/user as mob)
if(!(src.opened ? src.close() : src.open()))
/obj/structure/closet/proc/toggle(mob/user)
if(!(opened ? close() : open()))
to_chat(user, "<span class='notice'>It won't budge!</span>")
// this should probably use dump_contents()
/obj/structure/closet/ex_act(severity)
switch(severity)
if(1)
for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion
A.forceMove(src.loc)
for(var/atom/movable/A in src)//pulls everything out of the locker and hits it with an explosion
A.forceMove(loc)
A.ex_act(severity++)
qdel(src)
if(2)
if(prob(50))
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
A.ex_act(severity++)
new /obj/item/stack/sheet/metal(loc)
qdel(src)
if(3)
if(prob(5))
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
A.ex_act(severity++)
new /obj/item/stack/sheet/metal(loc)
@@ -150,32 +150,32 @@
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
if(health <= 0)
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
qdel(src)
/obj/structure/closet/attack_animal(mob/living/simple_animal/user as mob)
/obj/structure/closet/attack_animal(mob/living/simple_animal/user)
if(user.environment_smash)
user.do_attack_animation(src)
visible_message("\red [user] destroys the [src]. ")
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
qdel(src)
// this should probably use dump_contents()
/obj/structure/closet/blob_act()
if(prob(75))
for(var/atom/movable/A as mob|obj in src)
for(var/atom/movable/A in src)
A.forceMove(loc)
qdel(src)
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/rcs) && !src.opened)
/obj/structure/closet/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/rcs) && !opened)
if(user in contents) //to prevent self-teleporting.
return
var/obj/item/weapon/rcs/E = W
if(E.rcell && (E.rcell.charge >= E.chargecost))
if(!is_level_reachable(src.z))
if(!is_level_reachable(z))
to_chat(user, "<span class='warning'>The rapid-crate-sender can't locate any telepads!</span>")
return
if(E.mode == 0)
@@ -194,7 +194,7 @@
var/desc = input("Please select a telepad.", "RCS") in L
E.pad = L[desc]
playsound(E.loc, 'sound/machines/click.ogg', 50, 1)
to_chat(user, "\blue Teleporting [src.name]...")
to_chat(user, "\blue Teleporting [name]...")
E.teleporting = 1
if(!do_after(user, 50, target = src))
E.teleporting = 0
@@ -216,7 +216,7 @@
E.rand_y = rand(50,200)
var/L = locate(E.rand_x, E.rand_y, 6)
playsound(E.loc, 'sound/machines/click.ogg', 50, 1)
to_chat(user, "\blue Teleporting [src.name]...")
to_chat(user, "\blue Teleporting [name]...")
E.teleporting = 1
if(!do_after(user, 50, target = src))
E.teleporting = 0
@@ -237,9 +237,9 @@
to_chat(user, "<span class='warning'>Out of charges.</span>")
return
if(src.opened)
if(opened)
if(istype(W, /obj/item/weapon/grab))
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
if(istype(W,/obj/item/tk_grab))
return 0
if(istype(W, cutting_tool))
@@ -276,14 +276,14 @@
if(!WT.remove_fuel(0,user))
to_chat(user, "<span class='notice'>You need more welding fuel to complete this task.</span>")
return
src.welded = !src.welded
src.update_icon()
welded = !welded
update_icon()
for(var/mob/M in viewers(src))
M.show_message("<span class='warning'>[src] has been [welded?"welded shut":"unwelded"] by [user.name].</span>", 3, "You hear welding.", 2)
else
src.attack_hand(user)
attack_hand(user)
/obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/user)
..()
if(istype(O, /obj/screen)) //fix for HUD elements making their way into the world -Pete
return
@@ -297,24 +297,24 @@
return
if(!istype(user.loc, /turf)) // are you in a container/closet/pod/etc?
return
if(!src.opened)
if(!opened)
return
if(istype(O, /obj/structure/closet))
return
step_towards(O, src.loc)
step_towards(O, loc)
if(user != O)
user.visible_message("<span class='danger'>[user] stuffs [O] into [src]!</span>", "<span class='danger'>You stuff [O] into [src]!</span>")
src.add_fingerprint(user)
add_fingerprint(user)
/obj/structure/closet/attack_ai(mob/user)
if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) //Robots can open/close it, but not the AI
if(isrobot(user) && Adjacent(user)) //Robots can open/close it, but not the AI
attack_hand(user)
/obj/structure/closet/relaymove(mob/user as mob)
if(user.stat || !isturf(src.loc))
/obj/structure/closet/relaymove(mob/user)
if(user.stat || !isturf(loc))
return
if(!src.open())
if(!open())
to_chat(user, "<span class='notice'>It won't budge!</span>")
if(!lastbang)
lastbang = 1
@@ -323,14 +323,18 @@
spawn(30)
lastbang = 0
/obj/structure/closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
src.toggle(user)
/obj/structure/closet/attack_hand(mob/user)
add_fingerprint(user)
toggle(user)
/obj/structure/closet/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
toggle(user)
// tk grab then use on self
/obj/structure/closet/attack_self_tk(mob/user as mob)
src.add_fingerprint(user)
if(!src.toggle())
/obj/structure/closet/attack_self_tk(mob/user)
add_fingerprint(user)
if(!toggle())
to_chat(usr, "<span class='notice'>It won't budge!</span>")
/obj/structure/closet/verb/verb_toggleopen()
@@ -338,12 +342,12 @@
set category = null
set name = "Toggle Open"
if(!usr.canmove || usr.stat || usr.restrained())
if(usr.incapacitated())
return
if(ishuman(usr))
src.add_fingerprint(usr)
src.toggle(usr)
add_fingerprint(usr)
toggle(usr)
else
to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>")
@@ -399,8 +403,8 @@
to_chat(usr, "<span class='warning'>You successfully break out!</span>")
for(var/mob/O in viewers(L.loc))
O.show_message("<span class='danger'>\the [usr] successfully broke out of \the [src]!</span>", 1)
if(istype(src.loc, /obj/structure/bigDelivery)) //nullspace ect.. read the comment above
var/obj/structure/bigDelivery/BD = src.loc
if(istype(loc, /obj/structure/bigDelivery)) //nullspace ect.. read the comment above
var/obj/structure/bigDelivery/BD = loc
BD.attack_hand(usr)
open()
@@ -19,14 +19,14 @@
/obj/structure/closet/secure_closet/can_open()
if(!..())
return 0
if(src.locked)
if(locked)
return 0
return ..()
/obj/structure/closet/secure_closet/close()
if(..())
if(broken)
icon_state = src.icon_off
icon_state = icon_off
return 1
else
return 0
@@ -36,29 +36,29 @@
O.emp_act(severity)
if(!broken)
if(prob(50/severity))
src.locked = !src.locked
src.update_icon()
locked = !locked
update_icon()
if(prob(20/severity) && !opened)
if(!locked)
open()
else
src.req_access = list()
src.req_access += pick(get_all_accesses())
req_access = list()
req_access += pick(get_all_accesses())
..()
/obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob)
if(src.opened)
/obj/structure/closet/secure_closet/proc/togglelock(mob/user)
if(opened)
to_chat(user, "<span class='notice'>Close the locker first.</span>")
return
if(src.broken)
if(broken)
to_chat(user, "<span class='warning'>The locker appears to be broken.</span>")
return
if(user.loc == src)
to_chat(user, "<span class='notice'>You can't reach the lock from inside.</span>")
return
if(src.allowed(user))
src.locked = !src.locked
playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3)
if(allowed(user))
locked = !locked
playsound(loc, 'sound/machines/click.ogg', 15, 1, -3)
for(var/mob/O in viewers(user, 3))
if((O.client && !( O.blinded )))
to_chat(O, "<span class='notice'>The locker has been [locked ? null : "un"]locked by [user].</span>")
@@ -66,14 +66,14 @@
else
to_chat(user, "<span class='notice'>Access Denied</span>")
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user, params)
if(istype(W, /obj/item/weapon/rcs))
return ..()
if(src.opened)
if(opened)
if(istype(W, /obj/item/weapon/grab))
if(src.large)
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
if(large)
MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
else
to_chat(user, "<span class='notice'>The locker is too small to stuff [W:affecting] into!</span>")
if(isrobot(user))
@@ -88,7 +88,7 @@
else
togglelock(user)
/obj/structure/closet/secure_closet/emag_act(user as mob)
/obj/structure/closet/secure_closet/emag_act(mob/user)
if(!broken)
broken = 1
locked = 0
@@ -97,24 +97,24 @@
flick(icon_broken, src)
to_chat(user, "<span class='notice'>You unlock \the [src].</span>")
/obj/structure/closet/secure_closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
if(src.locked)
src.togglelock(user)
/obj/structure/closet/secure_closet/attack_hand(mob/user)
add_fingerprint(user)
if(locked)
togglelock(user)
else
src.toggle(user)
toggle(user)
/obj/structure/closet/secure_closet/verb/verb_togglelock()
set src in oview(1) // One square distance
set category = "Object"
set name = "Toggle Lock"
if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain
if(usr.incapacitated()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain
return
if(ishuman(usr))
src.add_fingerprint(usr)
src.togglelock(usr)
add_fingerprint(usr)
togglelock(usr)
else
to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>")
@@ -170,7 +170,7 @@
to_chat(usr, "\red You successfully break out!")
for(var/mob/O in viewers(L.loc))
O.show_message("<span class='danger'>\the [usr] successfully broke out of \the [src]!</span>", 1)
if(istype(src.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
var/obj/structure/bigDelivery/BD = src.loc
if(istype(loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
var/obj/structure/bigDelivery/BD = loc
BD.attack_hand(usr)
open()
@@ -80,7 +80,7 @@
src.opened = 0
return 1
/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
/obj/structure/closet/crate/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/rcs) && !src.opened)
var/obj/item/weapon/rcs/E = W
if(E.rcell && (E.rcell.charge >= E.chargecost))
@@ -191,7 +191,7 @@
else
return
/obj/structure/closet/crate/attack_hand(mob/user as mob)
/obj/structure/closet/crate/attack_hand(mob/user)
if(manifest)
to_chat(user, "<span class='notice'>You tear the manifest off of the crate.</span>")
playsound(src.loc, 'sound/items/poster_ripped.ogg', 75, 1)
@@ -250,7 +250,7 @@
/obj/structure/closet/crate/secure/can_open()
return !locked
/obj/structure/closet/crate/secure/proc/togglelock(mob/user as mob)
/obj/structure/closet/crate/secure/proc/togglelock(mob/user)
if(src.opened)
to_chat(user, "<span class='notice'>Close the crate first.</span>")
return
@@ -280,7 +280,7 @@
else
to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>")
/obj/structure/closet/crate/secure/attack_hand(mob/user as mob)
/obj/structure/closet/crate/secure/attack_hand(mob/user)
if(manifest)
to_chat(user, "<span class='notice'>You tear the manifest off of the crate.</span>")
playsound(src.loc, 'sound/items/poster_ripped.ogg', 75, 1)
@@ -296,7 +296,7 @@
src.toggle(user)
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
/obj/structure/closet/crate/secure/attackby(obj/item/weapon/W, mob/user, params)
if(is_type_in_list(W, list(/obj/item/stack/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/wirecutters,/obj/item/weapon/rcs)))
return ..()
if((istype(W, /obj/item/weapon/card/emag) || istype(W, /obj/item/weapon/melee/energy/blade)))
@@ -307,7 +307,7 @@
return
return ..()
/obj/structure/closet/crate/secure/emag_act(user as mob)
/obj/structure/closet/crate/secure/emag_act(user)
if(locked)
overlays += sparks
spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
@@ -38,7 +38,14 @@
/obj/structure/falsewall/CanAtmosPass(turf/T)
return !density
/obj/structure/falsewall/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
toggle(user)
/obj/structure/falsewall/attack_hand(mob/user)
toggle(user)
/obj/structure/falsewall/proc/toggle(mob/user)
if(opening)
return
+14 -11
View File
@@ -17,11 +17,9 @@
/obj/structure/dispenser/plasma
oxygentanks = 0
/obj/structure/dispenser/New()
update_icon()
/obj/structure/dispenser/update_icon()
overlays.Cut()
switch(oxygentanks)
@@ -31,18 +29,23 @@
if(1 to 4) overlays += "plasma-[plasmatanks]"
if(5 to INFINITY) overlays += "plasma-5"
/obj/structure/dispenser/attack_hand(mob/user as mob)
/obj/structure/dispenser/attack_hand(mob/user)
if(..())
return
interact(user)
/obj/structure/dispenser/attack_ghost(mob/user)
interact(user)
/obj/structure/dispenser/interact(mob/user)
user.set_machine(src)
var/dat = "[src]<br><br>"
dat += "Oxygen tanks: [oxygentanks] - [oxygentanks ? "<A href='?src=[UID()];oxygen=1'>Dispense</A>" : "empty"]<br>"
dat += "Plasma tanks: [plasmatanks] - [plasmatanks ? "<A href='?src=[UID()];plasma=1'>Dispense</A>" : "empty"]"
user << browse(dat, "window=dispenser")
onclose(user, "dispenser")
return
/obj/structure/dispenser/attackby(obj/item/I as obj, mob/user as mob, params)
/obj/structure/dispenser/attackby(obj/item/I as obj, mob/user, params)
if(istype(I, /obj/item/weapon/tank/oxygen) || istype(I, /obj/item/weapon/tank/air) || istype(I, /obj/item/weapon/tank/anesthetic))
if(oxygentanks < 10)
user.drop_item()
@@ -75,8 +78,9 @@
return
/obj/structure/dispenser/Topic(href, href_list)
if(usr.stat || usr.restrained())
return
if(..())
return 1
if(Adjacent(usr))
usr.set_machine(src)
if(href_list["oxygen"])
@@ -107,5 +111,4 @@
updateUsrDialog()
else
usr << browse(null, "window=dispenser")
return
return
return