From dcb2ae77fac104c89e26d4ca13754009b1c0ee24 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 6 Jan 2020 02:14:25 +0100 Subject: [PATCH] Porting some runtime fixes. --- code/game/objects/items/devices/PDA/PDA.dm | 20 +++++++++---------- code/game/objects/structures/grille.dm | 2 +- .../mob/living/simple_animal/bot/mulebot.dm | 3 ++- .../hostile/mining_mobs/elites/elite.dm | 3 ++- .../surgery/bodyparts/dismemberment.dm | 10 ++++++---- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index d97c07bf87..ccffa413a6 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -700,10 +700,10 @@ GLOBAL_LIST_EMPTY(PDAs) U << browse(null, "window=pda") return -/obj/item/pda/proc/remove_id() - if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) +/obj/item/pda/proc/remove_id(mob/user) + if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return - do_remove_id(usr) + do_remove_id(user) /obj/item/pda/proc/do_remove_id(mob/user) if(!id) @@ -827,23 +827,23 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/pda/proc/create_message(mob/living/U, obj/item/pda/P) send_message(U,list(P)) -/obj/item/pda/AltClick() +/obj/item/pda/AltClick(mob/user) . = ..() if(id) - remove_id() + remove_id(user) playsound(src, 'sound/machines/terminal_eject_disc.ogg', 50, 1) else - remove_pen() + remove_pen(user) playsound(src, 'sound/machines/button4.ogg', 50, 1) return TRUE -/obj/item/pda/CtrlClick() +/obj/item/pda/CtrlClick(mob/user) ..() if(isturf(loc)) //stops the user from dragging the PDA by ctrl-clicking it. return - remove_pen() + remove_pen(user) /obj/item/pda/verb/verb_toggle_light() set category = "Object" @@ -857,7 +857,7 @@ GLOBAL_LIST_EMPTY(PDAs) set src in usr if(id) - remove_id() + remove_id(usr) else to_chat(usr, "This PDA does not have an ID in it!") @@ -896,7 +896,7 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/pda/proc/id_check(mob/user, obj/item/card/id/I) if(!I) if(id && (src in user.contents)) - remove_id() + remove_id(user) return TRUE else var/obj/item/card/id/C = user.get_active_held_item() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index c0519f2504..205e87329b 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -84,7 +84,7 @@ /obj/structure/grille/attack_animal(mob/user) . = ..() - if(!shock(user, 70)) + if(!shock(user, 70) && !QDELETED(src)) //Last hit still shocks but shouldn't deal damage to the grille) take_damage(rand(5,10), BRUTE, "melee", 1) /obj/structure/grille/attack_paw(mob/user) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 426de81da0..43963b4eef 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -151,7 +151,8 @@ return /mob/living/simple_animal/bot/mulebot/bullet_act(obj/item/projectile/Proj) - if(..()) + . = ..() + if(. && !QDELETED(src)) //Got hit and not blown up yet. if(prob(50) && !isnull(load)) unload(0) if(prob(25)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index 0a8320788e..199def430e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -240,7 +240,8 @@ obj/structure/elite_tumor/proc/return_elite() INVOKE_ASYNC(src, .proc/fighters_check) //Checks to see if our fighters died. INVOKE_ASYNC(src, .proc/arena_trap) //Gets another arena trap queued up for when this one runs out. INVOKE_ASYNC(src, .proc/border_check) //Checks to see if our fighters got out of the arena somehow. - addtimer(CALLBACK(src, .proc/arena_checks), 50) + if(!QDELETED(src)) + addtimer(CALLBACK(src, .proc/arena_checks), 50) /obj/structure/elite_tumor/proc/fighters_check() if(activator != null && activator.stat == DEAD || activity == TUMOR_ACTIVE && QDELETED(activator)) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 31f08f0e87..31fc90cb04 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -22,11 +22,14 @@ SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered) drop_limb() + C.bleed(40) + + if(QDELETED(src)) //Could have dropped into lava/explosion/chasm/whatever + return TRUE if(dam_type == BURN) burn() - return 1 + return TRUE add_mob_blood(C) - C.bleed(40) var/direction = pick(GLOB.cardinals) var/t_range = rand(2,max(throw_range/2, 2)) var/turf/target_turf = get_turf(src) @@ -38,7 +41,7 @@ if(new_turf.density) break throw_at(target_turf, throw_range, throw_speed) - return 1 + return TRUE /obj/item/bodypart/chest/dismember() @@ -149,7 +152,6 @@ LB.brainmob = brainmob brainmob = null LB.brainmob.forceMove(LB) - LB.brainmob.container = LB LB.brainmob.stat = DEAD /obj/item/organ/eyes/transfer_to_limb(obj/item/bodypart/head/LB, mob/living/carbon/human/C)