From a903e400dd16606f632f83809d04e2741fbe86cd Mon Sep 17 00:00:00 2001 From: Boop Date: Tue, 17 Jun 2014 20:35:48 +0100 Subject: [PATCH] Fixes #5088 also fixes more runtimes that mloc gave me --- code/WorkInProgress/buildmode.dm | 3 +- code/_onclick/click.dm | 6 ++-- code/game/objects/effects/effect_system.dm | 18 ---------- .../objects/items/weapons/extinguisher.dm | 1 + code/modules/admin/verbs/adminpm.dm | 2 +- code/modules/mob/living/say.dm | 5 +-- code/modules/mob/living/silicon/ai/ai.dm | 34 ++++++------------- 7 files changed, 22 insertions(+), 47 deletions(-) diff --git a/code/WorkInProgress/buildmode.dm b/code/WorkInProgress/buildmode.dm index ceb1954a5d..d93d45fec5 100644 --- a/code/WorkInProgress/buildmode.dm +++ b/code/WorkInProgress/buildmode.dm @@ -259,7 +259,8 @@ if(4) if(pa.Find("left")) - holder.throw_atom = object + if(istype(object, /atom/movable)) + holder.throw_atom = object if(pa.Find("right")) if(holder.throw_atom) holder.throw_atom.throw_at(object, 10, 1) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 093899c5c4..147d790919 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -16,9 +16,11 @@ Note that this proc can be overridden, and is in the case of screen objects. */ /atom/Click(location,control,params) - usr.ClickOn(src, params) + if(src) + usr.ClickOn(src, params) /atom/DblClick(location,control,params) - usr.DblClickOn(src,params) + if(src) + usr.DblClickOn(src,params) /* Standard mob ClickOn() diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 5585c033c1..0eb8685aec 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -27,24 +27,6 @@ would spawn and follow the beaker, even if it is carried or thrown. reagents.delete() return - -/obj/effect/effect/water/New() - ..() - //var/turf/T = src.loc - //if (istype(T, /turf)) - // T.firelevel = 0 //TODO: FIX - spawn( 70 ) - delete() - return - return - -/obj/effect/effect/water/Del() - //var/turf/T = src.loc - //if (istype(T, /turf)) - // T.firelevel = 0 //TODO: FIX - ..() - return - /obj/effect/effect/water/Move(turf/newloc) //var/turf/T = src.loc //if (istype(T, /turf)) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 0db404c021..1dd2832fd9 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -123,6 +123,7 @@ W.reagents.reaction(atm) if(W.loc == my_target) break sleep(2) + W.delete() if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0)) user.inertia_dir = get_dir(target, user) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index efea3d1609..bdc93347ff 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -114,7 +114,7 @@ //play the recieving admin the adminhelp sound (if they have them enabled) //non-admins shouldn't be able to disable this - if(C.prefs.toggles & SOUND_ADMINHELP) + if(C.prefs && C.prefs.toggles & SOUND_ADMINHELP) C << 'sound/effects/adminhelp.ogg' log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 89d6302597..98d64231ec 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -103,7 +103,7 @@ var/list/department_radio_keys = list( var/obj/O = I hearturfs += O.locs[1] objects |= O - + for(var/mob/M in player_list) if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) listening |= M @@ -113,7 +113,8 @@ var/list/department_radio_keys = list( for(var/obj/O in objects) spawn(0) - O.hear_talk(src, message, verb, speaking) + if(O) //It's possible that it could be deleted in the meantime. + O.hear_talk(src, message, verb, speaking) var/speech_bubble_test = say_test(message) var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]") diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 77ec775059..3248f9dcfa 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -241,13 +241,13 @@ var/list/ai_list = list() for (var/area_name in alarmlist) var/datum/alarm/alarm = alarmlist[area_name] dat += "" - + var/cameratext = "" if (alarm.cameras) for (var/obj/machinery/camera/I in alarm.cameras) cameratext += text("[][]", (cameratext=="") ? "" : " | ", src, I, I.c_tag) dat += text("-- [] ([])", alarm.area.name, (cameratext)? cameratext : "No Camera") - + if (alarm.sources.len > 1) dat += text(" - [] sources", alarm.sources.len) dat += "
\n" @@ -398,23 +398,11 @@ var/list/ai_list = list() if (href_list["track"]) var/mob/target = locate(href_list["track"]) in mob_list -/* - var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list - if(A && target) - A.ai_actual_track(target) -*/ - //Strip off any "(as Derplord)". - //If there's a way to do this via a var that doesn't give the AI extra info, please let me know. - var/seeking = target.name - var/index = findtext(seeking, "(as ") - if(index) - seeking = copytext(seeking, 1, index-1) - - if(target && html_decode(href_list["trackname"]) == seeking) + if(target && (!istype(target, /mob/living/carbon/human) || html_decode(href_list["trackname"]) == target:get_face_name())) ai_actual_track(target) - else - src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]." + + src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]." return else if (href_list["faketrack"]) @@ -530,24 +518,24 @@ var/list/ai_list = list() /mob/living/silicon/ai/triggerAlarm(var/class, area/A, list/cameralist, var/source) if (stat == 2) return 1 - + ..() - + var/cameratext = "" for (var/obj/machinery/camera/C in cameralist) cameratext += "[(cameratext == "")? "" : "|"][C.c_tag]" - + queueAlarm("--- [class] alarm detected in [A.name]! ([(cameratext)? cameratext : "No Camera"])", class) - + if (viewalerts) ai_alerts() /mob/living/silicon/ai/cancelAlarm(var/class, area/A as area, var/source) var/has_alarm = ..() - + if (!has_alarm) queueAlarm(text("--- [] alarm in [] has been cleared.", class, A.name), class, 0) if (viewalerts) ai_alerts() - + return has_alarm /mob/living/silicon/ai/cancel_camera()