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