diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index c569a2c59a..41f2c7142f 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -237,7 +237,7 @@ return /datum/reagent/blood/jellyblood if(dna?.species?.exotic_blood) return dna.species.exotic_blood - else if((NOBLOOD in dna.species.species_traits) || (HAS_TRAIT(src, TRAIT_NOCLONE))) + else if((dna && (NOBLOOD in dna.species.species_traits)) || HAS_TRAIT(src, TRAIT_NOCLONE)) return else return /datum/reagent/blood diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index 2f0aa00027..fcb035f586 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -28,6 +28,16 @@ /datum/duel/New() id = next_id++ +/datum/duel/Destroy() + if(gun_A) + gun_A.duel = null + gun_A = null + if(gun_B) + gun_B.duel = null + gun_B = null + STOP_PROCESSING(SSobjs, duel) + . = ..() + /datum/duel/proc/try_begin() //Check if both guns are held and if so begin. var/mob/living/A = get_duelist(gun_A) @@ -45,13 +55,13 @@ message_duelists("Set your gun setting and move [required_distance] steps away from your opponent.") - START_PROCESSING(SSobj,src) + START_PROCESSING(SSobj, src) -/datum/duel/proc/get_duelist(obj/gun) - var/mob/living/G = gun.loc - if(!istype(G) || !G.is_holding(gun)) - return null - return G +/datum/duel/proc/get_duelist(obj/item/gun/energy/dueling/G) + var/mob/living/L = gun.loc + if(!istype(L) || !L.is_holding(G)) + return + return L /datum/duel/proc/message_duelists(message) var/mob/living/LA = get_duelist(gun_A) @@ -66,7 +76,7 @@ /datum/duel/proc/end() message_duelists("Duel finished. Re-engaging safety.") - STOP_PROCESSING(SSobj,src) + STOP_PROCESSING(SSobj, src) state = DUEL_IDLE /datum/duel/process() @@ -129,10 +139,11 @@ return FALSE if(!isturf(A.loc) || !isturf(B.loc)) return FALSE - if(get_dist(A,B) != required_distance) + if(get_dist(A, B) != required_distance) return FALSE - for(var/turf/T in getline(get_turf(A),get_turf(B))) - if(is_blocked_turf(T,TRUE)) + for(var/i in getline(A.loc, B.loc)) + var/turf/T = i + if(is_blocked_turf(T, TRUE)) return FALSE return TRUE @@ -180,7 +191,6 @@ return "duel_red" /obj/item/gun/energy/dueling/attack_self(mob/living/user) - . = ..() if(duel.state == DUEL_IDLE) duel.try_begin() else @@ -205,12 +215,9 @@ add_overlay(setting_overlay) /obj/item/gun/energy/dueling/Destroy() - . = ..() - if(duel.gun_A == src) - duel.gun_A = null - if(duel.gun_B == src) - duel.gun_B = null - duel = null + if(duel) + qdel(duel) + return ..() /obj/item/gun/energy/dueling/can_trigger_gun(mob/living/user) . = ..() @@ -234,10 +241,8 @@ if(duel.state == DUEL_READY) duel.confirmations[src] = TRUE to_chat(user,"You confirm your readiness.") - return else if(!is_duelist(target)) //I kinda want to leave this out just to see someone shoot a bystander or missing. to_chat(user,"[src] safety system prevents shooting anyone but your designated opponent.") - return else duel.fired[src] = TRUE . = ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 2d177318aa..2974df29a6 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -356,7 +356,6 @@ replace_beaker(user, B) to_chat(user, "You add [B] to [src].") updateUsrDialog() - update_icon() else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/card/emag)) to_chat(user, "You can't load [I] into [src]!") return ..()