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:
Eli
2024-02-13 18:25:44 +11:00
committed by GitHub
parent 6baa0bafde
commit 85408b27a0
2 changed files with 67 additions and 9 deletions

View File

@@ -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")) 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)) 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>") 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(do_after(usr,35 SECONDS,M))
if(usr.mind && M.mind && M.stat != DEAD && usr.stat != DEAD) if(usr.mind && M.mind && M.stat != DEAD && usr.stat != DEAD)

View File

@@ -11,6 +11,47 @@
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2, TECH_ILLEGAL = 1) origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2, TECH_ILLEGAL = 1)
possessed_voice = list() possessed_voice = list()
var/self_bind = FALSE 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() /obj/item/device/mindbinder/New()
..() ..()
@@ -43,6 +84,9 @@
A = H.held_mob A = H.held_mob
if(istype(A, /mob/living)) if(istype(A, /mob/living))
var/mob/living/M = A 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) if(usr == M)
toggle_self_bind() toggle_self_bind()
return return
@@ -53,13 +97,6 @@
return return
if(istype(A, /obj/item)) if(istype(A, /obj/item))
var/obj/item/I = A 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) if(possessed_voice.len == 1 || self_bind)
bind_item(I) bind_item(I)
else 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")) 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)) 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>") 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(do_after(usr,30 SECONDS,target))
if(!target.ckey) if(!target.ckey)
usr.mind.transfer_to(target) usr.mind.transfer_to(target)
@@ -92,7 +130,11 @@
return 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>") 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) if(possessed_voice.len == 1 && !target.ckey)
var/mob/living/voice/V = possessed_voice[1] var/mob/living/voice/V = possessed_voice[1]
V.mind.transfer_to(target) 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>") to_chat(usr,"<span class='warning'>The device beeps a warning that the target is already sentient!</span>")
return 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) 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")) 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 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")) 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)) 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>") 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)) if(do_after(usr,30 SECONDS,item))
item.inhabit_item(usr, null, null) item.inhabit_item(usr, null, null)
@@ -125,6 +172,7 @@
to_chat(usr,"<span class='notice'>Your mind as been bound to [item].</span>") to_chat(usr,"<span class='notice'>Your mind as been bound to [item].</span>")
return 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>") 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(do_after(usr,5 SECONDS,item))
if(possessed_voice.len == 1) 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")) 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(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>") 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(do_after(usr,30 SECONDS,target))
if(possessed_voice.len == 0 && target.mind) if(possessed_voice.len == 0 && target.mind)
@@ -167,6 +219,7 @@
var/mob/living/voice/target = item.possessed_voice[1] 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>") 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(do_after(usr,5 SECONDS,item))
if(possessed_voice.len == 0 && item.possessed_voice.Find(target)) if(possessed_voice.len == 0 && item.possessed_voice.Find(target))