diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm
index 3a036eec8e..1765eac3ec 100644
--- a/code/game/machinery/wall_frames.dm
+++ b/code/game/machinery/wall_frames.dm
@@ -29,7 +29,7 @@
update_type_list()
var/datum/frame/frame_types/frame_type
if(!build_machine_type)
- var/datum/frame/frame_types/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_floor
+ var/datum/frame/frame_types/response = input(user, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_floor
if(!response || response.name == "Cancel")
return
frame_type = response
@@ -37,10 +37,10 @@
build_machine_type = /obj/structure/frame
if(frame_type.frame_size != 5)
- new /obj/item/stack/material/steel(usr.loc, (5 - frame_type.frame_size))
+ new /obj/item/stack/material/steel(user.loc, (5 - frame_type.frame_size))
var/ndir
- ndir = usr.dir
+ ndir = user.dir
if(!(ndir in cardinal))
return
@@ -48,13 +48,15 @@
M.fingerprints = fingerprints
M.fingerprintshidden = fingerprintshidden
M.fingerprintslast = fingerprintslast
+ if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans
+ user.drop_item()
qdel(src)
/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob)
update_type_list()
var/datum/frame/frame_types/frame_type
if(!build_machine_type)
- var/datum/frame/frame_types/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_wall
+ var/datum/frame/frame_types/response = input(user, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_wall
if(!response || response.name == "Cancel")
return
frame_type = response
@@ -62,38 +64,40 @@
build_machine_type = /obj/structure/frame
if(frame_type.frame_size != 5)
- new /obj/item/stack/material/steel(usr.loc, (5 - frame_type.frame_size))
+ new /obj/item/stack/material/steel(user.loc, (5 - frame_type.frame_size))
- if(get_dist(on_wall, usr)>1)
+ if(get_dist(on_wall, user)>1)
return
var/ndir
if(reverse)
- ndir = get_dir(usr, on_wall)
+ ndir = get_dir(user, on_wall)
else
- ndir = get_dir(on_wall, usr)
+ ndir = get_dir(on_wall, user)
if(!(ndir in cardinal))
return
- var/turf/loc = get_turf(usr)
+ var/turf/loc = get_turf(user)
var/area/A = loc.loc
if(!istype(loc, /turf/simulated/floor))
- usr << "\The frame cannot be placed on this spot."
+ to_chat(user, "\The frame cannot be placed on this spot.")
return
if(A.requires_power == 0 || A.name == "Space")
- usr << "\The [src] Alarm cannot be placed in this area."
+ to_chat(user, "\The [src] Alarm cannot be placed in this area.")
return
if(gotwallitem(loc, ndir))
- usr << "There's already an item on this wall!"
+ to_chat(user, "There's already an item on this wall!")
return
var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type)
M.fingerprints = fingerprints
M.fingerprintshidden = fingerprintshidden
M.fingerprintslast = fingerprintslast
+ if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans
+ user.drop_item()
qdel(src)
/obj/item/frame/light
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index e8d3e0ad2c..ac78f5aab9 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -199,6 +199,21 @@
wrapped = null
//update_icon()
+/obj/item/weapon/gripper/proc/drop_item_nm()
+
+ if(!wrapped)
+ for(var/obj/item/thing in src.contents)
+ thing.loc = get_turf(src)
+ return
+
+ if(wrapped.loc != src)
+ wrapped = null
+ return
+
+ wrapped.loc = get_turf(src)
+ wrapped = null
+ //update_icon()
+
/obj/item/weapon/gripper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(wrapped) //The force of the wrapped obj gets set to zero during the attack() and afterattack().
force_holder = wrapped.force
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 2fb48b877b..589f410f01 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1104,4 +1104,10 @@
return
/mob/living/silicon/robot/is_sentient()
- return braintype != "Drone"
\ No newline at end of file
+ return braintype != "Drone"
+
+
+/mob/living/silicon/robot/drop_item()
+ if(module_active && istype(module_active,/obj/item/weapon/gripper))
+ var/obj/item/weapon/gripper/G = module_active
+ G.drop_item_nm()
\ No newline at end of file
diff --git a/html/changelogs/Heroman3003 - Gripper Fixes.yml b/html/changelogs/Heroman3003 - Gripper Fixes.yml
new file mode 100644
index 0000000000..c320b73d93
--- /dev/null
+++ b/html/changelogs/Heroman3003 - Gripper Fixes.yml
@@ -0,0 +1,8 @@
+
+author: Heroman3003
+
+delete-after: True
+
+changes:
+ - bugfix: "Fixed a bug where same piece of exosuit equipment could be attached several times with exosuit gripper"
+ - bugfix: "Fixed a bug where frame parts could dupe frames with engineering gripper"