mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Admin logs + whitelist and blacklist for Mind Binder and Body Snatcher usage (#7729)
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
@@ -31,7 +31,12 @@
|
||||
|
||||
var/choice = tgui_alert(usr,"This will swap your mind with the target's mind. This will result in them controlling your body, and you controlling their body. Continue?","Confirmation",list("Continue","Cancel"))
|
||||
if(choice == "Continue" && usr.get_active_hand() == src && usr.Adjacent(M))
|
||||
|
||||
//CHOMPAdd Start - Admin logging for Body Snatcher usage
|
||||
if(M.ckey && !M.client)
|
||||
log_and_message_admins("attempted to body swap with [key_name(M)] while they were SSD!")
|
||||
else
|
||||
log_and_message_admins("attempted to body swap with [key_name(M)].")
|
||||
//CHOMPAdd End
|
||||
usr.visible_message("<span class='warning'>[usr] pushes the device up their forehead and [M]'s head, the device beginning to let out a series of light beeps!</span>","<span class='notice'>You begin swap minds with [M]!</span>")
|
||||
if(do_after(usr,35 SECONDS,M))
|
||||
if(usr.mind && M.mind && M.stat != DEAD && usr.stat != DEAD)
|
||||
|
||||
@@ -11,6 +11,47 @@
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2, TECH_ILLEGAL = 1)
|
||||
possessed_voice = list()
|
||||
var/self_bind = FALSE
|
||||
var/list/whitelisted = list(
|
||||
/mob/living/carbon,
|
||||
/mob/living/silicon,
|
||||
/mob/living/simple_mob/animal/sif,
|
||||
/mob/living/simple_mob/animal/passive,
|
||||
/mob/living/simple_mob/slime,
|
||||
/mob/living/bot,
|
||||
/mob/living/simple_mob/vore/horse,
|
||||
/mob/living/simple_mob/vore/wolf,
|
||||
/mob/living/simple_mob/animal/giant_spider,
|
||||
/mob/living/simple_mob/vore/pakkun,
|
||||
/mob/living/simple_mob/vore/otie,
|
||||
/mob/living/simple_mob/vore/scel,
|
||||
/mob/living/simple_mob/vore/aggressive/corrupthound,
|
||||
/mob/living/simple_mob/vore/rabbit,
|
||||
/mob/living/simple_mob/vore/redpanda,
|
||||
/mob/living/simple_mob/vore/fennec,
|
||||
/mob/living/simple_mob/vore/fennix,
|
||||
/mob/living/simple_mob/vore/bee,
|
||||
/mob/living/simple_mob/animal/space/bear,
|
||||
/mob/living/simple_mob/vore/aggressive/dino,
|
||||
/mob/living/simple_mob/vore/aggressive/lizardman,
|
||||
/mob/living/simple_mob/vore/aggressive/frog,
|
||||
/mob/living/simple_mob/vore/aggressive/rat,
|
||||
/mob/living/simple_mob/vore/jelly,
|
||||
/mob/living/simple_mob/animal/hyena,
|
||||
/mob/living/simple_mob/vore/solargrub,
|
||||
/mob/living/simple_mob/vore/sect_queen,
|
||||
/mob/living/simple_mob/vore/sect_drone,
|
||||
/mob/living/simple_mob/vore/xeno_defanged,
|
||||
/mob/living/simple_mob/vore/aggressive/panther,
|
||||
/mob/living/simple_mob/vore/aggressive/giant_snake,
|
||||
/mob/living/simple_mob/vore/aggressive/deathclaw,
|
||||
/mob/living/simple_mob/vore/weretiger,
|
||||
/mob/living/simple_mob/vore/bigdragon/friendly/maintpred,
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi,
|
||||
/mob/living/simple_mob/vore/squirrel/big,
|
||||
/mob/living/simple_mob/vore/raptor,
|
||||
/mob/living/simple_mob/vore/bat,
|
||||
) // Limit to safe types
|
||||
|
||||
/obj/item/device/mindbinder/New()
|
||||
..()
|
||||
@@ -43,6 +84,9 @@
|
||||
A = H.held_mob
|
||||
if(istype(A, /mob/living))
|
||||
var/mob/living/M = A
|
||||
if(!is_type_in_list(A, whitelisted))
|
||||
to_chat(usr,"<span class='danger'>The target's mind is too complex to be affected!</span>")
|
||||
return
|
||||
if(usr == M)
|
||||
toggle_self_bind()
|
||||
return
|
||||
@@ -53,13 +97,6 @@
|
||||
return
|
||||
if(istype(A, /obj/item))
|
||||
var/obj/item/I = A
|
||||
if(istype(I, /obj/item/weapon/holder/micro))
|
||||
var/obj/item/weapon/holder/micro/H = I
|
||||
if(possessed_voice.len == 1 || self_bind)
|
||||
bind_mob(H.held_mob)
|
||||
else
|
||||
store_mob(H.held_mob)
|
||||
return
|
||||
if(possessed_voice.len == 1 || self_bind)
|
||||
bind_item(I)
|
||||
else
|
||||
@@ -83,6 +120,7 @@
|
||||
choice = tgui_alert(usr,"No really. You cannot OOC Escape this. Are you sure?","Confirmation",list("Yes I'm sure","Cancel"))
|
||||
if(choice == "Yes I'm sure" && usr.get_active_hand() == src && usr.Adjacent(target))
|
||||
usr.visible_message("<span class='warning'>[usr] presses [src] against [target]. The device beginning to let out a series of beeps!</span>","<span class='notice'>You begin to bind yourself into [target]!</span>")
|
||||
log_and_message_admins("attempted to bind themselves to \an [target] with a Mind Binder.")
|
||||
if(do_after(usr,30 SECONDS,target))
|
||||
if(!target.ckey)
|
||||
usr.mind.transfer_to(target)
|
||||
@@ -92,7 +130,11 @@
|
||||
return
|
||||
|
||||
usr.visible_message("<span class='warning'>[usr] presses [src] against [target]. The device beginning to let out a series of beeps!</span>","<span class='notice'>You begin to bind someone's mind into [target]!</span>")
|
||||
if(do_after(usr,5 SECONDS,target))
|
||||
log_and_message_admins("attempted to bind [key_name(src.possessed_voice[1])] to \an [target] with a Mind Binder.")
|
||||
var/doTime = 30 SECONDS
|
||||
if(ishuman(target) || issilicon(target) || isanimal(target))
|
||||
doTime = 5 SECONDS
|
||||
if(do_after(usr,doTime,target))
|
||||
if(possessed_voice.len == 1 && !target.ckey)
|
||||
var/mob/living/voice/V = possessed_voice[1]
|
||||
V.mind.transfer_to(target)
|
||||
@@ -112,11 +154,16 @@
|
||||
to_chat(usr,"<span class='warning'>The device beeps a warning that the target is already sentient!</span>")
|
||||
return
|
||||
|
||||
if(is_type_in_list(item, item_vore_blacklist))
|
||||
to_chat(usr,"<span class='danger'>The item resists your transfer attempt!</span>")
|
||||
return
|
||||
|
||||
if(self_bind)
|
||||
var/choice = tgui_alert(usr,"This will bind YOUR mind to the target! You will not be able to go back without help. Continue?","Confirmation",list("Continue","Cancel"))
|
||||
if(choice == "Cancel") return
|
||||
choice = tgui_alert(usr,"No really. You cannot OOC Escape this. Are you sure?","Confirmation",list("Yes I'm sure","Cancel"))
|
||||
if(choice == "Yes I'm sure" && usr.get_active_hand() == src && usr.Adjacent(item))
|
||||
log_and_message_admins("attempted to bind themselves to \an [item] with a Mind Binder.")
|
||||
usr.visible_message("<span class='warning'>[usr] presses [src] against [item]. The device beginning to let out a series of beeps!</span>","<span class='notice'>You begin to bind yourself into [item]!</span>")
|
||||
if(do_after(usr,30 SECONDS,item))
|
||||
item.inhabit_item(usr, null, null)
|
||||
@@ -125,6 +172,7 @@
|
||||
to_chat(usr,"<span class='notice'>Your mind as been bound to [item].</span>")
|
||||
return
|
||||
|
||||
log_and_message_admins("attempted to bind [key_name(src.possessed_voice[1])] to \an [item] with a Mind Binder.")
|
||||
usr.visible_message("<span class='warning'>[usr] presses [src] against [item]. The device beginning to let out a series of beeps!</span>","<span class='notice'>You begin to bind someone's mind into [item]!</span>")
|
||||
if(do_after(usr,5 SECONDS,item))
|
||||
if(possessed_voice.len == 1)
|
||||
@@ -148,6 +196,10 @@
|
||||
|
||||
var/choice = tgui_alert(usr,"This will download the target's mind into the device. Once their mind is loaded you can then bind it into an item. This will result in the target being stuck until you put them back in their original body. Please make sure OOC prefs align! Continue?","Confirmation",list("Continue","Cancel"))
|
||||
if(choice == "Continue" && usr.get_active_hand() == src && usr.Adjacent(target))
|
||||
if(target.ckey && !target.client)
|
||||
log_and_message_admins("attempted to take [key_name(target)]'s mind with a Mind Binder while they were SSD!")
|
||||
else
|
||||
log_and_message_admins("attempted to take [key_name(target)]'s mind with a Mind Binder.")
|
||||
usr.visible_message("<span class='warning'>[usr] presses [src] against [target]'s head. The device beginning to let out a series of beeps!</span>","<span class='notice'>You begin to download [target]'s mind!</span>")
|
||||
if(do_after(usr,30 SECONDS,target))
|
||||
if(possessed_voice.len == 0 && target.mind)
|
||||
@@ -167,6 +219,7 @@
|
||||
|
||||
var/mob/living/voice/target = item.possessed_voice[1]
|
||||
|
||||
log_and_message_admins("attempted to take [key_name(target)]'s mind out of \an [item] with a Mind Binder.")
|
||||
usr.visible_message("<span class='warning'>[usr] presses [src] against [item]. The device beginning to let out a series of beeps!</span>","<span class='notice'>You begin to download someone's mind from [item]!</span>")
|
||||
if(do_after(usr,5 SECONDS,item))
|
||||
if(possessed_voice.len == 0 && item.possessed_voice.Find(target))
|
||||
|
||||
Reference in New Issue
Block a user