mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2025-12-10 23:21:32 +00:00
* move phoronlock define * t * force rename * nuke unneeded things * don't do that * tgui sync? * changes * unit testing module * backend * tools update * aaah * go and stay go * path replace * move everything * toss out more stuff * remove * fine those can stay * dependencies.sh * ruin datum move + rename * level assets why did you guys put the turfs in my atmosphers folder grr * more moving * basemap, force stuff * fix that desync meme * move more stuff * move those too * repath * get rid of useless initializers * hacky patchy * reservations * alright * tgui * changelog example * checksum * md5 * errors * more * turf empty * stop * fix * bad kwarg * let's get those in again * alright * rid of that * huh * newlines * newlines * folder * mood * woops * readme * might as well trim now * let's go * fuck it tether isn't being used anyways lol * ok * empty files go * tether is demoted * sorry but this goes too * okay * make that work too * ok * wow. * whew * Fix * fixes * ok * sigh * fix * fix * aah. * rust_g logging * update rust g file * fix * funny * Fix * map issues * fix * initialize hints * solves some problems * those too * ok * pills * let's do that. * hit that too * runtime * add that too * alright * fix * fix * fix * Fix * add * fix * wildwest, what have they done to you... * do that too' git push * fixes * fixes * fixes * pack this tightly * let's not have empty files * sigh * fix * FUCK OFF * fix icon * rip old mapmerge * zz * woo yeah woo yeah * logging * fix * better logs * GRRRRRR * last commit?? * awful
45 lines
1.6 KiB
Plaintext
45 lines
1.6 KiB
Plaintext
//Items with these will have a chance to get knocked off when disarming
|
|
/datum/component/knockoff
|
|
var/knockoff_chance = 100 //Chance to knockoff
|
|
var/list/target_zones //Aiming for these zones will cause the knockoff, null means all zones allowed
|
|
var/list/slots_knockoffable //Can be only knocked off from these slots, null means all slots allowed
|
|
|
|
/datum/component/knockoff/Initialize(knockoff_chance,zone_override,slots_knockoffable)
|
|
if(!isitem(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED,.proc/OnEquipped)
|
|
RegisterSignal(parent, COMSIG_ITEM_DROPPED,.proc/OnDropped)
|
|
|
|
src.knockoff_chance = knockoff_chance
|
|
|
|
if(zone_override)
|
|
target_zones = zone_override
|
|
|
|
if(slots_knockoffable)
|
|
src.slots_knockoffable = slots_knockoffable
|
|
|
|
/datum/component/knockoff/proc/Knockoff(mob/living/attacker,zone)
|
|
var/obj/item/I = parent
|
|
var/mob/living/carbon/human/wearer = I.loc
|
|
if(!istype(wearer))
|
|
return
|
|
if(target_zones && !(zone in target_zones))
|
|
return
|
|
if(!prob(knockoff_chance))
|
|
return
|
|
if(!wearer.dropItemToGround(I))
|
|
return
|
|
|
|
wearer.visible_message("<span class='warning'>[attacker] knocks off [wearer]'s [I.name]!</span>","<span class='userdanger'>[attacker] knocks off your [I.name]!</span>")
|
|
|
|
/datum/component/knockoff/proc/OnEquipped(datum/source, mob/living/carbon/human/H,slot)
|
|
if(!istype(H))
|
|
return
|
|
if(slots_knockoffable && !(slot in slots_knockoffable))
|
|
UnregisterSignal(H, COMSIG_HUMAN_DISARM_HIT)
|
|
return
|
|
RegisterSignal(H, COMSIG_HUMAN_DISARM_HIT, .proc/Knockoff, TRUE)
|
|
|
|
/datum/component/knockoff/proc/OnDropped(datum/source, mob/living/M)
|
|
UnregisterSignal(M, COMSIG_HUMAN_DISARM_HIT)
|