diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm index bdbc9d5f1d4..6817b7464bb 100644 --- a/code/datums/uplink/uplink_categories.dm +++ b/code/datums/uplink/uplink_categories.dm @@ -17,7 +17,7 @@ if(item.can_view(U)) return 1 - if(!antag_roles.len) + if(!LAZYLEN(antag_roles)) return 1 return 0 diff --git a/code/modules/integrated_electronics/core/helpers.dm b/code/modules/integrated_electronics/core/helpers.dm index e221d0c656f..35f7c60374b 100644 --- a/code/modules/integrated_electronics/core/helpers.dm +++ b/code/modules/integrated_electronics/core/helpers.dm @@ -40,8 +40,6 @@ A.push_data() /datum/integrated_io/proc/get_data() - if(isnull(data)) - return if(isweakref(data)) return data.resolve() return data diff --git a/code/modules/integrated_electronics/subtypes/logic.dm b/code/modules/integrated_electronics/subtypes/logic.dm index 8bf55649ec5..60edfa66859 100644 --- a/code/modules/integrated_electronics/subtypes/logic.dm +++ b/code/modules/integrated_electronics/subtypes/logic.dm @@ -1,7 +1,7 @@ /obj/item/integrated_circuit/logic name = "logic gate" desc = "This tiny chip will decide for you!" - extended_desc = "Logic circuits will treat a null, 0, and a \"\" string value as FALSE and anything else as TRUE." + extended_desc = "Logic circuits will treat a null, 0, and a \"\" string value as FALSE and anything else as TRUE. If inputs are of mismatching type, expect undocumented behaviour." complexity = 3 outputs = list("result" = IC_PINTYPE_BOOLEAN) activators = list("compare" = IC_PINTYPE_PULSE_IN) @@ -22,7 +22,11 @@ /obj/item/integrated_circuit/logic/binary/do_work() var/data1 = get_pin_data(IC_INPUT, 1) var/data2 = get_pin_data(IC_INPUT, 2) - var/result = !!do_compare(data1, data2) + + var/result = FALSE + if (comparable(data1, data2)) + result = !!do_compare(data1, data2) + set_pin_data(IC_OUTPUT, 1, result) push_data() @@ -34,6 +38,18 @@ /obj/item/integrated_circuit/logic/binary/proc/do_compare(A, B) return FALSE +/obj/item/integrated_circuit/logic/binary/proc/comparable(A, B) + if (isnum(A) && isnum(B)) + . = TRUE + else if (istext(A) && istext(B)) + . = TRUE + else if (islist(A) && islist(B)) + . = TRUE + else if (isdatum(A) && isdatum(B)) + . = TRUE + else + . = FALSE + /obj/item/integrated_circuit/logic/unary inputs = list( "A" = IC_PINTYPE_ANY diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm index 5ecae44b822..7b358cbed0b 100644 --- a/code/modules/mob/living/bot/cleanbot.dm +++ b/code/modules/mob/living/bot/cleanbot.dm @@ -291,7 +291,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th get_targets() if("patrol") should_patrol = !should_patrol - patrol_path = null + patrol_path = list() if("freq") var/freq = text2num(input("Select frequency for navigation beacons", "Frequnecy", num2text(beacon_freq / 10))) * 10 if (freq > 0) diff --git a/code/modules/organs/subtypes/parasite.dm b/code/modules/organs/subtypes/parasite.dm index eebe0dae190..4eb1a32964c 100644 --- a/code/modules/organs/subtypes/parasite.dm +++ b/code/modules/organs/subtypes/parasite.dm @@ -48,6 +48,9 @@ /obj/item/organ/parasite/kois/process() ..() + if (!owner) + return + if(prob(10) && !(owner.species.flags & NO_PAIN)) owner << "You feel a stinging pain in your abdomen!" owner.emote("me",1,"winces slightly.") diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 4b60296d329..586e4fc006e 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -94,7 +94,7 @@ if(href_list["togglep"]) if(!wires.IsIndexCut(PARTICLE_TOGGLE_WIRE)) - src.toggle_power() + src.toggle_power(usr) else if(href_list["scan"]) src.part_scan() @@ -212,11 +212,11 @@ return 0 -/obj/machinery/particle_accelerator/control_box/proc/toggle_power() +/obj/machinery/particle_accelerator/control_box/proc/toggle_power(mob/user) src.active = !src.active - investigate_log("turned [active?"ON":"OFF"] by [usr ? usr.key : "outside forces"]","singulo") - message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1) - log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr.ckey]([usr]) in ([x],[y],[z])",ckey=key_name(usr)) + investigate_log("turned [active?"ON":"OFF"] by [user ? user.key : "outside forces"]","singulo") + message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(user, TRUE, highlight_special = TRUE)] in ([x],[y],[z] - JMP)",0,1) + log_game("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(user)] in ([x],[y],[z])",ckey=key_name(user)) if(src.active) update_use_power(2) for(var/obj/structure/particle_accelerator/part in connected_parts) diff --git a/code/modules/projectiles/targeting/targeting_triggers.dm b/code/modules/projectiles/targeting/targeting_triggers.dm index 8435dc6d0a5..4c165ea658e 100644 --- a/code/modules/projectiles/targeting/targeting_triggers.dm +++ b/code/modules/projectiles/targeting/targeting_triggers.dm @@ -10,7 +10,7 @@ /obj/aiming_overlay/proc/trigger(var/perm) - if((user.client.prefs.toggles_secondary & SAFETY_CHECK) && user.a_intent != I_HURT) //Check this first to save time. + if(user && user.client && (user.client.prefs.toggles_secondary & SAFETY_CHECK) && user.a_intent != I_HURT) //Check this first to save time. user << "You refrain from firing, as you aren't on harm intent." return if(!owner || !aiming_with || !aiming_at || !locked) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 9e78dca6812..290fdda4810 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -33,17 +33,16 @@ reagents.add_reagent("nutriment",nutriment_amt,nutriment_desc) /obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M) - if(!usr) usr = M if(!reagents.total_volume) M.visible_message("[M] finishes eating \the [src].","You finish eating \the [src].") - usr.drop_from_inventory(src) //so icons update :[ + M.drop_from_inventory(src) //so icons update :[ if(trash) if(ispath(trash,/obj/item)) - var/obj/item/TrashItem = new trash(usr) - usr.put_in_hands(TrashItem) + var/obj/item/TrashItem = new trash(M) + M.put_in_hands(TrashItem) else if(istype(trash,/obj/item)) - usr.put_in_hands(trash) + M.put_in_hands(trash) qdel(src) return @@ -390,7 +389,9 @@ if(!src && !user.client) user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]") qdel(src) - On_Consume(user) + + if (reagents) + On_Consume(user) ////////////////////////////////////////////////// ////////////////////////////////////////////Snacks @@ -4874,4 +4875,4 @@ bitesize = 5 center_of_mass = list("x"=16, "y"=16) nutriment_desc = list("regret" = 6) - nutriment_amt = 6 \ No newline at end of file + nutriment_amt = 6 diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 6d1c46d9fb2..6d1df1fe9f0 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -166,6 +166,9 @@ explode() /obj/structure/reagent_dispensers/fueltank/proc/explode() + if (QDELETED(src)) + return + if (reagents.total_volume > 500) explosion(src.loc,1,2,4) else if (reagents.total_volume > 100) diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm index d5f2cb7731a..1f09d92ca4f 100644 --- a/code/modules/shieldgen/sheldwallgen.dm +++ b/code/modules/shieldgen/sheldwallgen.dm @@ -58,6 +58,9 @@ power = 0 return 0 var/turf/T = src.loc + if (!istype(T)) + power = 0 + return 0 var/obj/structure/cable/C = T.get_cable_node() var/datum/powernet/PN @@ -106,7 +109,7 @@ "You hear heavy droning fade out") icon_state = "Shield_Gen" src.active = 0 - for(var/dir in list(1,2,4,8)) + for(var/dir in list(1,2,4,8)) cleanup(dir) /obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0) diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index bde7ecd1e64..76bb28e1df0 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -28,7 +28,7 @@ if(get_dir(src, possible_gen) == src.dir) possible_gen.owned_capacitor = src break - + /obj/machinery/shield_capacitor/emag_act(var/remaining_charges, var/mob/user) if(prob(75)) src.locked = !src.locked @@ -106,7 +106,13 @@ //see if we can connect to a power net. var/datum/powernet/PN var/turf/T = src.loc + + if (!istype(T)) + active = 0 + return + var/obj/structure/cable/C = T.get_cable_node() + if (C) PN = C.powernet