mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Fixes for gripper interaction with frame parts and mecha equipment (#5025)
* possible fix * truly a fix * return of the lost comment * and lost slash too * stray not-my comment deleted * added proper changelog * replaced << with to_chat()
This commit is contained in:
@@ -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 << "<span class='danger'>\The frame cannot be placed on this spot.</span>"
|
||||
to_chat(user, "<span class='danger'>\The frame cannot be placed on this spot.</span>")
|
||||
return
|
||||
|
||||
if(A.requires_power == 0 || A.name == "Space")
|
||||
usr << "<span class='danger'>\The [src] Alarm cannot be placed in this area.</span>"
|
||||
to_chat(user, "<span class='danger'>\The [src] Alarm cannot be placed in this area.</span>")
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
usr << "<span class='danger'>There's already an item on this wall!</span>"
|
||||
to_chat(user, "<span class='danger'>There's already an item on this wall!</span>")
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1105,3 +1105,9 @@
|
||||
|
||||
/mob/living/silicon/robot/is_sentient()
|
||||
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()
|
||||
8
html/changelogs/Heroman3003 - Gripper Fixes.yml
Normal file
8
html/changelogs/Heroman3003 - Gripper Fixes.yml
Normal file
@@ -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"
|
||||
Reference in New Issue
Block a user