From 7fa2232fc75d0fc9189d720b3250d7427cc5eeed Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 5 Dec 2019 01:28:44 +0100 Subject: [PATCH 1/3] Adds view and viewers checks for ranged construction devices such as ARCD and RLD. --- code/game/objects/items/RCD.dm | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 016bfb5e8b..cd7735c92a 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -130,19 +130,12 @@ RLD return . /obj/item/construction/proc/range_check(atom/A, mob/user) - if(!(A in range(custom_range, get_turf(user)))) + if(!(A in range(custom_range, get_turf(user))) || !((A in view(user.client.view, user)) || (user in viewers(user.client.view, A)))) to_chat(user, "The \'Out of Range\' light on [src] blinks red.") return FALSE else return TRUE -/obj/item/construction/proc/prox_check(proximity) - if(proximity) - return TRUE - else - return FALSE - - /obj/item/construction/rcd name = "rapid-construction-device (RCD)" icon = 'icons/obj/tools.dmi' @@ -523,7 +516,12 @@ RLD /obj/item/construction/rcd/afterattack(atom/A, mob/user, proximity) . = ..() - if(!prox_check(proximity)) + if(!proximity) + if(!ranged || !range_check(A,user)) //early return not-in-range sanity. + return + if(target_check(A,user)) + user.Beam(A,icon_state="rped_upgrade",time=30) + rcd_create(A,user) return rcd_create(A, user) @@ -635,6 +633,7 @@ RLD max_matter = INFINITY matter = INFINITY upgrade = TRUE + ranged = TRUE // Ranged RCD @@ -650,20 +649,10 @@ RLD item_state = "oldrcd" has_ammobar = FALSE -/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user) - . = ..() - if(!range_check(A,user)) - return - if(target_check(A,user)) - user.Beam(A,icon_state="rped_upgrade",time=30) - rcd_create(A,user) - - // RAPID LIGHTING DEVICE - /obj/item/construction/rld name = "rapid-light-device (RLD)" desc = "A device used to rapidly provide lighting sources to an area. Reload with metal, plasteel, glass or compressed matter cartridges." From a7d2fac0e9abbe5820e9b26b2c271ed512e9eefd Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 5 Dec 2019 01:55:21 +0100 Subject: [PATCH 2/3] "Why does it tell me it's "out of range", but not to you, X-ray man?" --- code/game/objects/items/RCD.dm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index cd7735c92a..1c83d64ee8 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -130,11 +130,16 @@ RLD return . /obj/item/construction/proc/range_check(atom/A, mob/user) - if(!(A in range(custom_range, get_turf(user))) || !((A in view(user.client.view, user)) || (user in viewers(user.client.view, A)))) + if(!(A in range(custom_range, get_turf(user)))) to_chat(user, "The \'Out of Range\' light on [src] blinks red.") return FALSE - else - return TRUE + var/view_range = user.client ? user.client.view : world.view + //if user can't be seen from A (only checks surroundings' opaqueness) and can't see A. + //jarring, but it should stop people from targetting atoms they can't see... + //excluding darkness, to allow RLD to be used to light pitch black dark areas. + if(!((user in view(view_range, A)) || (user in viewers(view_range, A)))) + return FALSE + return TRUE /obj/item/construction/rcd name = "rapid-construction-device (RCD)" From 33fee5bd3787b28e74e140e167511596cd338e66 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 5 Dec 2019 02:12:34 +0100 Subject: [PATCH 3/3] Witty remark included. --- code/game/objects/items/RCD.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 1c83d64ee8..24c241aabc 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -138,6 +138,7 @@ RLD //jarring, but it should stop people from targetting atoms they can't see... //excluding darkness, to allow RLD to be used to light pitch black dark areas. if(!((user in view(view_range, A)) || (user in viewers(view_range, A)))) + to_chat(user, "You focus, pointing \the [src] at whatever outside your field of vision in the given direction... to no avail.") return FALSE return TRUE