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--