mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-25 17:41:56 +00:00
Allows movable atoms to follow other movable atoms, as quickly as BYOND allows. Also supports following atoms inside other atoms. However, this only works fully when Move() or forceMove() is utilized. Setting loc directly will not raise the moved event.
85 lines
2.8 KiB
Plaintext
85 lines
2.8 KiB
Plaintext
/client/var/inquisitive_ghost = 1
|
|
/mob/dead/observer/verb/toggle_inquisition() // warning: unexpected inquisition
|
|
set name = "Toggle Inquisitiveness"
|
|
set desc = "Sets whether your ghost examines everything on click by default"
|
|
set category = "Ghost"
|
|
if(!client) return
|
|
client.inquisitive_ghost = !client.inquisitive_ghost
|
|
if(client.inquisitive_ghost)
|
|
src << "<span class='notice'>You will now examine everything you click on.</span>"
|
|
else
|
|
src << "<span class='notice'>You will no longer examine things you click on.</span>"
|
|
|
|
/mob/dead/observer/DblClickOn(var/atom/A, var/params)
|
|
if(client.buildmode)
|
|
build_click(src, client.buildmode, params, A)
|
|
return
|
|
if(can_reenter_corpse && mind && mind.current)
|
|
if(A == mind.current || (mind.current in A)) // double click your corpse or whatever holds it
|
|
reenter_corpse() // (cloning scanner, body bag, closet, mech, etc)
|
|
return // seems legit.
|
|
|
|
// Things you might plausibly want to follow
|
|
if((ismob(A) && A != src) || istype(A,/obj/machinery/bot) || istype(A,/obj/singularity))
|
|
ManualFollow(A)
|
|
|
|
// Otherwise jump
|
|
else
|
|
stop_following()
|
|
forceMove(get_turf(A))
|
|
|
|
/mob/dead/observer/ClickOn(var/atom/A, var/params)
|
|
if(client.buildmode)
|
|
build_click(src, client.buildmode, params, A)
|
|
return
|
|
if(!canClick()) return
|
|
setClickCooldown(4)
|
|
// You are responsible for checking config.ghost_interaction when you override this function
|
|
// Not all of them require checking, see below
|
|
A.attack_ghost(src)
|
|
|
|
// Oh by the way this didn't work with old click code which is why clicking shit didn't spam you
|
|
/atom/proc/attack_ghost(mob/dead/observer/user as mob)
|
|
if(user.client && user.client.inquisitive_ghost)
|
|
user.examinate(src)
|
|
return
|
|
|
|
// ---------------------------------------
|
|
// And here are some good things for free:
|
|
// Now you can click through portals, wormholes, gateways, and teleporters while observing. -Sayu
|
|
|
|
/obj/machinery/teleport/hub/attack_ghost(mob/user as mob)
|
|
var/atom/l = loc
|
|
var/obj/machinery/computer/teleporter/com = locate(/obj/machinery/computer/teleporter, locate(l.x - 2, l.y, l.z))
|
|
if(com.locked)
|
|
user.loc = get_turf(com.locked)
|
|
|
|
/obj/effect/portal/attack_ghost(mob/user as mob)
|
|
if(target)
|
|
user.loc = get_turf(target)
|
|
|
|
/obj/machinery/gateway/centerstation/attack_ghost(mob/user as mob)
|
|
if(awaygate)
|
|
user.loc = awaygate.loc
|
|
else
|
|
user << "[src] has no destination."
|
|
|
|
/obj/machinery/gateway/centeraway/attack_ghost(mob/user as mob)
|
|
if(stationgate)
|
|
user.loc = stationgate.loc
|
|
else
|
|
user << "[src] has no destination."
|
|
|
|
// -------------------------------------------
|
|
// This was supposed to be used by adminghosts
|
|
// I think it is a *terrible* idea
|
|
// but I'm leaving it here anyway
|
|
// commented out, of course.
|
|
/*
|
|
/atom/proc/attack_admin(mob/user as mob)
|
|
if(!user || !user.client || !user.client.holder)
|
|
return
|
|
attack_hand(user)
|
|
|
|
*/
|