diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index 75403bef9df..e7a52c5fe1c 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -61,6 +61,9 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
return 0
if(clothes_req) //clothes check
+ if(!istype(usr, /mob/living/carbon/human))
+ usr << "You aren't a human, Why are you trying to cast a human spell, silly non-human? Casting human spells is for humans."
+ return 0
if(!istype(usr:wear_suit, /obj/item/clothing/suit/wizrobe))
usr << "I don't feel strong enough without my robe."
return 0
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 7d35d7aa18b..36c2650196f 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -1029,95 +1029,104 @@
if (src.buffer3) src.temphtml += text("Clear Buffer
", src)
if (!src.buffer3) src.temphtml += "
"
if (href_list["b1addui"])
- src.buffer1iue = 0
- src.buffer1 = src.connected.occupant.dna.uni_identity
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer1owner = src.connected.occupant.name
- else
- src.buffer1owner = src.connected.occupant.real_name
- src.buffer1label = "Unique Identifier"
- src.buffer1type = "ui"
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer1iue = 0
+ src.buffer1 = src.connected.occupant.dna.uni_identity
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer1owner = src.connected.occupant.name
+ else
+ src.buffer1owner = src.connected.occupant.real_name
+ src.buffer1label = "Unique Identifier"
+ src.buffer1type = "ui"
+ dopage(src,"buffermenu")
if (href_list["b1adduiue"])
- src.buffer1 = src.connected.occupant.dna.uni_identity
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer1owner = src.connected.occupant.name
- else
- src.buffer1owner = src.connected.occupant.real_name
- src.buffer1label = "Unique Identifier & Unique Enzymes"
- src.buffer1type = "ui"
- src.buffer1iue = 1
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer1 = src.connected.occupant.dna.uni_identity
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer1owner = src.connected.occupant.name
+ else
+ src.buffer1owner = src.connected.occupant.real_name
+ src.buffer1label = "Unique Identifier & Unique Enzymes"
+ src.buffer1type = "ui"
+ src.buffer1iue = 1
+ dopage(src,"buffermenu")
if (href_list["b2adduiue"])
- src.buffer2 = src.connected.occupant.dna.uni_identity
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer2owner = src.connected.occupant.name
- else
- src.buffer2owner = src.connected.occupant.real_name
- src.buffer2label = "Unique Identifier & Unique Enzymes"
- src.buffer2type = "ui"
- src.buffer2iue = 1
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer2 = src.connected.occupant.dna.uni_identity
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer2owner = src.connected.occupant.name
+ else
+ src.buffer2owner = src.connected.occupant.real_name
+ src.buffer2label = "Unique Identifier & Unique Enzymes"
+ src.buffer2type = "ui"
+ src.buffer2iue = 1
+ dopage(src,"buffermenu")
if (href_list["b3adduiue"])
- src.buffer3 = src.connected.occupant.dna.uni_identity
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer3owner = src.connected.occupant.name
- else
- src.buffer3owner = src.connected.occupant.real_name
- src.buffer3label = "Unique Identifier & Unique Enzymes"
- src.buffer3type = "ui"
- src.buffer3iue = 1
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer3 = src.connected.occupant.dna.uni_identity
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer3owner = src.connected.occupant.name
+ else
+ src.buffer3owner = src.connected.occupant.real_name
+ src.buffer3label = "Unique Identifier & Unique Enzymes"
+ src.buffer3type = "ui"
+ src.buffer3iue = 1
+ dopage(src,"buffermenu")
if (href_list["b2addui"])
- src.buffer2iue = 0
- src.buffer2 = src.connected.occupant.dna.uni_identity
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer2owner = src.connected.occupant.name
- else
- src.buffer2owner = src.connected.occupant.real_name
- src.buffer2label = "Unique Identifier"
- src.buffer2type = "ui"
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer2iue = 0
+ src.buffer2 = src.connected.occupant.dna.uni_identity
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer2owner = src.connected.occupant.name
+ else
+ src.buffer2owner = src.connected.occupant.real_name
+ src.buffer2label = "Unique Identifier"
+ src.buffer2type = "ui"
+ dopage(src,"buffermenu")
if (href_list["b3addui"])
- src.buffer3iue = 0
- src.buffer3 = src.connected.occupant.dna.uni_identity
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer3owner = src.connected.occupant.name
- else
- src.buffer3owner = src.connected.occupant.real_name
- src.buffer3label = "Unique Identifier"
- src.buffer3type = "ui"
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer3iue = 0
+ src.buffer3 = src.connected.occupant.dna.uni_identity
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer3owner = src.connected.occupant.name
+ else
+ src.buffer3owner = src.connected.occupant.real_name
+ src.buffer3label = "Unique Identifier"
+ src.buffer3type = "ui"
+ dopage(src,"buffermenu")
if (href_list["b1addse"])
- src.buffer1iue = 0
- src.buffer1 = src.connected.occupant.dna.struc_enzymes
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer1owner = src.connected.occupant.name
- else
- src.buffer1owner = src.connected.occupant.real_name
- src.buffer1label = "Structural Enzymes"
- src.buffer1type = "se"
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer1iue = 0
+ src.buffer1 = src.connected.occupant.dna.struc_enzymes
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer1owner = src.connected.occupant.name
+ else
+ src.buffer1owner = src.connected.occupant.real_name
+ src.buffer1label = "Structural Enzymes"
+ src.buffer1type = "se"
+ dopage(src,"buffermenu")
if (href_list["b2addse"])
- src.buffer2iue = 0
- src.buffer2 = src.connected.occupant.dna.struc_enzymes
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer2owner = src.connected.occupant.name
- else
- src.buffer2owner = src.connected.occupant.real_name
- src.buffer2label = "Structural Enzymes"
- src.buffer2type = "se"
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer2iue = 0
+ src.buffer2 = src.connected.occupant.dna.struc_enzymes
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer2owner = src.connected.occupant.name
+ else
+ src.buffer2owner = src.connected.occupant.real_name
+ src.buffer2label = "Structural Enzymes"
+ src.buffer2type = "se"
+ dopage(src,"buffermenu")
if (href_list["b3addse"])
- src.buffer3iue = 0
- src.buffer3 = src.connected.occupant.dna.struc_enzymes
- if (!istype(src.connected.occupant,/mob/living/carbon/human))
- src.buffer3owner = src.connected.occupant.name
- else
- src.buffer3owner = src.connected.occupant.real_name
- src.buffer3label = "Structural Enzymes"
- src.buffer3type = "se"
- dopage(src,"buffermenu")
+ if(src.connected.occupant)
+ src.buffer3iue = 0
+ src.buffer3 = src.connected.occupant.dna.struc_enzymes
+ if (!istype(src.connected.occupant,/mob/living/carbon/human))
+ src.buffer3owner = src.connected.occupant.name
+ else
+ src.buffer3owner = src.connected.occupant.real_name
+ src.buffer3label = "Structural Enzymes"
+ src.buffer3type = "se"
+ dopage(src,"buffermenu")
if (href_list["b1clear"])
src.buffer1 = null
src.buffer1owner = null
diff --git a/code/game/gamemodes/wizard/spells.dm b/code/game/gamemodes/wizard/spells.dm
index eb5c1fd98ac..a51b02b4db3 100644
--- a/code/game/gamemodes/wizard/spells.dm
+++ b/code/game/gamemodes/wizard/spells.dm
@@ -375,9 +375,13 @@
if(clear)
L+=T
- usr.loc = pick(L)
+ if(!L.len)
+ usr <<"Invalid teleport destination."
+ return
- smoke.start()
+ else
+ usr.loc = pick(L)
+ smoke.start()
//JAUNT
diff --git a/code/game/machinery/morgue.dm b/code/game/machinery/morgue.dm
index 0d8ff6209b5..c90de554ced 100644
--- a/code/game/machinery/morgue.dm
+++ b/code/game/machinery/morgue.dm
@@ -262,9 +262,10 @@
spawn(1)
for(var/i=1 to 10)
sleep(10)
- M.take_overall_damage(0,30)
- if (M.stat!=2 && prob(30))
- M.emote("scream")
+ if(M)
+ M.take_overall_damage(0,30)
+ if (M.stat!=2 && prob(30))
+ M.emote("scream")
new /obj/effect/decal/ash(src)
for (var/obj/item/W in M)
if (prob(10))
diff --git a/code/game/objects/devices/PDA/PDA.dm b/code/game/objects/devices/PDA/PDA.dm
index 8cdce400ddf..bf3bd82327e 100644
--- a/code/game/objects/devices/PDA/PDA.dm
+++ b/code/game/objects/devices/PDA/PDA.dm
@@ -517,7 +517,7 @@
playsound(P.loc, 'twobeep.ogg', 50, 1)
- log_pda("[usr] (PDA: [src.owner]) sent \"[t]\" to [P.owner]")
+ log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]")
if("Send Honk")//Honk virus
diff --git a/code/game/objects/door_assembly.dm b/code/game/objects/door_assembly.dm
index 757fec3f52c..650a68567c4 100644
--- a/code/game/objects/door_assembly.dm
+++ b/code/game/objects/door_assembly.dm
@@ -237,13 +237,15 @@ obj/structure/door_assembly
playsound(src.loc, 'Crowbar.ogg', 100, 1)
user.visible_message("[user] adds reinforced glass windows to the airlock assembly.", "You start to install reinforced glass windows into the airlock assembly.")
var/obj/item/stack/sheet/rglass/G = W
- if(do_after(user, 40) && G.amount>=1)
- user << "\blue You installed glass windows the airlock assembly!"
- G.use(1)
- src.glass = 1
- src.name = "Near finished Window Airlock Assembly"
- src.airlock_type = /obj/machinery/door/airlock/glass
- src.base_icon_state = "door_as_g" //this will be applied to the icon_state with the correct state number at the proc's end.
+ if(do_after(user, 40))
+ if(G)
+ if(G.amount>=1)
+ user << "\blue You installed glass windows the airlock assembly!"
+ G.use(1)
+ src.glass = 1
+ src.name = "Near finished Window Airlock Assembly"
+ src.airlock_type = /obj/machinery/door/airlock/glass
+ src.base_icon_state = "door_as_g" //this will be applied to the icon_state with the correct state number at the proc's end.
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 )
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
var/turf/T = get_turf(user)
diff --git a/code/game/objects/items/weapons/mops_cleaners.dm b/code/game/objects/items/weapons/mops_cleaners.dm
index a3ac792f579..6cc3f93332f 100644
--- a/code/game/objects/items/weapons/mops_cleaners.dm
+++ b/code/game/objects/items/weapons/mops_cleaners.dm
@@ -365,14 +365,16 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A as turf)
for(var/mob/O in viewers(user, null))
O.show_message("\red [user] begins to clean \the [A]", 1)
sleep(40)
- clean(A)
+ if(A)
+ clean(A)
user << "\blue You have finished mopping!"
mopcount++
else if (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
for(var/mob/O in viewers(user, null))
O.show_message("\red [user] begins to clean \the [get_turf(A)]", 1)
sleep(40)
- clean(get_turf(A))
+ if(A)
+ clean(get_turf(A))
user << "\blue You have finished mopping!"
mopcount++
diff --git a/code/game/objects/stacks/glass.dm b/code/game/objects/stacks/glass.dm
index 2696f01b235..a814e25841d 100644
--- a/code/game/objects/stacks/glass.dm
+++ b/code/game/objects/stacks/glass.dm
@@ -148,7 +148,14 @@ SHARDS
..()
if ( istype(W, /obj/item/weapon/weldingtool) && W:welding )
W:eyecheck(user)
- new /obj/item/stack/sheet/glass( user.loc )
+ var/obj/item/stack/sheet/glass/NG = new (user.loc)
+ for (var/obj/item/stack/sheet/glass/G in user.loc)
+ if(G==NG)
+ continue
+ if(G.amount>=G.max_amount)
+ continue
+ G.attackby(NG, user)
+ usr << "You add the newly-formed glass to the stack. It now contains [NG.amount] sheets."
//SN src = null
del(src)
return
diff --git a/code/game/turf.dm b/code/game/turf.dm
index 795d316aee2..ca3c5098bfb 100644
--- a/code/game/turf.dm
+++ b/code/game/turf.dm
@@ -386,11 +386,11 @@
user << "\blue Now disassembling the outer wall plating."
playsound(src.loc, 'Welder.ogg', 100, 1)
sleep(100)
- if (istype(src, /turf/simulated/wall))
+ if (W && istype(src, /turf/simulated/wall))
if ((get_turf(user) == T && user.equipped() == W))
user << "\blue You disassembled the outer wall plating."
dismantle_wall()
- W:welding = 1
+ W:welding = 1
else
user << "\blue You need more welding fuel to complete this task."
return
@@ -421,7 +421,7 @@
user << "\blue Now disassembling the outer wall plating."
playsound(src.loc, 'Welder.ogg', 100, 1)
sleep(60)
- if (istype(src, /turf/simulated/wall))
+ if (W && istype(src, /turf/simulated/wall))
if ((get_turf(user) == T && user.equipped() == W))
user << "\blue You disassembled the outer wall plating."
dismantle_wall()
@@ -433,10 +433,11 @@
var/turf/T = user.loc
user << "\blue Now drilling through wall."
sleep(60)
- if ((user.loc == T && user.equipped() == W))
- dismantle_wall(1)
- for(var/mob/O in viewers(user, 5))
- O.show_message(text("\blue The wall was drilled apart by []!", user), 1, text("\red You hear metal being drilled appart."), 2)
+ if (W && istype(src, /turf/simulated/wall))
+ if ((user.loc == T && user.equipped() == W))
+ dismantle_wall(1)
+ for(var/mob/O in viewers(user, 5))
+ O.show_message(text("\blue The wall was drilled apart by []!", user), 1, text("\red You hear metal being drilled appart."), 2)
return
else if(istype(W, /obj/item/weapon/melee/energy/blade))
@@ -445,13 +446,14 @@
W:spark_system.start()
playsound(src.loc, "sparks", 50, 1)
sleep(70)
- if ((user.loc == T && user.equipped() == W))
- W:spark_system.start()
- playsound(src.loc, "sparks", 50, 1)
- playsound(src.loc, 'blade1.ogg', 50, 1)
- dismantle_wall(1)
- for(var/mob/O in viewers(user, 5))
- O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
+ if (W && istype(src, /turf/simulated/wall))
+ if ((user.loc == T && user.equipped() == W))
+ W:spark_system.start()
+ playsound(src.loc, "sparks", 50, 1)
+ playsound(src.loc, 'blade1.ogg', 50, 1)
+ dismantle_wall(1)
+ for(var/mob/O in viewers(user, 5))
+ O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
return
else if(istype(W,/obj/item/apc_frame))