The various assemblies should be working now.

Old style bombs and suicide vests temporarily removed.
Players can now be job banned from being a pAI.
Added null checks to explosion() due to runtime errors. 
Changelog updated


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1980 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
mport2004@gmail.com
2011-08-05 07:42:24 +00:00
parent 247ac0b197
commit e98a7893fa
40 changed files with 2440 additions and 2327 deletions
-3
View File
@@ -585,9 +585,6 @@ Code:
active3 = S
if("Send Signal")
for(var/obj/item/assembly/r_i_ptank/R in world) //Bomblist stuff
if((R.part1.code == src/radio:code) && (R.part1.frequency == radio:frequency))
bombers += "[key_name(usr)] has activated a radio bomb (Freq: [format_frequency(radio:frequency)], Code: [radio:code]). Temp = [R.part3.air_contents.temperature-T0C]."
spawn( 0 )
radio:send_signal("ACTIVATE")
return
-149
View File
@@ -1,149 +0,0 @@
/obj/item/device/igniter/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if ((istype(W, /obj/item/device/radio/signaler) && !( src.status )))
var/obj/item/device/radio/signaler/S = W
if (!( S.b_stat ))
return
var/obj/item/assembly/rad_ignite/R = new /obj/item/assembly/rad_ignite( user )
S.loc = R
R.part1 = S
S.layer = initial(S.layer)
if (user.client)
user.client.screen -= S
if (user.r_hand == S)
user.u_equip(S)
user.r_hand = R
else
user.u_equip(S)
user.l_hand = R
S.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part2 = src
R.layer = 20
R.loc = user
src.add_fingerprint(user)
else if ((istype(W, /obj/item/device/prox_sensor) && !( src.status )))
var/obj/item/assembly/prox_ignite/R = new /obj/item/assembly/prox_ignite( user )
W.loc = R
R.part1 = W
W.layer = initial(W.layer)
if (user.client)
user.client.screen -= W
if (user.r_hand == W)
user.u_equip(W)
user.r_hand = R
else
user.u_equip(W)
user.l_hand = R
W.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part2 = src
R.layer = 20
R.loc = user
src.add_fingerprint(user)
else if ((istype(W, /obj/item/device/timer) && !( src.status )))
var/obj/item/assembly/time_ignite/R = new /obj/item/assembly/time_ignite( user )
W.loc = R
R.part1 = W
W.layer = initial(W.layer)
if (user.client)
user.client.screen -= W
if (user.r_hand == W)
user.u_equip(W)
user.r_hand = R
else
user.u_equip(W)
user.l_hand = R
W.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part2 = src
R.layer = 20
R.loc = user
src.add_fingerprint(user)
else if ((istype(W, /obj/item/device/healthanalyzer) && !( src.status )))
var/obj/item/assembly/anal_ignite/R = new /obj/item/assembly/anal_ignite( user ) // Hehehe anal
W.loc = R
R.part1 = W
W.layer = initial(W.layer)
if (user.client)
user.client.screen -= W
if (user.r_hand == W)
user.u_equip(W)
user.r_hand = R
else
user.u_equip(W)
user.l_hand = R
W.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part2 = src
R.layer = 20
R.loc = user
src.add_fingerprint(user)
if (!( istype(W, /obj/item/weapon/screwdriver) ))
return
src.status = !( src.status )
if (src.status)
user.show_message("\blue The igniter is ready!")
else
user.show_message("\blue The igniter can now be attached!")
src.add_fingerprint(user)
return
/obj/item/device/igniter/attack_self(mob/user as mob)
src.add_fingerprint(user)
spawn( 5 )
ignite()
return
return
/obj/item/device/igniter/proc/ignite()
if (src.status)
var/turf/location = src.loc
if (src.master)
location = src.master.loc
location = get_turf(location)
if(location)
location.hotspot_expose(1000,1000)
return
/obj/item/device/igniter/examine()
set src in view()
..()
if ((in_range(src, usr) || src.loc == usr))
if (src.status)
usr.show_message("The igniter is ready!")
else
usr.show_message("The igniter can be attached!")
return
+3 -147
View File
@@ -10,8 +10,8 @@
/obj/item/device/infra_sensor/proc/burst()
for(var/obj/beam/i_beam/I in range(src.loc))
I.left = 10
for(var/obj/item/device/infra/I in range(src.loc))
I.left = 8
/* for(var/obj/item/device/infra/I in range(src.loc))ugh will have to fix this
I.visible = 1
spawn( 0 )
if ((I && I.first))
@@ -22,7 +22,7 @@
spawn( 0 )
if ((I.part2 && I.part2.first))
I.part2.first.vis_spread(1)
return
return*/
return
/obj/item/device/infra_sensor/attack_self(mob/user as mob)
@@ -67,148 +67,4 @@
return
return
/obj/item/device/infra/proc/hit()
if (src.master)
spawn()
var/datum/signal/signal = new
signal.data["message"] = "ACTIVATE"
src.master.receive_signal(signal)
del(signal)
return
else
for(var/mob/O in hearers(null, null))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
return
/obj/item/device/infra/process()
if(!state)
processing_items.Remove(src)
return null
if ((!( src.first ) && (src.state && (istype(src.loc, /turf) || (src.master && istype(src.master.loc, /turf))))))
var/obj/beam/i_beam/I = new /obj/beam/i_beam( (src.master ? src.master.loc : src.loc) )
//world << "infra spawning beam : \ref[I]"
I.master = src
I.density = 1
I.dir = src.dir
step(I, I.dir)
if (I)
//world << "infra: beam at [I.x] [I.y] [I.z]"
I.density = 0
src.first = I
//world << "infra : vis_spread"
I.vis_spread(src.visible)
spawn( 0 )
if (I)
//world << "infra: setting limit"
I.limit = 20
//world << "infra: processing beam \ref[I]"
I.process()
return
if (!( src.state ))
//src.first = null
del(src.first)
return
/obj/item/device/infra/attackby(obj/item/device/radio/signaler/S as obj, mob/user as mob)
..()
if ((!( istype(S, /obj/item/device/radio/signaler) ) || !( S.b_stat )))
return
var/obj/item/assembly/rad_infra/R = new /obj/item/assembly/rad_infra( user )
S.loc = R
R.part1 = S
S.layer = initial(S.layer)
if (user.client)
user.client.screen -= S
if (user.r_hand == S)
user.u_equip(S)
user.r_hand = R
else
user.u_equip(S)
user.l_hand = R
S.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part2 = src
R.layer = 20
R.loc = user
R.dir = src.dir
src.add_fingerprint(user)
return
/obj/item/device/infra/attack_self(mob/user as mob)
user.machine = src
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (src.state ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
user << browse(dat, "window=infra")
onclose(user, "infra")
return
/obj/item/device/infra/Topic(href, href_list)
..()
if (usr.stat || usr.restrained())
return
if ((usr.contents.Find(src) || usr.contents.Find(src.master) || in_range(src, usr) && istype(src.loc, /turf)))
usr.machine = src
if (href_list["state"])
src.state = !( src.state )
src.icon_state = text("infrared[]", src.state)
if (src.master)
src.master:c_state(src.state, src)
if(state)
processing_items.Add(src)
if (href_list["visible"])
src.visible = !( src.visible )
spawn( 0 )
if (src.first)
src.first.vis_spread(src.visible)
return
if (!( src.master ))
if (istype(src.loc, /mob))
attack_self(src.loc)
else
for(var/mob/M in viewers(1, src))
if (M.client)
src.attack_self(M)
//Foreach goto(211)
else
if (istype(src.master.loc, /mob))
src.attack_self(src.master.loc)
else
for(var/mob/M in viewers(1, src.master))
if (M.client)
src.attack_self(M)
//Foreach goto(287)
else
usr << browse(null, "window=infra")
onclose(usr, "infra")
return
return
/obj/item/device/infra/attack_paw(mob/user as mob)
return src.attack_hand(user)
/obj/item/device/infra/attack_hand()
//src.first = null
del(src.first)
..()
return
/obj/item/device/infra/Move()
var/t = src.dir
..()
src.dir = t
//src.first = null
del(src.first)
return
/obj/item/device/infra/verb/rotate()
set name = "Rotate Infrared Laser"
set category = "Object"
set src in usr
src.dir = turn(src.dir, 90)
return
-171
View File
@@ -1,171 +0,0 @@
/obj/item/device/prox_sensor/dropped()
spawn(0)
src.sense()
return
return
/obj/item/device/prox_sensor/proc/c_state(n)
src.icon_state = text("motion[]", n)
if(src.master)
src.master:c_state(n)
return
/obj/item/device/prox_sensor/proc/sense()
if (src.state)
if (src.master)
spawn(0)
src.master.receive_signal()
return
else
for(var/mob/O in hearers(null, null))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
return
/obj/item/device/prox_sensor/process()
if (src.timing)
if (src.time > 0)
if(!src.state)
src.c_state(2)
src.time = round(src.time) - 1
else
time()
src.time = 0
src.timing = 0
if (!src.master)
if (istype(src.loc, /mob))
attack_self(src.loc)
else
for(var/mob/M in viewers(1, src))
if (M.client && (M.machine == src.master || M.machine == src))
src.attack_self(M)
else
if (istype(src.master.loc, /mob))
src.attack_self(src.master.loc)
else
for(var/mob/M in viewers(1, src.master))
if (M.client && (M.machine == src.master || M.machine == src))
src.attack_self(M)
else
processing_items.Remove(src)
return
return
/obj/item/device/prox_sensor/proc/time()
if (src.state == 0)
src.state = !( src.state )
src.icon_state = text("motion[]", src.state)
if (src.master)
src.master:c_state(src.state, src)
return
/obj/item/device/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
if (istype(AM, /obj/beam))
return
if (AM.move_speed < 12)
src.sense()
return
/obj/item/device/prox_sensor/attackby(obj/item/device/radio/signaler/S as obj, mob/user as mob)
..()
if ((!( istype(S, /obj/item/device/radio/signaler) ) || !( S.b_stat )))
return
var/obj/item/assembly/rad_prox/R = new /obj/item/assembly/rad_prox( user )
S.loc = R
R.part1 = S
S.layer = initial(S.layer)
if (user.client)
user.client.screen -= S
if (user.r_hand == S)
user.u_equip(S)
user.r_hand = R
else
user.u_equip(S)
user.l_hand = R
S.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part2 = src
R.layer = 20
R.loc = user
R.dir = src.dir
src.add_fingerprint(user)
return
/obj/item/device/prox_sensor/attack_self(mob/user as mob)
if (user.stat || user.restrained() || user.lying)
return
if ((user.contents.Find(src) || user.contents.Find(src.master) || get_dist(src, user) <= 1 && istype(src.loc, /turf)))
user.machine = src
var/second = src.time % 60
var/minute = (src.time - second) / 60
var/dat = text("<TT><B>Proximity Sensor</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (src.timing ? text("<A href='?src=\ref[];time=0'>Arming</A>", src) : text("<A href='?src=\ref[];time=1'>Not Arming</A>", src)), minute, second, src, src, src, src)
dat += "<BR><A href='?src=\ref[src];state=1'>[state?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=prox")
onclose(user, "prox")
else
user << browse(null, "window=prox")
user.machine = null
return
/obj/item/device/prox_sensor/Topic(href, href_list)
..()
if (usr.stat || usr.restrained() || usr.lying)
return
if ((usr.contents.Find(src) || usr.contents.Find(src.master) || (get_dist(src, usr) <= 1) && istype(src.loc, /turf)))
usr.machine = src
if (href_list["state"])
src.state = !( src.state )
src.icon_state = text("motion[]", src.state)
if (src.master)
src.master:c_state(src.state, src)
if(state)
processing_items.Add(src)
if (href_list["time"])
src.timing = text2num(href_list["time"])
if(timing)
src.c_state(1)
if (href_list["tp"])
var/tp = text2num(href_list["tp"])
src.time += tp
src.time = min(max(round(src.time), 0), 600)
if (href_list["close"])
usr << browse(null, "window=prox")
usr.machine = null
return
if (!src.master)
if (istype(src.loc, /mob))
attack_self(src.loc)
else
for(var/mob/M in viewers(1, src))
if (M.client && (M.machine == src.master || M.machine == src))
src.attack_self(M)
else
if (istype(src.master.loc, /mob))
src.attack_self(src.master.loc)
else
for(var/mob/M in viewers(1, src.master))
if (M.client && (M.machine == src.master || M.machine == src))
src.attack_self(M)
else
usr << browse(null, "window=prox")
return
return
/obj/item/device/prox_sensor/attack_paw(mob/user as mob)
return src.attack_hand(user)
/obj/item/device/prox_sensor/Move()
..()
src.sense()
return
+50
View File
@@ -9,6 +9,16 @@ PLANT ANALYZER
MASS SPECTROMETER
*/
/obj/item/device/t_scanner
name = "T-ray scanner"
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
icon_state = "t-ray0"
var/on = 0
flags = FPRINT|ONBELT|TABLEPASS
w_class = 2
item_state = "electronic"
m_amt = 150
origin_tech = "magnets=1;engineering=1"
/obj/item/device/t_scanner/attack_self(mob/user)
@@ -49,6 +59,17 @@ MASS SPECTROMETER
if(M)
M.invisibility = 2
/obj/item/device/detective_scanner
name = "Scanner"
desc = "Used to scan objects for DNA and fingerprints."
icon_state = "forensic0"
var/amount = 20.0
var/printing = 0.0
w_class = 3.0
item_state = "electronic"
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
/obj/item/device/detective_scanner/attackby(obj/item/weapon/f_card/W as obj, mob/user as mob)
..()
@@ -142,6 +163,20 @@ MASS SPECTROMETER
//Foreach goto(186)
return
/obj/item/device/healthanalyzer
name = "Health Analyzer"
icon_state = "health"
item_state = "analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
throwforce = 3
w_class = 1.0
throw_speed = 5
throw_range = 10
m_amt = 200
origin_tech = "magnets=1;biotech=1"
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
if ((user.mutations & CLOWN || user.brainloss >= 60) && prob(50))
user << text("\red You try to analyze the floor's vitals!")
@@ -187,6 +222,21 @@ MASS SPECTROMETER
src.add_fingerprint(user)
return
/obj/item/device/analyzer
desc = "A hand-held environmental scanner which reports current gas levels."
name = "analyzer"
icon_state = "atmos"
item_state = "analyzer"
w_class = 2.0
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
throwforce = 5
throw_speed = 4
throw_range = 20
m_amt = 30
g_amt = 20
origin_tech = "magnets=1;engineering=1"
/obj/item/device/analyzer/attack_self(mob/user as mob)
if (user.stat)
-156
View File
@@ -1,156 +0,0 @@
/obj/item/device/timer/proc/time()
src.c_state(0)
if (src.master)
spawn( 0 )
var/datum/signal/signal = new
signal.source = src
signal.data["message"] = "ACTIVATE"
src.master.receive_signal(signal)
del(signal)
return
else
for(var/mob/O in hearers(null, null))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
return
//*****RM
/obj/item/device/timer/proc/c_state(n)
src.icon_state = text("timer[]", n)
if(src.master)
src.master:c_state(n)
return
//*****
/obj/item/device/timer/process()
if (src.timing)
if (src.time > 0)
src.time = round(src.time) - 1
if(time<5)
src.c_state(2)
else
// they might increase the time while it is timing
src.c_state(1)
else
time()
src.time = 0
src.timing = 0
if (!src.master)
if (istype(src.loc, /mob))
attack_self(src.loc)
else
for(var/mob/M in viewers(1, src))
if (M.client && (M.machine == src.master || M.machine == src))
src.attack_self(M)
else
if (istype(src.master.loc, /mob))
src.attack_self(src.master.loc)
else
for(var/mob/M in viewers(1, src.master))
if (M.client && (M.machine == src.master || M.machine == src))
src.attack_self(M)
else
// If it's not timing, reset the icon so it doesn't look like it's still about to go off.
src.c_state(0)
processing_items.Remove(src)
return
/obj/item/device/timer/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/device/radio/signaler) )
var/obj/item/device/radio/signaler/S = W
if(!S.b_stat)
return
var/obj/item/assembly/rad_time/R = new /obj/item/assembly/rad_time( user )
S.loc = R
R.part1 = S
S.layer = initial(S.layer)
if (user.client)
user.client.screen -= S
if (user.r_hand == S)
user.u_equip(S)
user.r_hand = R
else
user.u_equip(S)
user.l_hand = R
S.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part2 = src
R.layer = 20
R.loc = user
R.dir = src.dir
src.add_fingerprint(user)
R.add_fingerprint(user)
return
/obj/item/device/timer/attack_self(mob/user as mob)
..()
if (user.stat || user.restrained() || user.lying)
return
if ((user.contents.Find(src) || user.contents.Find(src.master) || get_dist(src, user) <= 1 && istype(src.loc, /turf)))
user.machine = src
var/second = src.time % 60
var/minute = (src.time - second) / 60
var/dat = text("<TT><B>Timing Unit</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (src.timing ? text("<A href='?src=\ref[];time=0'>Timing</A>", src) : text("<A href='?src=\ref[];time=1'>Not Timing</A>", src)), minute, second, src, src, src, src)
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=timer")
onclose(user, "timer")
else
user << browse(null, "window=timer")
user.machine = null
return
/obj/item/device/timer/Topic(href, href_list)
..()
if (usr.stat || usr.restrained() || usr.lying)
return
if ((usr.contents.Find(src) || usr.contents.Find(src.master) || in_range(src, usr) && istype(src.loc, /turf)))
usr.machine = src
if (href_list["time"])
src.timing = text2num(href_list["time"])
if(timing)
src.c_state(1)
processing_items.Add(src)
if (href_list["tp"])
var/tp = text2num(href_list["tp"])
src.time += tp
src.time = min(max(round(src.time), 0), 600)
if (href_list["close"])
usr << browse(null, "window=timer")
usr.machine = null
return
if (!src.master)
if (istype(src.loc, /mob))
attack_self(src.loc)
else
for(var/mob/M in viewers(1, src))
if (M.client && (M.machine == src.master || M.machine == src))
src.attack_self(M)
else
if (istype(src.master.loc, /mob))
src.attack_self(src.master.loc)
else
for(var/mob/M in viewers(1, src.master))
if (M.client && (M.machine == src.master || M.machine == src))
src.attack_self(M)
src.add_fingerprint(usr)
else
usr << browse(null, "window=timer")
return
return