mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
[MIRROR] More gripper fixes v2.0 (#11143)
Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
98303f3dd1
commit
f34807d34e
@@ -419,7 +419,11 @@
|
||||
return
|
||||
|
||||
/obj/item/stack/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/stack))
|
||||
if(istype(W, /obj/item/gripper))
|
||||
var/obj/item/gripper/G = W
|
||||
G.consolidate_stacks(src)
|
||||
|
||||
else if(istype(W, /obj/item/stack))
|
||||
var/obj/item/stack/S = W
|
||||
src.transfer_to(S)
|
||||
|
||||
|
||||
@@ -53,7 +53,14 @@
|
||||
if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room
|
||||
return FALSE
|
||||
var/obj/item/I = user.get_active_hand() // ctrl-shift-click doesn't give us the item, we have to fetch it
|
||||
if(!I)
|
||||
|
||||
if(isrobot(user)) //snowflake gripper BS because it can't be done in get_active_hand without breaking everything
|
||||
var/mob/living/silicon/robot/robot = user
|
||||
if(istype(robot.module_active, /obj/item/gripper))
|
||||
var/obj/item/gripper/gripper = robot.module_active
|
||||
I = gripper.get_current_pocket()
|
||||
|
||||
else if(!I)
|
||||
return FALSE
|
||||
return IC.attackby(I, user)
|
||||
|
||||
|
||||
@@ -1450,7 +1450,7 @@
|
||||
/datum/trait/neutral/gargoyle/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/list/trait_prefs)
|
||||
..()
|
||||
var/datum/component/gargoyle/G = H.GetComponent(added_component_path)
|
||||
if (trait_prefs)
|
||||
if(trait_prefs)
|
||||
G.tint = trait_prefs["tint"]
|
||||
G.material = lowertext(trait_prefs["material"])
|
||||
G.identifier = lowertext(trait_prefs["identifier"])
|
||||
|
||||
@@ -220,6 +220,7 @@
|
||||
if(S.get_bodytype() == SPECIES_VASILISSAN)
|
||||
W.silk_reserve = 500
|
||||
W.silk_max_reserve = 1000
|
||||
if(trait_prefs)
|
||||
W.silk_production = trait_prefs["silk_production"]
|
||||
W.silk_color = lowertext(trait_prefs["silk_color"])
|
||||
|
||||
@@ -358,7 +359,7 @@
|
||||
|
||||
/datum/trait/positive/table_passer/apply(var/datum/species/S,var/mob/living/carbon/human/H, var/list/trait_prefs)
|
||||
..()
|
||||
if (trait_prefs?["pass_table"] || !trait_prefs)
|
||||
if(trait_prefs?["pass_table"] || !trait_prefs)
|
||||
H.pass_flags |= PASSTABLE
|
||||
add_verb(H,/mob/living/proc/toggle_pass_table)
|
||||
|
||||
|
||||
@@ -157,6 +157,9 @@
|
||||
for(var/obj/item/robotic_multibelt/materials/material_belt in contents)
|
||||
if(material_belt.selected_item == O)
|
||||
return TRUE
|
||||
for(var/obj/item/gripper/gripper in contents)
|
||||
if(gripper.current_pocket == O)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/robot/proc/get_active_modules()
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
/obj/item/robotic_multibelt/medical
|
||||
name = "Robotic surgical multitool"
|
||||
desc = "An integrated surgical toolbelt."
|
||||
icon_state = "toolkit_medborg"
|
||||
icon_state = "toolkit_engiborg"
|
||||
|
||||
cyborg_integrated_tools = list(
|
||||
/obj/item/surgical/retractor/cyborg = null,
|
||||
@@ -292,7 +292,7 @@
|
||||
/obj/item/robotic_multibelt/botanical
|
||||
name = "Botanical multitool"
|
||||
desc = "An integrated botanical toolbelt."
|
||||
icon_state = "toolkit_medborg"
|
||||
icon_state = "toolkit_engiborg"
|
||||
|
||||
cyborg_integrated_tools = list(
|
||||
/obj/item/material/minihoe/cyborg = null,
|
||||
@@ -488,7 +488,7 @@
|
||||
//Has a list of items that it can hold.
|
||||
var/list/can_hold = list(BASIC_GRIPPER)
|
||||
|
||||
var/obj/item/wrapped = null // Item currently being held.
|
||||
var/obj/item/wrapped = null // Item currently being held. //Convert to weak-ref?
|
||||
|
||||
var/total_pockets = 5 //How many total inventory slots we want to have in the gripper
|
||||
|
||||
@@ -657,7 +657,6 @@
|
||||
return 0
|
||||
|
||||
/obj/item/gripper/afterattack(var/atom/target, var/mob/living/user, proximity, params)
|
||||
|
||||
if(!proximity)
|
||||
return // This will prevent them using guns at range but adminbuse can add them directly to modules, so eh.
|
||||
var/current_pocket_full = FALSE
|
||||
@@ -688,7 +687,9 @@
|
||||
|
||||
if(wrapped) //Already have an item.
|
||||
//Temporary put wrapped into user so target's attackby() checks pass.
|
||||
var/obj/previous_pocket = wrapped.loc
|
||||
var/obj/previous_pocket
|
||||
if(istype(wrapped.loc, /obj/item/storage/internal/gripper))
|
||||
previous_pocket = wrapped.loc
|
||||
wrapped.loc = user
|
||||
|
||||
//Pass the attack on to the target. This might delete/relocate wrapped.
|
||||
@@ -696,13 +697,14 @@
|
||||
if(!resolved && wrapped && target)
|
||||
wrapped.afterattack(target,user,1)
|
||||
|
||||
//If wrapped was neither deleted nor put into target, put it back into the gripper.
|
||||
if(wrapped && user && ((wrapped.loc == user) || wrapped.loc == previous_pocket))
|
||||
if((QDELETED(wrapped))) //We put our wrapped thing INTO something!
|
||||
wrapped = null
|
||||
current_pocket = pick(pockets)
|
||||
return
|
||||
//If we had a previous pocket and the wrapped isn't put into something, put it back in our pocket.
|
||||
else if((previous_pocket && wrapped.loc == user))
|
||||
wrapped.loc = previous_pocket
|
||||
else
|
||||
wrapped = null
|
||||
return
|
||||
if((QDELETED(wrapped) || (wrapped.loc != current_pocket))) //We put our wrapped thing INTO something!
|
||||
wrapped = null
|
||||
current_pocket = pick(pockets)
|
||||
return
|
||||
@@ -770,6 +772,28 @@
|
||||
|
||||
user.visible_message(span_danger("[user] removes the power cell from [A]!"), "You remove the power cell.")
|
||||
|
||||
//HELPER PROCS
|
||||
/obj/item/gripper/proc/get_current_pocket() //done as a proc so snowflake code can be found later down the line and consolidated.
|
||||
return wrapped
|
||||
|
||||
/// Consolidates material stacks by searching our pockets to see if we currently have any stacks. Done in /obj/item/stack/attackby
|
||||
/obj/item/gripper/proc/consolidate_stacks(var/obj/item/stack/stack_to_consolidate)
|
||||
if(!stack_to_consolidate || !istype(stack_to_consolidate, /obj/item/stack))
|
||||
return
|
||||
var/stacked = FALSE //So we can break the for loop 2 forloops deep.
|
||||
for(var/obj/item/storage/internal/gripper/pocket in pockets)
|
||||
if(stacked) //We've stacked our item, break!
|
||||
break
|
||||
|
||||
if(LAZYLEN(pocket.contents))
|
||||
for(var/obj/item/stack/stack in pocket.contents)
|
||||
if(istype(stack_to_consolidate, stack))
|
||||
stack_to_consolidate.transfer_to(stack)
|
||||
stacked = TRUE
|
||||
break
|
||||
|
||||
|
||||
|
||||
//Different types of grippers!
|
||||
|
||||
/obj/item/gripper/engineering
|
||||
|
||||
Reference in New Issue
Block a user