diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm index 436a951d627..0e00ee6cc90 100644 --- a/code/controllers/subsystems/job.dm +++ b/code/controllers/subsystems/job.dm @@ -695,7 +695,9 @@ // Delete them from datacore. - SSrecords.remove_record_by_field("name", H.real_name) + if(!SSrecords.remove_record_by_field("fingerprint", H.get_full_print())) + // didn't find a record by fingerprint, fallback to deleting by name + SSrecords.remove_record_by_field("name", H.real_name) SSrecords.reset_manifest() log_and_message_admins("([H.mind.role_alt_title]) entered cryostorage.", user = H) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index be64b35287a..a3c324e54cf 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -176,6 +176,7 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen /datum/ai_laws/proc/delete_law(var/datum/ai_law/law) if(istype(law)) law.delete_law(src) + sorted_laws.Cut() /datum/ai_law/proc/delete_law(var/datum/ai_laws/laws) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index b5ee91f5fe9..4df09075238 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -39,6 +39,8 @@ if(stat & (NOPOWER|BROKEN)) return if(user.stat) return + user.set_machine(src) + var/data[0] var/list/all_networks[0] for(var/nw in network) @@ -124,7 +126,11 @@ if (!C.can_use() || user.stat || (get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) && !istype(user, /mob/living/silicon))) return 0 set_current(C) - user.reset_view(current_camera) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.reset_view(current_camera) + else + user.reset_view(current_camera) check_eye(user) return 1 diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 918249e0547..09a62fd14ed 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -467,9 +467,15 @@ /datum/species/proc/handle_vision(var/mob/living/carbon/human/H) var/list/vision = H.get_accumulated_vision_handlers() H.update_sight() - H.sight |= get_vision_flags(H) - H.sight |= H.equipment_vision_flags - H.sight |= vision[1] + if(H.machine && H.machine.check_eye(H) >= 0 && H.client.eye != H) + // we inherit sight flags from the machine + H.sight &= ~(get_vision_flags(H)) + H.sight &= ~(H.equipment_vision_flags) + H.sight &= ~(vision[1]) + else + H.sight |= get_vision_flags(H) + H.sight |= H.equipment_vision_flags + H.sight |= vision[1] if(H.stat == DEAD) return 1 @@ -637,4 +643,4 @@ return E.key /datum/species/proc/get_injection_modifier() - return injection_mod \ No newline at end of file + return injection_mod diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 817c4246716..f70d9773293 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -24,10 +24,10 @@ var/mob/living/next_point_time = 0 face_atom(A) if(isturf(A)) if(pointing_effect) - clear_point() + QDEL_NULL(pointing_effect) pointing_effect = new /obj/effect/decal/point(A) pointing_effect.invisibility = invisibility - addtimer(CALLBACK(src, .proc/clear_point), 20) + addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, pointing_effect), 2 SECONDS) else var/pointglow = filter(type = "drop_shadow", x = 0, y = -1, offset = 1, size = 1, color = "#F00") LAZYADD(A.filters, pointglow) @@ -980,4 +980,4 @@ default behaviour is: set hidden = 1 set name = "mov_intent" if(hud_used?.move_intent) - hud_used.move_intent.Click() \ No newline at end of file + hud_used.move_intent.Click() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b7e2fda6adf..161d32b00f2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -341,14 +341,10 @@ pointing_effect = new /obj/effect/decal/point(tile) pointing_effect.invisibility = invisibility - addtimer(CALLBACK(src, .proc/clear_point), 20) + addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, pointing_effect), 2 SECONDS) face_atom(A) return 1 - -/mob/proc/clear_point() - QDEL_NULL(pointing_effect) - /datum/mobl // I have no idea what the fuck this is, but it's better for it to be a datum than an /obj/effect. var/list/container = list() var/master @@ -1448,4 +1444,4 @@ if(!check_has_body_select()) return var/obj/screen/zone_sel/selector = mob.zone_sel - selector.set_selected_zone(next_in_list(mob.zone_sel.selecting,zones)) \ No newline at end of file + selector.set_selected_zone(next_in_list(mob.zone_sel.selecting,zones)) diff --git a/html/changelogs/johnwildkins-oldfix.yml b/html/changelogs/johnwildkins-oldfix.yml new file mode 100644 index 00000000000..3e8f4ef804b --- /dev/null +++ b/html/changelogs/johnwildkins-oldfix.yml @@ -0,0 +1,9 @@ +author: JohnWildkins + +delete-after: True + +changes: + - bugfix: "Cryoing with the same mob name as another player should no longer remove both players from the manifest and records system." + - bugfix: "Malf/traitor AI law deletion now correctly rebuilds the law list, so carding a malf AI no longer reveals extra laws (other than law zero)." + - bugfix: "Mobs that die while pointing no longer leave an infinite point marker." + - bugfix: "Thermals, mesons, and material scanner overlays no longer function through security camera monitors."