mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 22:19:30 +01:00
[semi-modular] thieving gloves (#8772)
* yeet * goddamn fucking trailing newline * edit: I reread the bounty * leftover from: I reread the bounty * *more* leftover from: I reread the bounty * speedup * here too * empty commit for linter reruns * there * remembered the newline this time * okay I forgot that
This commit is contained in:
@@ -29,3 +29,8 @@
|
||||
|
||||
/// This slot can't be seen, but can be accessed.
|
||||
#define STRIPPABLE_OBSCURING_HIDDEN 2
|
||||
|
||||
//SKYRAT EDIT ADDITION BEGIN - THIEVING GLOVES
|
||||
#define THIEVING_GLOVES_STRIP_SLOWDOWN 0.5 //a multiplier for the amount of time it takes to strip someone
|
||||
#define NORMAL_STRIP_SLOWDOWN 1
|
||||
//SKYRAT EDIT END
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#define TRAIT_FREE_GHOST "free_ghost" // Can ghost and return freely with this trait
|
||||
#define QUIRK_LINGUIST "Linguist" // Extra language point.
|
||||
#define GLUED_ITEM_TRAIT "glued-item" // This is for glued items, undroppable. Syndie glue applies this.
|
||||
#define TRAIT_STICKY_FINGERS "sticky_fingers" //This is so a mob can strip items faster and picks them up after
|
||||
/// This makes trait makes it so that the person cannot be infected by the zombie virus.
|
||||
#define TRAIT_MUTANT_IMMUNE "mutant_immune"
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@
|
||||
/// Should we warn about dangerous clothing?
|
||||
var/warn_dangerous_clothing = TRUE
|
||||
|
||||
/// Can it be silent?
|
||||
var/can_be_silent = FALSE //SKYRAT EDIT ADDITION - THIEVING GLOVES
|
||||
|
||||
/// Gets the item from the given source.
|
||||
/datum/strippable_item/proc/get_item(atom/source)
|
||||
|
||||
@@ -148,18 +151,22 @@
|
||||
if (isnull(item))
|
||||
return FALSE
|
||||
|
||||
source.visible_message(
|
||||
span_warning("[user] tries to remove [source]'s [item.name]."),
|
||||
span_userdanger("[user] tries to remove your [item.name]."),
|
||||
ignored_mobs = user,
|
||||
)
|
||||
//SKYRAT EDIT CHANGE START - THIEVING GLOVES
|
||||
var/is_silent = can_be_silent && HAS_TRAIT(user, TRAIT_STICKY_FINGERS)
|
||||
if (!is_silent)
|
||||
source.visible_message(
|
||||
span_warning("[user] tries to remove [source]'s [item.name]."),
|
||||
span_userdanger("[user] tries to remove your [item.name]]."),
|
||||
ignored_mobs = user,
|
||||
)
|
||||
//SKYRAT EDIT CHANGE END
|
||||
|
||||
to_chat(user, span_danger("You try to remove [source]'s [item]..."))
|
||||
user.log_message("[key_name(source)] is being stripped of [item] by [key_name(user)]", LOG_ATTACK, color="red")
|
||||
source.log_message("[key_name(source)] is being stripped of [item] by [key_name(user)]", LOG_VICTIM, color="red", log_globally=FALSE)
|
||||
item.add_fingerprint(src)
|
||||
|
||||
if(ishuman(source))
|
||||
if(ishuman(source) && !is_silent) //SKYRAT EDIT ADDITION - THIEVING GLOVES ORIGINAL if(ishuman(source))
|
||||
var/mob/living/carbon/human/victim_human = source
|
||||
if(victim_human.key && !victim_human.client) // AKA braindead
|
||||
if(victim_human.stat <= SOFT_CRIT && LAZYLEN(victim_human.afk_thefts) <= AFK_THEFT_MAX_MESSAGES)
|
||||
@@ -291,7 +298,9 @@
|
||||
|
||||
/// A utility function for `/datum/strippable_item`s to start unequipping an item from a mob.
|
||||
/proc/start_unequip_mob(obj/item/item, mob/source, mob/user, strip_delay)
|
||||
if (!do_mob(user, source, strip_delay || item.strip_delay, interaction_key = REF(item)))
|
||||
//SKYRAT EDIT ADDITION - THIEVING GLOVES
|
||||
//if (!do_mob(user, source, strip_delay || item.strip_delay, interaction_key = REF(item)))
|
||||
if (!do_mob(user, source, (strip_delay || item.strip_delay) * (HAS_TRAIT(user, TRAIT_STICKY_FINGERS) ? THIEVING_GLOVES_STRIP_SLOWDOWN : NORMAL_STRIP_SLOWDOWN), interaction_key = REF(item)))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -1060,7 +1060,15 @@ attack_basic_mob
|
||||
return !HAS_TRAIT(src, TRAIT_NODROP) && !(item_flags & ABSTRACT)
|
||||
|
||||
/obj/item/proc/doStrip(mob/stripper, mob/owner)
|
||||
return owner.dropItemToGround(src)
|
||||
//SKYRAT EDIT CHANGE BEGIN - THIEVING GLOVES - ORIGINAL: return owner.dropItemToGround(src)
|
||||
if (!owner.dropItemToGround(src))
|
||||
return FALSE
|
||||
if (HAS_TRAIT(stripper, TRAIT_STICKY_FINGERS))
|
||||
stripper.put_in_hands(src)
|
||||
return TRUE
|
||||
//SKYRAT EDIT END
|
||||
|
||||
|
||||
|
||||
///Does the current embedding var meet the criteria for being harmless? Namely, does it have a pain multiplier and jostle pain mult of 0? If so, return true.
|
||||
/obj/item/proc/isEmbedHarmless()
|
||||
|
||||
@@ -119,6 +119,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
|
||||
/datum/strippable_item/mob_item_slot/id
|
||||
key = STRIPPABLE_ITEM_ID
|
||||
item_slot = ITEM_SLOT_ID
|
||||
can_be_silent = TRUE //SKYRAT EDIT ADDITION
|
||||
|
||||
/datum/strippable_item/mob_item_slot/belt
|
||||
key = STRIPPABLE_ITEM_BELT
|
||||
@@ -135,6 +136,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
|
||||
/datum/strippable_item/mob_item_slot/pocket
|
||||
/// Which pocket we're referencing. Used for visible text.
|
||||
var/pocket_side
|
||||
can_be_silent = TRUE //SKYRAT EDIT ADDITION
|
||||
|
||||
/datum/strippable_item/mob_item_slot/pocket/get_obscuring(atom/source)
|
||||
return isnull(get_item(source)) \
|
||||
@@ -163,7 +165,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
|
||||
|
||||
var/result = start_unequip_mob(item, source, user, POCKET_STRIP_DELAY)
|
||||
|
||||
if (!result)
|
||||
if (!result && !HAS_TRAIT(user, TRAIT_STICKY_FINGERS)) //SKYRAT EDIT ADDITION original if (!result)
|
||||
warn_owner(source)
|
||||
|
||||
return result
|
||||
|
||||
@@ -1073,13 +1073,19 @@
|
||||
if(!what.canStrip(who))
|
||||
to_chat(src, span_warning("You can't remove \the [what.name], it appears to be stuck!"))
|
||||
return
|
||||
who.visible_message(span_warning("[src] tries to remove [who]'s [what.name]."), \
|
||||
span_userdanger("[src] tries to remove your [what.name]."), null, null, src)
|
||||
//SKYRAT EDIT ADDITION BEGIN - THIEVING GLOVES
|
||||
var/silent = HAS_TRAIT(who, TRAIT_STICKY_FINGERS) && (where & (ITEM_SLOT_ID|ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET))
|
||||
if (!silent)
|
||||
who.visible_message(span_warning("[src] tries to remove [who]'s [what.name]."), \
|
||||
span_userdanger("[src] tries to remove your [what.name]."), null, null, src)
|
||||
//SKYRAT EDIT ADDITION END
|
||||
to_chat(src, span_danger("You try to remove [who]'s [what.name]..."))
|
||||
log_message("[key_name(who)] is being stripped of [what] by [key_name(src)]", LOG_ATTACK, color="red")
|
||||
who.log_message("[key_name(who)] is being stripped of [what] by [key_name(src)]", LOG_VICTIM, color="red", log_globally = FALSE)
|
||||
what.add_fingerprint(src)
|
||||
if(do_mob(src, who, what.strip_delay, interaction_key = what))
|
||||
//SKYRAT EDIT CHANGE - THIEVING GLOVES
|
||||
//if(do_mob(src, who, what.strip_delay, interaction_key = what))
|
||||
if(do_mob(src, who, what.strip_delay * (HAS_TRAIT(who, TRAIT_STICKY_FINGERS) ? 0.5 : 1), interaction_key = what))
|
||||
if(what && Adjacent(who))
|
||||
if(islist(where))
|
||||
var/list/L = where
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/obj/item/clothing/gloves/color/black/thief
|
||||
special_desc = "Gloves made with completely frictionless, insulated cloth, easier to steal from people with."
|
||||
special_desc_requirement = EXAMINE_CHECK_SYNDICATE
|
||||
clothing_traits = list(TRAIT_STICKY_FINGERS)
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
transfer_prints = FALSE
|
||||
cut_type = null
|
||||
|
||||
/datum/uplink_item/stealthy_tools/thieving_gloves
|
||||
name = "Thieving Gloves"
|
||||
desc = "Black gloves that are made with frictionless, insulated cloth, allowing you to steal easily from anyone you see."
|
||||
cost = 6
|
||||
surplus = 20
|
||||
item = /obj/item/clothing/gloves/color/black/thief
|
||||
@@ -4755,6 +4755,7 @@
|
||||
#include "modular_skyrat\modules\modular_items\code\game\objects\items\ciggies.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\game\objects\items\cross.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\game\objects\items\miscellaneous.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\game\objects\items\thieving_gloves.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\game\objects\items\mining\equipment\kinetic_crusher.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\game\objects\items\mining\equipment\necklace.dm"
|
||||
#include "modular_skyrat\modules\modular_items\code\game\objects\items\storage\bags.dm"
|
||||
|
||||
Reference in New Issue
Block a user