Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.

Commit abebb29

Browse files
authored
pickpocketing place_in_hand (#22695)
1 parent 0642063 commit abebb29

File tree

6 files changed

+21
-13
lines changed

6 files changed

+21
-13
lines changed

code/datums/elements/strippable.dm

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@
151151
return TRUE
152152

153153
/// The proc that unequips the item from the source. This should not yield.
154-
/datum/strippable_item/proc/finish_unequip(atom/source, mob/user)
154+
/datum/strippable_item/proc/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
155155

156156
/// Returns a STRIPPABLE_OBSCURING_* define to report on whether or not this is obscured.
157157
/datum/strippable_item/proc/get_obscuring(atom/source)
@@ -277,15 +277,15 @@
277277

278278
return start_unequip_mob(get_item(source), source, user)
279279

280-
/datum/strippable_item/mob_item_slot/finish_unequip(atom/source, mob/user)
280+
/datum/strippable_item/mob_item_slot/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
281281
var/obj/item/item = get_item(source)
282282
if (isnull(item))
283283
return FALSE
284284

285285
if (!ismob(source))
286286
return FALSE
287287

288-
return finish_unequip_mob(item, source, user)
288+
return finish_unequip_mob(item, source, user, place_in_hand)
289289

290290
/// Returns the delay of equipping this item to a mob
291291
/datum/strippable_item/mob_item_slot/proc/get_equip_delay(obj/item/equipping)
@@ -300,8 +300,11 @@
300300
return TRUE
301301

302302
/// A utility function for `/datum/strippable_item`s to finish unequipping an item from a mob.
303-
/proc/finish_unequip_mob(obj/item/item, mob/source, mob/user)
304-
if (!item.doStrip(user, source))
303+
/proc/finish_unequip_mob(obj/item/item, mob/source, mob/user, place_in_hand = FALSE)
304+
if (place_in_hand && (!source.temporarilyRemoveItemFromInventory(item) || !user.put_in_hands(item, no_sound = TRUE)))
305+
place_in_hand = FALSE // drop to ground if we cant put it in hands
306+
307+
if (!place_in_hand && !item.doStrip(user, source))
305308
return FALSE
306309

307310
source.log_message("[key_name(source)] has been stripped of [item] by [key_name(user)]", LOG_ATTACK, color="red")
@@ -562,3 +565,5 @@
562565
loot.add_fingerprint(user)
563566

564567
living_source.dropItemToGround(loot)
568+
569+
finish_unequip_mob(loot, living_source, user, TRUE)

code/modules/mob/living/carbon/carbon_stripping.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,15 @@
124124

125125
return start_unequip_mob(get_item(source), source, user)
126126

127-
/datum/strippable_item/hand/finish_unequip(atom/source, mob/user)
127+
/datum/strippable_item/hand/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
128128
var/obj/item/item = get_item(source)
129129
if (isnull(item))
130130
return FALSE
131131

132132
if (!ismob(source))
133133
return FALSE
134134

135-
return finish_unequip_mob(item, source, user)
135+
return finish_unequip_mob(item, source, user, place_in_hand)
136136

137137
/datum/strippable_item/hand/left
138138
key = STRIPPABLE_ITEM_LHAND

code/modules/mob/living/carbon/human/human_stripping.dm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
159159
if (!.)
160160
warn_owner(source)
161161

162+
/datum/strippable_item/mob_item_slot/pocket/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
163+
. = ..(source, user, TRUE)
164+
162165
/datum/strippable_item/mob_item_slot/pocket/start_unequip(atom/source, mob/user)
163166
var/obj/item/item = get_item(source)
164167
if (isnull(item))

code/modules/mob/living/simple_animal/friendly/dog.dm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
169169

170170
corgi_source.place_on_head(equipping, user)
171171

172-
/datum/strippable_item/corgi_head/finish_unequip(atom/source, mob/user)
172+
/datum/strippable_item/corgi_head/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
173173
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
174174
if (!istype(corgi_source))
175175
return
@@ -215,7 +215,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
215215
corgi_source.update_corgi_fluff()
216216
corgi_source.regenerate_icons()
217217

218-
/datum/strippable_item/corgi_back/finish_unequip(atom/source, mob/user)
218+
/datum/strippable_item/corgi_back/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
219219
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
220220
if (!istype(corgi_source))
221221
return
@@ -254,7 +254,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
254254
corgi_source.add_collar(equipping, user)
255255
corgi_source.update_corgi_fluff()
256256

257-
/datum/strippable_item/corgi_collar/finish_unequip(atom/source, mob/user)
257+
/datum/strippable_item/corgi_collar/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
258258
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
259259
if (!istype(corgi_source))
260260
return
@@ -293,7 +293,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
293293
equipping.forceMove(source)
294294
corgi_source.access_card = equipping
295295

296-
/datum/strippable_item/corgi_id/finish_unequip(atom/source, mob/user)
296+
/datum/strippable_item/corgi_id/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
297297
var/mob/living/simple_animal/pet/dog/corgi/corgi_source = source
298298
if (!istype(corgi_source))
299299
return

code/modules/mob/living/simple_animal/parrot.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
255255

256256
return TRUE
257257

258-
/datum/strippable_item/parrot_headset/finish_unequip(atom/source, mob/user)
258+
/datum/strippable_item/parrot_headset/finish_unequip(atom/source, mob/user, place_in_hand = FALSE)
259259
var/mob/living/simple_animal/parrot/parrot_source = source
260260
if (!istype(parrot_source))
261261
return

code/modules/mob/living/simple_animal/simple_animal.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@
529529
if(H)
530530
H.update_appearance(UPDATE_ICON)
531531

532-
/mob/living/simple_animal/put_in_hands(obj/item/I, del_on_fail = FALSE, merge_stacks = TRUE)
532+
/mob/living/simple_animal/put_in_hands(obj/item/I, del_on_fail = FALSE, merge_stacks = TRUE, forced = FALSE, no_sound = FALSE)
533533
. = ..(I, del_on_fail, merge_stacks)
534534
update_inv_hands()
535535

0 commit comments

Comments
 (0)