From d27899ce64e94a055702384e0232727aafa898ea Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Tue, 14 Feb 2017 02:52:56 -0500 Subject: [PATCH] Unequip refactor fix pack (#24040) * Fixes drag drop deletion * Fix it for clothing as well * Do it properly * Various other incap checks I noticed from the unequip refactor * Time to generalize this shitty shit * PADDLING!!! * A whole bunch of ree --- code/game/objects/items/toys.dm | 8 ++------ code/game/objects/items/weapons/defib.dm | 8 ++------ .../objects/items/weapons/storage/firstaid.dm | 13 +++--------- .../objects/items/weapons/storage/storage.dm | 9 ++------- .../objects/items/weapons/tanks/watertank.dm | 5 +---- code/modules/assembly/bomb.dm | 2 +- code/modules/clothing/clothing.dm | 10 +++------- .../mining/lavaland/necropolis_chests.dm | 8 ++------ code/modules/mob/inventory.dm | 20 +++++++++++++++---- .../computers/item/computer_components.dm | 1 + .../modular_computers/hardware/card_slot.dm | 12 +++++++---- code/modules/paperwork/paper_cutter.dm | 6 +----- code/modules/paperwork/paperbin.dm | 6 +----- .../guns/ballistic/laser_gatling.dm | 7 ++----- 14 files changed, 45 insertions(+), 70 deletions(-) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 73a75a4f7cd..3a2ed505cb1 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -766,12 +766,8 @@ else if(istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!remove_item_from_storage(M)) - M.temporarilyRemoveItemFromInventory(src, TRUE) - if(!M.put_in_hand(src, H.held_index)) - qdel(src) - return - usr << "You pick up the deck." + if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) + usr << "You pick up the deck." else usr << "You can't reach it from here!" diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index d13d469812f..965c9fe1463 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -93,13 +93,9 @@ /obj/item/weapon/defibrillator/MouseDrop(obj/over_object) if(ismob(src.loc)) var/mob/M = src.loc - if(istype(over_object, /obj/screen/inventory/hand)) + if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!M.temporarilyRemoveItemFromInventory(src)) - return - if(!M.put_in_hand(src, H.held_index)) - qdel(src) //wewie - + M.putItemFromInventoryInHandIfPossible(src, H.held_index) /obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user, params) if(W == paddles) diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 2229d785467..e82aaca5281 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -138,21 +138,14 @@ var/mob/M = usr if(!istype(over_object, /obj/screen) || !Adjacent(M)) return ..() - if(!M.restrained() && !M.stat && istype(over_object, /obj/screen/inventory/hand)) + if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!M.temporarilyRemoveItemFromInventory(src)) - return - if(!M.put_in_hand(src,H.held_index)) - qdel(src) - return - src.add_fingerprint(usr) - return + if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) + add_fingerprint(usr) if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) if(usr.s_active) usr.s_active.close(usr) src.show_to(usr) - return - return /obj/item/weapon/storage/box/silver_sulf name = "box of silver sulfadiazine patches" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 30dca0f3ee6..513a8fee8d3 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -45,7 +45,7 @@ show_to(M) return - if(!M.restrained() && !M.stat) + if(!M.incapacitated()) if(!istype(over_object, /obj/screen)) return content_can_dump(over_object, M) @@ -54,14 +54,9 @@ playsound(loc, "rustle", 50, 1, -5) - if(istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!M.temporarilyRemoveItemFromInventory(src)) - return - if(!M.put_in_hand(src,H.held_index)) - qdel(src) - return + M.putItemFromInventoryInHandIfPossible(src, H.held_index) add_fingerprint(usr) diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index f6900215f43..dca3668758d 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -85,10 +85,7 @@ var/mob/M = src.loc if(istype(M) && istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!M.temporarilyRemoveItemFromInventory(src)) - return - M.put_in_hand(src, H.held_index) - + M.putItemFromInventoryInHandIfPossible(src, H.held_index) /obj/item/weapon/watertank/attackby(obj/item/W, mob/user, params) if(W == noz) diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 96f3bddba2d..f5ce8bb9b88 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -93,7 +93,7 @@ M.temporarilyRemoveItemFromInventory(src, TRUE) //Remove the tank from your character,in case you were holding it if(!M.put_in_hands(R)) //Equips the bomb if possible, or puts it on the floor. - forceMove(M.loc) + forceMove(get_turf(M)) R.bombassembly = S //Tell the bomb about its assembly part S.master = R //Tell the assembly about its new owner diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index fa252f4c066..052ef5ac029 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -46,14 +46,10 @@ if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech return - if(!M.restrained() && !M.stat && loc == M && istype(over_object, /obj/screen/inventory/hand)) + if(!M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!M.temporarilyRemoveItemFromInventory(src)) - return - if(!M.put_in_hand(src, H.held_index)) - qdel(src) - return - add_fingerprint(usr) + if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) + add_fingerprint(usr) /obj/item/clothing/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) if(pockets) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index fece3a809b8..2e8b6f7c241 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -331,17 +331,13 @@ if (istype(usr.loc,/obj/mecha)) return - if(!M.restrained() && !M.stat) + if(!M.incapacitated()) playsound(loc, "rustle", 50, 1, -5) if(istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!M.temporarilyRemoveItemFromInventory(src)) - return - if(!M.put_in_hand(src, H.held_index)) - qdel(src) - return //fuck these things + M.putItemFromInventoryInHandIfPossible(src, H.held_index) add_fingerprint(usr) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index ab0d2d0241a..191c9f12ee2 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -148,14 +148,15 @@ /mob/proc/can_equip(obj/item/I, slot, disable_warning = 0) return FALSE - -/mob/proc/put_in_hand(obj/item/I, hand_index) +/mob/proc/can_put_in_hand(I, hand_index) if(!put_in_hand_check(I)) return FALSE if(!has_hand_for_held_index(hand_index)) return FALSE - var/obj/item/curr = held_items[hand_index] - if(!curr) + return !held_items[hand_index] + +/mob/proc/put_in_hand(obj/item/I, hand_index) + if(can_put_in_hand(I, hand_index)) I.forceMove(src) held_items[hand_index] = I I.layer = ABOVE_HUD_LAYER @@ -255,6 +256,17 @@ return FALSE return TRUE +/mob/proc/putItemFromInventoryInHandIfPossible(obj/item/I, hand_index, force_removal = FALSE) + if(!can_put_in_hand(I, hand_index)) + return FALSE + if(!temporarilyRemoveItemFromInventory(I, force_removal)) + return FALSE + I.remove_item_from_storage(src) + if(!put_in_hand(I, hand_index)) + qdel(I) + CRASH("Assertion failure: putItemFromInventoryInHandIfPossible") //should never be possible + return TRUE + //The following functions are the same save for one small difference //for when you want the item to end up on the ground diff --git a/code/modules/modular_computers/computers/item/computer_components.dm b/code/modules/modular_computers/computers/item/computer_components.dm index be032a3ec5b..7335a2f200f 100644 --- a/code/modules/modular_computers/computers/item/computer_components.dm +++ b/code/modules/modular_computers/computers/item/computer_components.dm @@ -24,6 +24,7 @@ user << "You install \the [H] into \the [src]." H.holder = src + H.forceMove(src) H.on_install(src, user) diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index 417690a7e05..b330103f2fa 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -68,14 +68,18 @@ var/ejected = 0 if(stored_card && (!slot || slot == 1)) - stored_card.forceMove(get_turf(src)) - stored_card.verb_pickup() + if(user) + user.put_in_hands(stored_card) + else + stored_card.forceMove(get_turf(src)) stored_card = null ejected++ if(stored_card2 && (!slot || slot == 2)) - stored_card2.forceMove(get_turf(src)) - stored_card2.verb_pickup() + if(user) + user.put_in_hands(stored_card2) + else + stored_card2.forceMove(get_turf(src)) stored_card2 = null ejected++ diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index becfab8b41b..79ed3b32548 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -100,11 +100,7 @@ else if(istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!remove_item_from_storage(M)) - M.temporarilyRemoveItemFromInventory(src, TRUE) - if(!M.put_in_hand(src, H.held_index)) - qdel(src) //rip - return + M.putItemFromInventoryInHandIfPossible(src, H.held_index) add_fingerprint(M) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 775880a29e9..a15bfd4cba4 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -56,11 +56,7 @@ else if(istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!remove_item_from_storage(M)) - M.temporarilyRemoveItemFromInventory(src, TRUE) - if(!M.put_in_hand(src, H.held_index)) - qdel(src) - return + M.putItemFromInventoryInHandIfPossible(src, H.held_index) add_fingerprint(M) diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm index 8f8585c29af..75263937d72 100644 --- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm +++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm @@ -63,14 +63,11 @@ if(!over_object) return - if(!M.restrained() && !M.stat) + if(!M.incapacitated()) if(istype(over_object, /obj/screen/inventory/hand)) var/obj/screen/inventory/hand/H = over_object - if(!M.temporarilyRemoveItemFromInventory(src)) - return - if(!M.put_in_hand(src, H.held_index)) - qdel(src) + M.putItemFromInventoryInHandIfPossible(src, H.held_index) /obj/item/weapon/minigunpack/update_icon()