Merge pull request #4245 from Kurfursten/sectoys

New Security Toys
This commit is contained in:
d3athrow
2015-05-06 16:14:39 -05:00
6 changed files with 121 additions and 41 deletions

View File

@@ -487,7 +487,21 @@
SA.health -= 20
..()
/obj/item/weapon/batteringram
name = "battering ram"
desc = "A hydraulic compression/spreader-type mechanism which, when applied to a door, will charge before rapidly expanding and dislodging frames."
flags = TWOHANDABLE | MUSTTWOHAND | FPRINT
icon = 'icons/obj/weapons.dmi'
icon_state = "ram"
siemens_coefficient = 0
throwforce = 15
w_class = 3
w_type = RECYK_METAL
origin_tech = "combat=5"
attack_verb = list("rammed", "bludgeoned")
force = 15
throw_speed = 1
throw_range = 3
/obj/item/weapon/caution
desc = "Caution! Wet Floor!"

View File

@@ -986,6 +986,31 @@ About the new airlock wires panel:
if (shock(user, 75))
return
if(istype(I, /obj/item/weapon/batteringram))
user.delayNextAttack(30)
var/breaktime = 60 //Same amount of time as drilling a wall, then a girder
if(welded)
breaktime += 30 //Welding buys you a little time
src.visible_message("<span class='warning'>[user] is battering down [src]!</span>", "<span class='warning'>You begin to batter [src].</span>")
playsound(get_turf(src), 'sound/effects/shieldbash.ogg', 50, 1)
if(do_after(user, breaktime))
//Calculate bolts separtely, in case they dropped in the last 6-9 seconds.
if(src.locked == 1)
playsound(get_turf(src), 'sound/effects/shieldbash.ogg', 50, 1)
src.visible_message("<span class='warning'>[user] is battering the bolts!</span>", "<span class='warning'>You begin to smash the bolts...</span>")
if(!do_after(user,190)) //Same amount as drilling an R-wall, longer if it was welded
return //If they moved, cancel us out
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
src.visible_message("<span class='warning'>[user] broke down the door!</span>", "<span class='warning'>You broke the door!</span>")
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
operating = -1
var/obj/structure/door_assembly/DA = revert(user,user.dir)
DA.anchored = 0
DA.state = 0 //Completely smash the door here; reduce it to its lowest state, eject electronics smoked
DA.update_state()
qdel(src)
return
if (istype(I, /obj/item/weapon/weldingtool))
if (density && !operating)
var/obj/item/weapon/weldingtool/WT = I
@@ -1026,44 +1051,8 @@ About the new airlock wires panel:
// TODO: refactor the called proc
if (do_after(user, 40))
user << "<span class='notice'>You removed the airlock electronics!</span>"
var/obj/structure/door_assembly/DA = new assembly_type(loc)
DA.anchored = 1
DA.fingerprints += src.fingerprints
DA.fingerprintshidden += src.fingerprintshidden
DA.fingerprintslast = user.ckey
if (mineral)
DA.glass = mineral
// TODO: check DA.glass
else if (glass && !DA.glass)
DA.glass = 1
DA.state = 1
DA.created_name = name
DA.update_state()
var/obj/item/weapon/circuitboard/airlock/A
// TODO: check electronics
if (!electronics)
A = new/obj/item/weapon/circuitboard/airlock(loc)
// TODO: recheck the vars
if(req_access && req_access.len)
A.conf_access = req_access
else if(req_one_access && req_one_access.len)
A.conf_access = req_one_access
A.one_access = 1
else
A = electronics
electronics = null
A.loc = loc
if (operating == -1)
A.icon_state = "door_electronics_smoked"
operating = 0
del(src)
revert(user,null)
qdel(src)
return
else if(arePowerSystemsOn() && !(stat & NOPOWER))
user << "<span class='notice'>The airlock's motors resist your efforts to force it.</span>"
@@ -1102,6 +1091,43 @@ About the new airlock wires panel:
return
/obj/machinery/door/airlock/proc/revert(mob/user as mob, var/direction)
var/obj/structure/door_assembly/DA = new assembly_type(loc)
DA.anchored = 1
DA.fingerprints += src.fingerprints
DA.fingerprintshidden += src.fingerprintshidden
DA.fingerprintslast = user.ckey
if (mineral)
DA.glass = mineral
else if (glass && !DA.glass)
DA.glass = 1
DA.state = 1
DA.created_name = name
DA.update_state()
var/obj/item/weapon/circuitboard/airlock/A
if (!electronics)
A = new/obj/item/weapon/circuitboard/airlock(loc)
if(req_access && req_access.len)
A.conf_access = req_access
else if(req_one_access && req_one_access.len)
A.conf_access = req_one_access
A.one_access = 1
else
A = electronics
electronics = null
A.loc = loc
if (operating == -1)
A.icon_state = "door_electronics_smoked"
operating = 0
if(direction)
A.throw_at(get_edge_target_turf(src, direction),10,4)
return DA //Returns the new assembly
/obj/machinery/door/airlock/plasma/attackby(C as obj, mob/user as mob)
if(C)
ignite(is_hot(C))

View File

@@ -154,6 +154,7 @@
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/weapon/storage/box/bolas(src)
new /obj/item/weapon/batteringram(src)
return
@@ -189,6 +190,7 @@
new /obj/item/taperoll/police(src)
new /obj/item/device/hailer(src) //wonder if vg would spam this
new /obj/item/clothing/gloves/black(src)
new /obj/item/device/gps/secure(src)
return

View File

@@ -1,4 +1,6 @@
var/list/GPS_list = list()
var/list/SPS_list = list()
/obj/item/device/gps
name = "global positioning system"
desc = "Helping lost spacemen find their way through the planets since 2016."
@@ -18,6 +20,9 @@ var/list/GPS_list = list()
overlays += "working"
/obj/item/device/gps/Destroy()
if(istype(src,/obj/item/device/gps/secure))
SPS_list.Remove(src)
else
GPS_list.Remove(src)
..()
@@ -32,13 +37,18 @@ var/list/GPS_list = list()
/obj/item/device/gps/attack_self(mob/user as mob)
var/obj/item/device/gps/t = ""
var/list/locallist = null
if(istype(src,/obj/item/device/gps/secure))
locallist = SPS_list.Copy()
else
locallist = GPS_list.Copy()
if(emped)
t += "ERROR"
else
t += "<BR><A href='?src=\ref[src];tag=1'>Set Tag</A> "
t += "<BR>Tag: [gpstag]"
for(var/obj/item/device/gps/G in GPS_list)
for(var/obj/item/device/gps/G in locallist)
var/turf/pos = get_turf(G)
var/area/gps_area = get_area(G)
var/tracked_gpstag = G.gpstag
@@ -101,3 +111,31 @@ var/list/GPS_list = list()
desc = "A more rugged looking GPS device. Useful for finding miners. Or their corpses."
icon_state = "gps-m"
gpstag = "MIN0"
/obj/item/device/gps/secure
name = "secure positioning system"
desc = "A secure channel SPS with several features designed to keep its wearer safe."
icon_state = "sps"
gpstag = "SEC0"
/obj/item/device/gps/secure/New()
SPS_list.Add(src)
gpstag = "SEC0"
name = "secure positioning system ([gpstag])"
overlays += "working"
/obj/item/device/gps/secure/OnMobDeath(mob/wearer as mob)
..()
for(var/obj/item/device/gps/secure/S in SPS_list)
S.announce(wearer, src, "died")
/obj/item/device/gps/secure/dropped(mob/wearer as mob)
..()
if(!istype(src.loc, /turf))
return
for(var/obj/item/device/gps/secure/S in SPS_list)
S.announce(wearer, src, "lost [wearer.gender == FEMALE ? "her" : "his"] SPS")
/obj/item/device/gps/secure/proc/announce(var/mob/living/carbon/human/wearer, var/obj/item/device/gps/secure/SPS, var/reason)
src.visible_message("Your SPS beeps: <span class='warning'>Warning! [wearer] has [reason] at [get_area(SPS)].</span>")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 43 KiB