diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm
index 75b0482990c..41091a53e8f 100644
--- a/code/WorkInProgress/Chemistry-Reagents.dm
+++ b/code/WorkInProgress/Chemistry-Reagents.dm
@@ -569,7 +569,8 @@ datum
if(istype(O,/obj/decal/cleanable))
del(O)
else
- O.clean_blood()
+ if (O)
+ O.clean_blood()
reaction_turf(var/turf/T, var/volume)
T.overlays = null
T.clean_blood()
diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm
index 855c129f477..7785aff6b81 100644
--- a/code/WorkInProgress/Chemistry-Tools.dm
+++ b/code/WorkInProgress/Chemistry-Tools.dm
@@ -250,6 +250,7 @@
O.show_message(text("\red [] was hit by the syringe!", M), 1)
del(D)
+ return
for(var/atom/A in D.loc)
if(A == user) continue
diff --git a/code/WorkInProgress/recycling/disposal.dm b/code/WorkInProgress/recycling/disposal.dm
index 1a78f28e808..07c1761418d 100644
--- a/code/WorkInProgress/recycling/disposal.dm
+++ b/code/WorkInProgress/recycling/disposal.dm
@@ -442,9 +442,9 @@
relaymove(mob/user as mob)
if (user.stat)
return
-
- for (var/mob/M in hearers(src.loc.loc))
- M << "CLONG, clong!"
+ if (src.loc)
+ for (var/mob/M in hearers(src.loc.loc))
+ M << "CLONG, clong!"
playsound(src.loc, 'clang.ogg', 50, 0, 0)
diff --git a/code/game/dna.dm b/code/game/dna.dm
index d1834692dac..c7e73ffed07 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -867,13 +867,14 @@
var/newblock
var/tstructure2
var/oldblock
- block = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),src.subblock,1)
- src.delete = 1
- src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration)
- usr << browse(temphtml, "window=scannernew;size=550x650")
- onclose(usr, "scannernew")
- sleep(10*src.radduration)
- if (!src.connected.occupant)
+ if (src.connected.occupant)
+ block = getblock(getblock(src.connected.occupant.dna.struc_enzymes,src.strucblock,3),src.subblock,1)
+ src.delete = 1
+ src.temphtml = text("Working ... Please wait ([] Seconds)", src.radduration)
+ usr << browse(temphtml, "window=scannernew;size=550x650")
+ onclose(usr, "scannernew")
+ sleep(10*src.radduration)
+ else
temphtml = null
delete = 0
return null
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 083d43569f1..eb057a59a7c 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -13,6 +13,7 @@
pressure_resistance = 7*ONE_ATMOSPHERE
var/temperature_resistance = 1000 + T0C
volume = 1000
+ var/throwforce = 0
/obj/machinery/portable_atmospherics/canister/sleeping_agent
name = "Canister: \[N2O\]"
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index feab27a4762..e0aa163aff8 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -44,11 +44,12 @@
else if (O.g_amt || O.m_amt)
spawn(16) {
flick("autolathe_c",src)
- if(O.g_amt) // Added null checks to avoid runtime errors when an item doesn't have an expected variable -- TLE
- src.g_amount += O.g_amt
- if(O.m_amt)
- src.m_amount += O.m_amt
- del O
+ if(O)
+ if(O.g_amt) // Added null checks to avoid runtime errors when an item doesn't have an expected variable -- TLE
+ src.g_amount += O.g_amt
+ if(O.m_amt)
+ src.m_amount += O.m_amt
+ del O
}
else
user << "This object does not contain significant amounts of metal or glass, or cannot be accepted by the autolathe due to size or hazardous materials."
diff --git a/code/game/machinery/computer/AIcore.dm b/code/game/machinery/computer/AIcore.dm
index 3e7a52659b6..1fc6b93a314 100644
--- a/code/game/machinery/computer/AIcore.dm
+++ b/code/game/machinery/computer/AIcore.dm
@@ -8,6 +8,7 @@
var/datum/ai_laws/laws = new /datum/ai_laws/asimov
var/obj/item/weapon/circuitboard/circuit = null
var/obj/item/brain/brain = null
+ var/throwforce = 0
/obj/AIcore/attackby(obj/item/weapon/P as obj, mob/user as mob)
@@ -83,11 +84,12 @@
if(P:amount >= 2)
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
if(do_after(user, 20))
- P:amount -= 2
- if(!P:amount) del(P)
- user << "\blue You put in the glass panel."
- src.state = 4
- src.icon_state = "4"
+ if (P)
+ P:amount -= 2
+ if(!P:amount) del(P)
+ user << "\blue You put in the glass panel."
+ src.state = 4
+ src.icon_state = "4"
if(istype(P, /obj/item/weapon/aiModule/asimov))
src.laws.add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index 4e3fa237955..38965e1bdd0 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -169,11 +169,12 @@
if(P:amount >= 2)
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
if(do_after(user, 20))
- P:amount -= 2
- if(!P:amount) del(P)
- user << "\blue You put in the glass panel."
- src.state = 4
- src.icon_state = "4"
+ if(P)
+ P:amount -= 2
+ if(!P:amount) del(P)
+ user << "\blue You put in the glass panel."
+ src.state = 4
+ src.icon_state = "4"
if(4)
if(istype(P, /obj/item/weapon/crowbar))
playsound(src.loc, 'Crowbar.ogg', 50, 1)
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index 581ea0f7e1d..5a25132c770 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -162,7 +162,8 @@
if(R)
var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
if(choice == "Confirm")
- R.self_destruct()
+ if(R)
+ R.self_destruct()
src.add_fingerprint(usr)
src.updateUsrDialog()
diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm
index 8edefec7c6d..6b9f7c36a27 100644
--- a/code/game/machinery/robot_fabricator.dm
+++ b/code/game/machinery/robot_fabricator.dm
@@ -13,18 +13,19 @@
if (src.metal_amount < 150000.0)
var/count = 0
spawn(15)
- if(!O:amount)
- return
- while(metal_amount < 150000 && O:amount)
- src.metal_amount += O:height * O:width * O:length * 100000.0
- O:amount--
- count++
+ if(O)
+ if(!O:amount)
+ return
+ while(metal_amount < 150000 && O:amount)
+ src.metal_amount += O:height * O:width * O:length * 100000.0
+ O:amount--
+ count++
- if (O:amount < 1)
- del(O)
+ if (O:amount < 1)
+ del(O)
- user << "You insert [count] metal sheet\s into the fabricator."
- updateDialog()
+ user << "You insert [count] metal sheet\s into the fabricator."
+ updateDialog()
else
user << "The robot part maker is full. Please remove metal from the robot part maker in order to insert more."
diff --git a/code/game/magic/library.dm b/code/game/magic/library.dm
index ef0d0cf5f8f..9b17b9c9613 100644
--- a/code/game/magic/library.dm
+++ b/code/game/magic/library.dm
@@ -660,7 +660,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
var/obj/item/weapon/book/b = new(src.loc)
b.dat = O:info
b.name = "Print Job #" + "[rand(100, 999)]"
- b.icon_state = "book" + rand(1,7)
+ b.icon_state = "book[rand(1,7)]"
del(O)
else
..()
\ No newline at end of file
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 7c1d21c0505..d08445d3743 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -219,8 +219,9 @@
return safe.attackby(W, user)
if ((!( shielded ) || !( W.flags ) & 32))
spawn( 0 )
- W.attack(src, user)
- return
+ if (W)
+ W.attack(src, user)
+ return
return
diff --git a/code/game/objects/items/robot_parts.dm b/code/game/objects/items/robot_parts.dm
index 30b7c2ee114..981fd9acdf3 100644
--- a/code/game/objects/items/robot_parts.dm
+++ b/code/game/objects/items/robot_parts.dm
@@ -128,8 +128,9 @@
O.invisibility = 0
O.name = "Cyborg"
O.real_name = "Cyborg"
- O.lastKnownIP = src.brain.owner.client.address
+
if (src.brain.owner.client)
+ O.lastKnownIP = src.brain.owner.client.address
src.brain.owner.client.mob = O
else
for(var/mob/dead/observer/G in world)
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index 735fc4f5a12..5210fea46ef 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -130,7 +130,8 @@
user.show_message("\blue The timer is now secured!", 1)
else
user.show_message("\blue The timer is now unsecured!", 1)
- src.part2.status = src.status
+ if (src.part2)
+ src.part2.status = src.status
src.add_fingerprint(user)
return
diff --git a/code/game/turf.dm b/code/game/turf.dm
index 66b7fdbc46f..6435b6e48aa 100644
--- a/code/game/turf.dm
+++ b/code/game/turf.dm
@@ -605,10 +605,11 @@ turf/simulated/floor/proc/update_icon()
if (C:amount >= 2)
user << "\blue Reinforcing the floor..."
if(do_after(user, 30))
- ReplaceWithEngineFloor()
- C:amount -= 2
- if (C:amount <= 0) del(C) //wtf
- playsound(src.loc, 'Deconstruct.ogg', 80, 1)
+ if (C)
+ ReplaceWithEngineFloor()
+ C:amount -= 2
+ if (C:amount <= 0) del(C) //wtf
+ playsound(src.loc, 'Deconstruct.ogg', 80, 1)
else
user << "\red You need more rods."
else
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 20ad5c612eb..c2c7214fbb3 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -168,9 +168,10 @@
break
if(clear)
L+=T
-
- usr.loc = pick(L)
-
+ if (L.len)
+ usr.loc = pick(L)
+ else
+ usr << "Teleporting to that area doesn't seem to be working currently. But at least now it tells you that."
var/list/karma_spenders = list()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 8ced9325f11..b3ec3771cc8 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1004,15 +1004,16 @@
if (istype(src.wear_suit, /obj/item/clothing/suit))
var/t1 = src.wear_suit.icon_state
src.overlays += image("icon" = 'suit.dmi', "icon_state" = text("[][]", t1, (!( src.lying ) ? null : "2")), "layer" = MOB_LAYER)
- if (src.wear_suit.blood_DNA)
- var/icon/stain_icon = null
- if (istype(src.wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/wcoat || /obj/item/clothing/suit/armor/a_i_a_ptank))
- stain_icon = icon('blood.dmi', "armorblood[!src.lying ? "" : "2"]")
- else if (istype(src.wear_suit, /obj/item/clothing/suit/det_suit || /obj/item/clothing/suit/labcoat))
- stain_icon = icon('blood.dmi', "coatblood[!src.lying ? "" : "2"]")
- else
- stain_icon = icon('blood.dmi', "suitblood[!src.lying ? "" : "2"]")
- src.overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
+ if (src.wear_suit)
+ if (src.wear_suit.blood_DNA)
+ var/icon/stain_icon = null
+ if (istype(src.wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/wcoat || /obj/item/clothing/suit/armor/a_i_a_ptank))
+ stain_icon = icon('blood.dmi', "armorblood[!src.lying ? "" : "2"]")
+ else if (istype(src.wear_suit, /obj/item/clothing/suit/det_suit || /obj/item/clothing/suit/labcoat))
+ stain_icon = icon('blood.dmi', "coatblood[!src.lying ? "" : "2"]")
+ else
+ stain_icon = icon('blood.dmi', "suitblood[!src.lying ? "" : "2"]")
+ src.overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
src.wear_suit.screen_loc = ui_oclothing
if (istype(src.wear_suit, /obj/item/clothing/suit/straight_jacket))
if (src.handcuffed)
diff --git a/code/modules/mob/living/silicon/ai/logout.dm b/code/modules/mob/living/silicon/ai/logout.dm
index 70f275daa25..51bad1a5705 100644
--- a/code/modules/mob/living/silicon/ai/logout.dm
+++ b/code/modules/mob/living/silicon/ai/logout.dm
@@ -4,8 +4,9 @@
spawn( 0 )
O.mode = 0
if(!isturf(src.loc))
- src.client.eye = src.loc
- src.client.perspective = EYE_PERSPECTIVE
+ if (src.client)
+ src.client.eye = src.loc
+ src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
src.verbs += /mob/proc/ghostize
return
\ No newline at end of file
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 4f1930ef441..73620715df8 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1403,11 +1403,12 @@
M << "\red Admin PM from-[key_name(usr, M, 0)]: [t]"
usr << "\blue Admin PM to-[key_name(M, usr, 1)]: [t]"
else
- if (M.client && M.client.holder)
- M << "\blue Reply PM from-[key_name(usr, M, 1)]: [t]"
- else
- M << "\red Reply PM from-[key_name(usr, M, 0)]: [t]"
- usr << "\blue Reply PM to-[key_name(M, usr, 0)]: [t]"
+ if (M)
+ if (M.client && M.client.holder)
+ M << "\blue Reply PM from-[key_name(usr, M, 1)]: [t]"
+ else
+ M << "\red Reply PM from-[key_name(usr, M, 0)]: [t]"
+ usr << "\blue Reply PM to-[key_name(M, usr, 0)]: [t]"
log_admin("PM: [key_name(usr)]->[key_name(M)] : [t]")
@@ -1868,7 +1869,8 @@
newmob = new/mob/dead/observer(src)
src:client:mob = newmob
- src.mind.transfer_to(newmob)
+ if (src.mind)
+ src.mind.transfer_to(newmob)
var/virus = src.virus
if (istype(src, /mob/living/silicon))
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 5509a91e7b9..ffb9519d974 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -11,10 +11,11 @@
/obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user)
..()
- src.add_fingerprint(user)
- src.health -= W.force
- src.healthcheck()
- return
+ if (W)
+ src.add_fingerprint(user)
+ src.health -= W.force
+ src.healthcheck()
+ return
/obj/machinery/power/solar/blob_act()
src.health--