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"