Files
Paradise/code/_onclick/click_override.dm
SabreML 0b375de42c Removes the the vast majority of 'The the' from the the code (#15597)
* The the

* Some more

* Review 1

* A couple more
2021-06-20 10:20:32 -04:00

109 lines
4.1 KiB
Plaintext

/*
Click Overrides
These are overrides for a living mob's middle and alt clicks.
If the mob in question has their middleClickOverride var set to one of these datums, when they middle or alt click the onClick proc for the datum their clickOverride var is
set equal to will be called.
See click.dm 251 and 196.
If you have any questions, contact me on the Paradise forums.
- DaveTheHeacrab
*/
/datum/middleClickOverride/
/datum/middleClickOverride/proc/onClick(atom/A, mob/living/user)
user.middleClickOverride = null
return 1
/* Note, when making a new click override it is ABSOLUTELY VITAL that you set the source's clickOverride to null at some point if you don't want them to be stuck with it forever.
Calling the super will do this for you automatically, but if you want a click override to NOT clear itself after the first click, you must do it at some other point in the code*/
/obj/item/badminBook/
name = "old book"
desc = "An old, leather bound tome."
icon = 'icons/obj/library.dmi'
icon_state = "book"
var/datum/middleClickOverride/clickBehavior = new /datum/middleClickOverride/badminClicker
/obj/item/badminBook/attack_self(mob/living/user as mob)
if(user.middleClickOverride)
to_chat(user, "<span class='warning'>You try to draw power from [src], but you cannot hold the power at this time!</span>")
return
user.middleClickOverride = clickBehavior
to_chat(user, "<span class='notice'>You draw a bit of power from [src], you can use <b>middle click</b> or <b>alt click</b> to release the power!</span>")
/datum/middleClickOverride/badminClicker
var/summon_path = /obj/item/reagent_containers/food/snacks/cookie
/datum/middleClickOverride/badminClicker/onClick(atom/A, mob/living/user)
var/atom/movable/newObject = new summon_path
newObject.loc = get_turf(A)
to_chat(user, "<span class='notice'>You release the power you had stored up, summoning \a [newObject.name]! </span>")
usr.loc.visible_message("<span class='notice'>[user] waves [user.p_their()] hand and summons \a [newObject.name]</span>")
..()
/datum/middleClickOverride/power_gloves
/datum/middleClickOverride/power_gloves/onClick(atom/A, mob/living/carbon/human/user)
if(A == user || user.a_intent == INTENT_HELP || user.a_intent == INTENT_GRAB)
return
if(user.incapacitated())
return
var/obj/item/clothing/gloves/color/yellow/power/P = user.gloves
if(world.time < P.last_shocked + P.shock_delay)
to_chat(user, "<span class='warning'>The gloves are still recharging.</span>")
return
var/turf/T = get_turf(user)
var/obj/structure/cable/C = locate() in T
if(!P.unlimited_power)
if(!C || !istype(C))
to_chat(user, "<span class='warning'>There is no cable here to power the gloves.</span>")
return
var/turf/target_turf = get_turf(A)
target_turf.hotspot_expose(2000, 400)
playsound(user.loc, 'sound/effects/eleczap.ogg', 40, 1)
var/atom/beam_from = user
var/atom/target_atom = A
for(var/i in 0 to 3)
beam_from.Beam(target_atom, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 6)
if(isliving(target_atom))
var/mob/living/L = target_atom
if(user.a_intent == INTENT_DISARM)
L.Weaken(3)
else
if(P.unlimited_power)
L.electrocute_act(1000, P, flags = SHOCK_NOGLOVES) //Just kill them
else
electrocute_mob(L, C, P)
break
var/list/next_shocked = list()
for(var/atom/movable/AM in orange(3, target_atom))
if(AM == user || istype(AM, /obj/effect) || isobserver(AM))
continue
next_shocked.Add(AM)
beam_from = target_atom
target_atom = pick(next_shocked)
A = target_atom
next_shocked.Cut()
P.last_shocked = world.time
/**
* # Callback invoker middle click override datum
*
* Middle click override which accepts a callback as an arugment in the `New()` proc.
* When the living mob that has this datum middle-clicks or alt-clicks on something, the callback will be invoked.
*/
/datum/middleClickOverride/callback_invoker
var/datum/callback/callback
/datum/middleClickOverride/callback_invoker/New(datum/callback/_callback)
. = ..()
callback = _callback
/datum/middleClickOverride/callback_invoker/onClick(atom/A, mob/living/user)
callback.Invoke(user, A)