mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 07:57:00 +00:00
Compare commits
5 Commits
c3efdda013
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
50d9481fa2 | ||
|
|
3beef0f44a | ||
|
|
7e3b3aa8a9 | ||
|
|
f746678620 | ||
|
|
f7de0bb70b |
@@ -256,7 +256,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
deconstruct()
|
||||
|
||||
//CHOMPEdit Start - Adds TGStation keybinds to save our engineers some time.
|
||||
/obj/machinery/atmospherics/binary/pump/AltClick(mob/user)
|
||||
/obj/machinery/atmospherics/binary/pump/click_alt(mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(allowed(user))
|
||||
to_chat(user, span_notice("You set the [name] to max output"))
|
||||
@@ -265,7 +265,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
else
|
||||
to_chat(user, span_warning("Access denied."))
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/CtrlClick(mob/user)
|
||||
/obj/machinery/atmospherics/binary/pump/click_ctrl(mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(allowed(user))
|
||||
update_use_power(!use_power)
|
||||
@@ -301,4 +301,3 @@ Thus, the two variables affect pump operation are set in New():
|
||||
icon_state = "off"
|
||||
else
|
||||
icon_state = "[use_power ? "on" : "off"]"
|
||||
|
||||
|
||||
@@ -303,7 +303,7 @@
|
||||
return null
|
||||
|
||||
//CHOMPEdit Start - Keybinds for EVEEERYTHING
|
||||
/obj/machinery/atmospherics/omni/CtrlClick(mob/user)
|
||||
/obj/machinery/atmospherics/omni/click_ctrl(mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(allowed(user))
|
||||
update_use_power(!use_power)
|
||||
|
||||
@@ -39,7 +39,7 @@ GLOBAL_LIST_EMPTY(shutoff_valves)
|
||||
return TRUE
|
||||
|
||||
// Alt+Click now toggles the open/close function, when the autoseal is disabled
|
||||
/obj/machinery/atmospherics/valve/shutoff/AltClick(var/mob/user)
|
||||
/obj/machinery/atmospherics/valve/shutoff/click_alt(var/mob/user)
|
||||
if(isliving(user))
|
||||
if(close_on_leaks)
|
||||
to_chat(user, "You try to manually [open ? "close" : "open"] the valve, but it [open ? "opens" : "closes"] automatically again.")
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
return list(node1_connect, node2_connect, node3_connect)
|
||||
|
||||
//CHOMPEdit Start - Keybinds for EVEEERYTHING
|
||||
/obj/machinery/atmospherics/trinary/CtrlClick(mob/user)
|
||||
/obj/machinery/atmospherics/trinary/click_ctrl(mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(allowed(user))
|
||||
update_use_power(!use_power)
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
"You hear a ratchet.")
|
||||
deconstruct()
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/CtrlClick(mob/user)
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/click_ctrl(mob/user)
|
||||
if (volume_rate == ATMOS_DEFAULT_VOLUME_PUMP + 500 || use_power == USE_POWER_OFF)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
return FALSE
|
||||
|
||||
//CHOMPEdit Start - Keybinds for EVEEERYTHING* (* = not everything))
|
||||
/obj/machinery/atmospherics/unary/CtrlClick(mob/user)
|
||||
/obj/machinery/atmospherics/unary/click_ctrl(mob/user)
|
||||
if((power_rating != null) && !(pipe_state in list("scrubber", "uvent", "injector"))) //TODO: Add compatibility with air alarm. When not disabled, overrides air alarm state and doesn't tell the air alarm that. Injectors have their own, different bind for enabling.
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(allowed(user))
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#define RIGHT_CLICK "right"
|
||||
#define MIDDLE_CLICK "middle"
|
||||
#define LEFT_CLICK "left"
|
||||
#define BUTTON4 "xbutton1"
|
||||
#define BUTTON5 "xbutton2"
|
||||
|
||||
///Mouse button that was just clicked/released
|
||||
///if(modifiers[BUTTON] == LEFT_CLICK)
|
||||
|
||||
@@ -1 +1,9 @@
|
||||
#define TK_MAXRANGE 15
|
||||
|
||||
/// Action has succeeded, preventing further alt click interaction
|
||||
#define CLICK_ACTION_SUCCESS (1<<0)
|
||||
/// Action failed, preventing further alt click interaction
|
||||
#define CLICK_ACTION_BLOCKING (1<<1)
|
||||
/// Either return state
|
||||
#define CLICK_ACTION_ANY (CLICK_ACTION_SUCCESS | CLICK_ACTION_BLOCKING)
|
||||
/// Use NONE for continue interaction
|
||||
|
||||
@@ -225,25 +225,6 @@
|
||||
#define COMSIG_ENTER_AREA "enter_area"
|
||||
///from base of area/Exited(): (/area)
|
||||
#define COMSIG_EXIT_AREA "exit_area"
|
||||
///from base of client/Click(): (atom/target, atom/location, control, params, mob/user)
|
||||
#define COMSIG_CLIENT_CLICK "atom_client_click"
|
||||
///from base of atom/Click(): (location, control, params, mob/user)
|
||||
#define COMSIG_CLICK "atom_click"
|
||||
///from base of atom/ShiftClick(): (/mob)
|
||||
#define COMSIG_CLICK_SHIFT "shift_click"
|
||||
#define COMPONENT_ALLOW_EXAMINATE (1<<0) //Allows the user to examinate regardless of client.eye.
|
||||
///from base of atom/CtrlClickOn(): (/mob)
|
||||
#define COMSIG_CLICK_CTRL "ctrl_click"
|
||||
///from base of atom/AltClick(): (/mob)
|
||||
#define COMSIG_CLICK_ALT "alt_click"
|
||||
#define COMPONENT_CANCEL_CLICK_ALT (1<<0)
|
||||
///from base of atom/CtrlShiftClick(/mob)
|
||||
#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click"
|
||||
///from base of atom/MouseDrop(): (/atom/over, /mob/user)
|
||||
#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto"
|
||||
#define COMPONENT_NO_MOUSEDROP (1<<0)
|
||||
///from base of atom/MouseDrop_T: (/atom/from, /mob/user)
|
||||
#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto"
|
||||
|
||||
///from base of atom/MouseDrop_T: do_after(mob/user, delay, atom/target, needhand, progress, incapacitation_flags, ignore_movement, max_distance, exclusive)
|
||||
#define COMSIG_DO_AFTER_BEGAN "do_after_began"
|
||||
@@ -332,13 +313,6 @@
|
||||
#define COMSIG_MOB_DEATH "mob_death"
|
||||
///from base of mob/set_stat(): (new_stat)
|
||||
#define COMSIG_MOB_STATCHANGE "mob_statchange"
|
||||
///from base of mob/clickon(): (atom/A, params)
|
||||
#define COMSIG_MOB_CLICKON "mob_clickon"
|
||||
///from base of mob/MiddleClickOn(): (atom/A)
|
||||
#define COMSIG_MOB_MIDDLECLICKON "mob_middleclickon"
|
||||
///from base of mob/AltClickOn(): (atom/A)
|
||||
#define COMSIG_MOB_ALTCLICKON "mob_altclickon"
|
||||
#define COMSIG_MOB_CANCEL_CLICKON (1<<0)
|
||||
|
||||
///from base of /obj/item/dice/proc/rollDice(mob/user as mob, var/silent = 0). Has the arguments of 'src, silent, result'
|
||||
#define COMSIG_MOB_ROLLED_DICE "mob_rolled_dice" //can give a return value if we want it to make the dice roll a specific number!
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// mouse signals. Format:
|
||||
// When the signal is called: (signal arguments)
|
||||
// All signals send the source datum of the signal as the first argument
|
||||
|
||||
///from base of client/Click(): (atom/target, atom/location, control, params, mob/user)
|
||||
#define COMSIG_CLIENT_CLICK "atom_client_click"
|
||||
///from base of atom/Click(): (atom/location, control, params, mob/user)
|
||||
#define COMSIG_CLICK "atom_click"
|
||||
///from base of atom/ShiftClick(): (/mob)
|
||||
#define COMSIG_CLICK_SHIFT "shift_click"
|
||||
// #define COMSIG_MOB_CANCEL_CLICKON (1<<0) //shared with other forms of click, this is so you're aware it exists here too.
|
||||
///from base of atom/ShiftClick()
|
||||
#define COMSIG_SHIFT_CLICKED_ON "shift_clicked_on"
|
||||
///from base of atom/click_ctrlOn(): (/mob)
|
||||
#define COMSIG_CLICK_CTRL "ctrl_click"
|
||||
///from base of atom/click_alt(): (/mob)
|
||||
#define COMSIG_CLICK_ALT "alt_click"
|
||||
///from base of atom/base_click_alt_secondary(): (/mob)
|
||||
#define COMSIG_CLICK_ALT_SECONDARY "click_alt_secondary"
|
||||
#define COMPONENT_CANCEL_CLICK_ALT_SECONDARY (1<<0)
|
||||
///from base of atom/click_ctrl_shift(/mob)
|
||||
#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click"
|
||||
///from base of atom/MouseDrop(): (/atom/over, /mob/user)
|
||||
#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto"
|
||||
#define COMPONENT_CANCEL_MOUSEDROP_ONTO (1<<0)
|
||||
///from base of atom/handle_mouse_drop_receive: (/atom/from, /mob/user)
|
||||
#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto"
|
||||
#define COMPONENT_CANCEL_MOUSEDROPPED_ONTO (1<<0)
|
||||
///from base of mob/MouseWheelOn(): (/atom, delta_x, delta_y, params)
|
||||
#define COMSIG_MOUSE_SCROLL_ON "mousescroll_on"
|
||||
/// From /atom/movable/screen/click(): (atom/target, atom/location, control, params, mob/user)
|
||||
#define COMSIG_SCREEN_ELEMENT_CLICK "screen_element_click"
|
||||
@@ -21,3 +21,17 @@
|
||||
|
||||
///from /datum/species/handle_fire. Called when the human is set on fire and burning clothes and stuff
|
||||
#define COMSIG_HUMAN_BURNING "human_burning"
|
||||
|
||||
///from base of mob/clickon(): (atom/A, list/modifiers)
|
||||
#define COMSIG_MOB_CLICKON "mob_clickon"
|
||||
///from base of mob/MiddleClickOn(): (atom/A)
|
||||
#define COMSIG_MOB_MIDDLECLICKON "mob_middleclickon"
|
||||
///from base of mob/AltClickOn(): (atom/A)
|
||||
#define COMSIG_MOB_ALTCLICKON "mob_altclickon"
|
||||
#define COMSIG_MOB_CANCEL_CLICKON (1<<0)
|
||||
///From base of /mob/base_click_ctrl: (atom/A)
|
||||
#define COMSIG_MOB_CTRL_CLICKED "mob_ctrl_clicked"
|
||||
///From base of /mob/base_click_ctrl_shift: (atom/A)
|
||||
#define COMSIG_MOB_CTRL_SHIFT_CLICKED "mob_ctrl_shift_clicked"
|
||||
///from base of mob/alt_click_on_secodary(): (atom/A)
|
||||
#define COMSIG_MOB_ALTCLICKON_SECONDARY "mob_altclickon_secondary"
|
||||
|
||||
@@ -13,7 +13,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
/// Climbable trait, given and taken by the climbable element when added or removed. Exists to be easily checked via HAS_TRAIT().
|
||||
#define TRAIT_CLIMBABLE "trait_climbable"
|
||||
|
||||
/// Prevents the affected object from opening a loot window via alt click. See atom/AltClick()
|
||||
/// Prevents the affected object from opening a loot window via alt click. See atom/click_alt()
|
||||
#define TRAIT_ALT_CLICK_BLOCKER "no_alt_click"
|
||||
|
||||
/// Unlucky trait. Given by the 'unlucky' trait in character select. Checked by various things to cause unlucky interactions.
|
||||
|
||||
@@ -100,8 +100,8 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/silicon/ai/CtrlClickOn(var/atom/A)
|
||||
if(!control_disabled && A.AICtrlClick(src))
|
||||
/mob/living/silicon/ai/CtrlClickOn(atom/A)
|
||||
if(!control_disabled && A.ctrl_click_ai(src))
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
I have no idea why it was in atoms.dm instead of respective files.
|
||||
*/
|
||||
|
||||
/atom/proc/AICtrlShiftClick()
|
||||
/atom/proc/AIclick_ctrl_shift()
|
||||
return
|
||||
|
||||
/atom/proc/AIShiftClick()
|
||||
@@ -131,26 +131,26 @@
|
||||
user_toggle_open(user)
|
||||
return 1
|
||||
|
||||
/atom/proc/AICtrlClick(mob/user)
|
||||
/atom/proc/ctrl_click_ai(mob/user)
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/AICtrlClick(mob/user) // Bolts doors
|
||||
/obj/machinery/door/airlock/ctrl_click_ai(mob/user) // Bolts doors
|
||||
add_fingerprint(user)
|
||||
toggle_bolt(user)
|
||||
return 1
|
||||
|
||||
/obj/machinery/power/apc/AICtrlClick(mob/user) // turns off/on APCs.
|
||||
/obj/machinery/power/apc/ctrl_click_ai(mob/user) // turns off/on APCs.
|
||||
add_fingerprint(user)
|
||||
toggle_breaker()
|
||||
return 1
|
||||
|
||||
/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets
|
||||
/obj/machinery/turretid/ctrl_click_ai() //turns off/on Turrets
|
||||
enabled = !enabled
|
||||
updateTurrets()
|
||||
return TRUE
|
||||
|
||||
/atom/proc/AIAltClick(var/atom/A)
|
||||
return AltClick(A)
|
||||
return click_alt(A)
|
||||
|
||||
/obj/machinery/door/airlock/AIAltClick(mob/user) // Electrifies doors.
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
if(src)
|
||||
usr.DblClickOn(src, params)
|
||||
|
||||
/atom/MouseWheel(delta_x,delta_y,location,control,params)
|
||||
if(src)
|
||||
usr.MouseWheelOn(src, delta_x, delta_y, params)
|
||||
|
||||
/*
|
||||
Standard mob ClickOn()
|
||||
Handles exceptions: Buildmode, middle click, modified clicks, mech actions
|
||||
@@ -38,37 +42,49 @@
|
||||
* item/afterattack(atom,user,adjacent,params) - used both ranged and adjacent
|
||||
* mob/RangedAttack(atom,params) - used only ranged, only used for tk and laser eyes but could be changed
|
||||
*/
|
||||
/mob/proc/ClickOn(var/atom/A, var/params)
|
||||
if(!checkClickCooldown()) // Hard check, before anything else, to avoid crashing
|
||||
/mob/proc/ClickOn(atom/A, params)
|
||||
if(world.time <= next_click)
|
||||
return
|
||||
|
||||
setClickCooldown(1)
|
||||
next_click = world.time + 1
|
||||
|
||||
if(client && client.buildmode)
|
||||
build_click(src, client.buildmode, params, A)
|
||||
return
|
||||
|
||||
var/list/modifiers = params2list(params)
|
||||
if(modifiers["shift"] && modifiers["ctrl"])
|
||||
CtrlShiftClickOn(A)
|
||||
return 1
|
||||
if(modifiers["shift"] && modifiers["middle"])
|
||||
ShiftMiddleClickOn(A)
|
||||
return 1
|
||||
if(modifiers["middle"])
|
||||
MiddleClickOn(A)
|
||||
return 1
|
||||
if(modifiers["shift"])
|
||||
ShiftClickOn(A)
|
||||
return 0
|
||||
if(modifiers["alt"]) // alt and alt-gr (rightalt)
|
||||
AltClickOn(A)
|
||||
return 1
|
||||
if(modifiers["ctrl"])
|
||||
CtrlClickOn(A)
|
||||
return 1
|
||||
|
||||
if(stat || paralysis || stunned) //CHOMPedit, removed weakened to allow item use while crawling
|
||||
if(LAZYACCESS(modifiers, BUTTON4) || LAZYACCESS(modifiers, BUTTON5))
|
||||
return
|
||||
|
||||
if(LAZYACCESS(modifiers, SHIFT_CLICK))
|
||||
if(LAZYACCESS(modifiers, MIDDLE_CLICK))
|
||||
ShiftMiddleClickOn(A)
|
||||
return
|
||||
if(LAZYACCESS(modifiers, CTRL_CLICK))
|
||||
CtrlShiftClickOn(A)
|
||||
return
|
||||
if (LAZYACCESS(modifiers, ALT_CLICK))
|
||||
alt_shift_click_on(A)
|
||||
return
|
||||
ShiftClickOn(A)
|
||||
return
|
||||
if(LAZYACCESS(modifiers, MIDDLE_CLICK))
|
||||
if(LAZYACCESS(modifiers, CTRL_CLICK))
|
||||
CtrlMiddleClickOn(A)
|
||||
else
|
||||
MiddleClickOn(A, params)
|
||||
return
|
||||
if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt)
|
||||
if(LAZYACCESS(modifiers, RIGHT_CLICK))
|
||||
AltClickSecondaryOn(A)
|
||||
else
|
||||
AltClickOn(A)
|
||||
return
|
||||
if(LAZYACCESS(modifiers, CTRL_CLICK))
|
||||
CtrlClickOn(A)
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned)
|
||||
return
|
||||
|
||||
face_atom(A) // change direction to face what you clicked on
|
||||
@@ -173,7 +189,7 @@
|
||||
return TRUE
|
||||
|
||||
// Default behavior: ignore double clicks, the second click that makes the doubleclick call already calls for a normal click
|
||||
/mob/proc/DblClickOn(var/atom/A, var/params)
|
||||
/mob/proc/DblClickOn(atom/A, var/params)
|
||||
return
|
||||
|
||||
/*
|
||||
@@ -237,107 +253,33 @@
|
||||
Middle click
|
||||
Only used for swapping hands
|
||||
*/
|
||||
/mob/proc/MiddleClickOn(var/atom/A)
|
||||
/mob/proc/MiddleClickOn(atom/A)
|
||||
swap_hand()
|
||||
return
|
||||
|
||||
// In case of use break glass
|
||||
/*
|
||||
/atom/proc/MiddleClick(var/mob/M as mob)
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
Shift middle click
|
||||
Used for pointing.
|
||||
*/
|
||||
|
||||
/mob/proc/ShiftMiddleClickOn(atom/A)
|
||||
pointed(A)
|
||||
return
|
||||
|
||||
/*
|
||||
Shift click
|
||||
For most mobs, examine.
|
||||
This is overridden in ai.dm
|
||||
*/
|
||||
/mob/proc/ShiftClickOn(var/atom/A)
|
||||
/mob/proc/ShiftClickOn(atom/A)
|
||||
A.ShiftClick(src)
|
||||
return
|
||||
/atom/proc/ShiftClick(var/mob/user)
|
||||
|
||||
/atom/proc/ShiftClick(mob/user)
|
||||
SEND_SIGNAL(src, COMSIG_SHIFT_CLICKED_ON, user)
|
||||
var/shiftclick_flags = SEND_SIGNAL(user, COMSIG_CLICK_SHIFT, src)
|
||||
if(shiftclick_flags & COMSIG_MOB_CANCEL_CLICKON)
|
||||
return
|
||||
if(user.client && !user.is_remote_viewing())
|
||||
user.examinate(src)
|
||||
return
|
||||
|
||||
/*
|
||||
Ctrl click
|
||||
For most objects, pull
|
||||
*/
|
||||
/mob/proc/CtrlClickOn(var/atom/A)
|
||||
A.CtrlClick(src)
|
||||
return
|
||||
/atom/proc/CtrlClick(var/mob/user)
|
||||
return
|
||||
/mob/proc/TurfAdjacent(turf/tile)
|
||||
return tile.Adjacent(src)
|
||||
|
||||
/atom/movable/CtrlClick(var/mob/user)
|
||||
if(Adjacent(user))
|
||||
user.start_pulling(src)
|
||||
|
||||
/turf/CtrlClick(var/mob/user)
|
||||
user.stop_pulling()
|
||||
|
||||
/*
|
||||
Alt click
|
||||
Unused except for AI
|
||||
*/
|
||||
/mob/proc/AltClickOn(var/atom/A)
|
||||
A.AltClick(src)
|
||||
return
|
||||
|
||||
/**
|
||||
* Alt click on an atom.
|
||||
* Performs alt-click actions before attempting to open a loot window.
|
||||
* Returns TRUE if successful, FALSE if not.
|
||||
*/
|
||||
/atom/proc/AltClick(var/mob/user)
|
||||
// if(!user.can_interact_with(src))
|
||||
// return FALSE
|
||||
|
||||
if(SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) & COMPONENT_CANCEL_CLICK_ALT)
|
||||
return TRUE
|
||||
|
||||
if(HAS_TRAIT(src, TRAIT_ALT_CLICK_BLOCKER) && !isobserver(user))
|
||||
return TRUE
|
||||
|
||||
var/turf/tile = get_turf(src)
|
||||
if(isnull(tile))
|
||||
return FALSE
|
||||
|
||||
if(!isturf(loc) && !isturf(src))
|
||||
return FALSE
|
||||
|
||||
if(!user.TurfAdjacent(tile))
|
||||
return FALSE
|
||||
|
||||
var/datum/lootpanel/panel = user.client?.loot_panel
|
||||
if(isnull(panel))
|
||||
return FALSE
|
||||
|
||||
panel.open(tile)
|
||||
return TRUE
|
||||
|
||||
/mob/proc/TurfAdjacent(var/turf/T)
|
||||
return T.AdjacentQuick(src)
|
||||
|
||||
/*
|
||||
Control+Shift click
|
||||
Unused except for AI
|
||||
*/
|
||||
/mob/proc/CtrlShiftClickOn(var/atom/A)
|
||||
A.CtrlShiftClick(src)
|
||||
return
|
||||
|
||||
/atom/proc/CtrlShiftClick(var/mob/user)
|
||||
/mob/proc/ShiftMiddleClickOn(atom/A)
|
||||
src.pointed(A)
|
||||
return
|
||||
|
||||
/*
|
||||
@@ -401,15 +343,19 @@
|
||||
|
||||
/atom/movable/screen/click_catcher/Click(location, control, params)
|
||||
var/list/modifiers = params2list(params)
|
||||
if(modifiers["middle"] && istype(usr, /mob/living/carbon))
|
||||
if(LAZYACCESS(modifiers, MIDDLE_CLICK) && istype(usr, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = usr
|
||||
C.swap_hand()
|
||||
else
|
||||
var/list/P = params2list(params)
|
||||
var/turf/T = screen_loc2turf(P["screen-loc"], get_turf(usr))
|
||||
if(T)
|
||||
if(modifiers["shift"])
|
||||
if(LAZYACCESS(modifiers, SHIFT_CLICK))
|
||||
usr.face_atom(T)
|
||||
return 1
|
||||
T.Click(location, control, params)
|
||||
return 1
|
||||
|
||||
/// MouseWheelOn
|
||||
/mob/proc/MouseWheelOn(atom/A, delta_x, delta_y, params)
|
||||
SEND_SIGNAL(src, COMSIG_MOUSE_SCROLL_ON, A, delta_x, delta_y, params)
|
||||
|
||||
175
code/_onclick/click_alt.dm
Normal file
175
code/_onclick/click_alt.dm
Normal file
@@ -0,0 +1,175 @@
|
||||
///Main proc for primary alt click
|
||||
/mob/proc/AltClickOn(atom/target)
|
||||
base_click_alt(target)
|
||||
|
||||
/**
|
||||
* ### Base proc for alt click interaction left click. Returns if the click was intercepted & handled
|
||||
*
|
||||
* If you wish to add custom `click_alt` behavior for a single type, use that proc.
|
||||
*/
|
||||
/mob/proc/base_click_alt(atom/target)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
// Check if they've hooked in to prevent src from alt clicking anything
|
||||
if(SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON, target) & COMSIG_MOB_CANCEL_CLICKON)
|
||||
return TRUE
|
||||
|
||||
// If it has a signal handler that returns a click action, done.
|
||||
if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY)
|
||||
return TRUE
|
||||
|
||||
// If it has a custom click_alt that returns success/block, done.
|
||||
return target.click_alt(src) & CLICK_ACTION_ANY
|
||||
/* //NYI Start
|
||||
if(can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY)))
|
||||
return target.click_alt(src) & CLICK_ACTION_ANY
|
||||
|
||||
return FALSE
|
||||
*/ //NYI Start
|
||||
|
||||
/mob/living/base_click_alt(atom/target)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
|
||||
return try_open_loot_panel_on(target)
|
||||
|
||||
/**
|
||||
* ## Custom alt click interaction
|
||||
* Override this to change default alt click behavior. Return `CLICK_ACTION_SUCCESS`, `CLICK_ACTION_BLOCKING` or `NONE`.
|
||||
*
|
||||
* ### Guard clauses
|
||||
* Consider adding `interaction_flags_click` before adding unique guard clauses.
|
||||
*
|
||||
* ### Return flags
|
||||
* Forgetting your return will cause the default alt click behavior to occur thereafter.
|
||||
*
|
||||
* The difference between NONE and BLOCKING can get hazy, but I like to keep NONE limited to guard clauses and "never" cases.
|
||||
*
|
||||
* A good usage for BLOCKING over NONE is when it's situational for the item and there's some feedback indicating this.
|
||||
*
|
||||
* ### Examples:
|
||||
* User is a ghost, alt clicks on item with special disk eject: NONE
|
||||
*
|
||||
* Machine broken, no feedback: NONE
|
||||
*
|
||||
* Alt click a pipe to max output but its already max: BLOCKING
|
||||
*
|
||||
* Alt click a gun that normally works, but is out of ammo: BLOCKING
|
||||
*
|
||||
* User unauthorized, machine beeps: BLOCKING
|
||||
*
|
||||
* @param {mob} user - The person doing the alt clicking.
|
||||
*/
|
||||
|
||||
/atom/proc/click_alt(mob/user)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
// if(!user.can_interact_with(src))
|
||||
// return FALSE
|
||||
|
||||
if(SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) & COMSIG_MOB_CANCEL_CLICKON)
|
||||
return TRUE
|
||||
|
||||
if(HAS_TRAIT(src, TRAIT_ALT_CLICK_BLOCKER) && !isobserver(user))
|
||||
return TRUE
|
||||
|
||||
var/turf/tile = get_turf(src)
|
||||
if(isnull(tile))
|
||||
return FALSE
|
||||
|
||||
if(!isturf(loc) && !isturf(src))
|
||||
return FALSE
|
||||
|
||||
if(!user.TurfAdjacent(tile))
|
||||
return FALSE
|
||||
|
||||
var/datum/lootpanel/panel = user.client?.loot_panel
|
||||
if(isnull(panel))
|
||||
return FALSE
|
||||
|
||||
panel.open(tile)
|
||||
return TRUE
|
||||
|
||||
|
||||
///Main proc for secondary alt click
|
||||
/mob/proc/AltClickSecondaryOn(atom/target)
|
||||
base_click_alt_secondary(target)
|
||||
|
||||
/**
|
||||
* ### Base proc for alt click interaction right click.
|
||||
*
|
||||
* If you wish to add custom `click_alt_secondary` behavior for a single type, use that proc.
|
||||
*/
|
||||
/mob/proc/base_click_alt_secondary(atom/target)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
//Hook on the mob to intercept the click
|
||||
if(SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON_SECONDARY, target) & COMSIG_MOB_CANCEL_CLICKON)
|
||||
return
|
||||
|
||||
//Hook on the atom to intercept the click
|
||||
if(SEND_SIGNAL(target, COMSIG_CLICK_ALT_SECONDARY, src) & COMPONENT_CANCEL_CLICK_ALT_SECONDARY)
|
||||
return
|
||||
|
||||
// If it has a custom click_alt_secondary then do that
|
||||
target.click_alt_secondary(src)
|
||||
/* //NYI
|
||||
if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY))
|
||||
target.click_alt_secondary(src)
|
||||
*/
|
||||
|
||||
/**
|
||||
* ## Custom alt click secondary interaction
|
||||
* Override this to change default alt right click behavior.
|
||||
*
|
||||
* ### Guard clauses
|
||||
* Consider adding `interaction_flags_click` before adding unique guard clauses.
|
||||
**/
|
||||
/atom/proc/click_alt_secondary(mob/user)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
return NONE
|
||||
|
||||
/**
|
||||
* ## No-op for unambiguous loot panel bind as a non-living mob.
|
||||
**/
|
||||
/mob/proc/alt_shift_click_on(atom/target)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* ## Bind for unambiguously opening the loot panel as a living mob.
|
||||
* This raises no signals and is not meant to have its behavior overridden.
|
||||
**/
|
||||
/mob/living/alt_shift_click_on(atom/target)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
return try_open_loot_panel_on(target)
|
||||
|
||||
///Helper for determining if a living mob may open the loot panel for some target, since it is shared between
|
||||
///alt and alt-shift click.
|
||||
///Returns FALSE if the mob is unable to open the loot panel at the target and TRUE if the loot panel was opened.
|
||||
/mob/living/proc/try_open_loot_panel_on(atom/target)
|
||||
//Just a copy past of /mob/living/MouseDrop until we get the loot panel.
|
||||
var/mob/living/living_target = target
|
||||
if(living_target.is_incorporeal())
|
||||
return
|
||||
if(istype(living_target) && living_target != src && Adjacent(living_target))
|
||||
living_target.show_inventory_panel(src) //We don't have the loot panel, so...We'll use our inventory panel for now.
|
||||
|
||||
/* //NYI
|
||||
if(!CAN_I_SEE(target) || (is_blind() && !IN_GIVEN_RANGE(src, target, 1)))
|
||||
return FALSE
|
||||
|
||||
// No alt clicking to view turf from beneath
|
||||
if(HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING))
|
||||
return FALSE
|
||||
|
||||
/// No loot panel if it's on our person
|
||||
if(isobj(target) && (target in get_all_gear(INCLUDE_PROSTHETICS|INCLUDE_ABSTRACT|INCLUDE_ACCESSORIES)))
|
||||
to_chat(src, span_warning("You can't search for this item, it's already in your inventory![!HAS_TRAIT(target, TRAIT_NODROP) ? " Take it off first." : ""]"))
|
||||
return FALSE
|
||||
|
||||
client.loot_panel.open(get_turf(target))
|
||||
return TRUE
|
||||
*/
|
||||
117
code/_onclick/click_ctrl.dm
Normal file
117
code/_onclick/click_ctrl.dm
Normal file
@@ -0,0 +1,117 @@
|
||||
/**
|
||||
* Ctrl click
|
||||
*/
|
||||
/mob/proc/CtrlClickOn(atom/A)
|
||||
base_click_ctrl(A)
|
||||
|
||||
/**
|
||||
* ### Base proc for ctrl click interaction left click.
|
||||
*
|
||||
* If you wish to add custom `click_ctrl` behavior for a single type, use that proc.
|
||||
*/
|
||||
/mob/proc/base_click_ctrl(atom/target)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
// Check if they've hooked in to prevent src from ctrl clicking anything
|
||||
if(SEND_SIGNAL(src, COMSIG_MOB_CTRL_CLICKED, target) & COMSIG_MOB_CANCEL_CLICKON)
|
||||
return TRUE
|
||||
|
||||
// If it has a signal handler that returns a click action, done.
|
||||
if(SEND_SIGNAL(target, COMSIG_CLICK_CTRL, src) & CLICK_ACTION_ANY)
|
||||
return TRUE
|
||||
|
||||
target.click_ctrl(src)
|
||||
/* //NYI
|
||||
// If it has a custom click_alt that returns success/block, done.
|
||||
if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY))
|
||||
return target.click_ctrl(src) & CLICK_ACTION_ANY
|
||||
*/
|
||||
return
|
||||
|
||||
/**
|
||||
* Ctrl click
|
||||
* For most objects, pull
|
||||
*/
|
||||
/mob/living/base_click_ctrl(atom/target)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
. = ..()
|
||||
if(. || world.time < next_move) // || !can_perform_action(target, NOT_INSIDE_TARGET | SILENT_ADJACENCY | ALLOW_RESTING | FORBID_TELEKINESIS_REACH))
|
||||
return
|
||||
|
||||
. = TRUE
|
||||
/*
|
||||
if(grab(target))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
return
|
||||
*/
|
||||
pulled(target)
|
||||
|
||||
/**
|
||||
* Ctrl mouse wheel click
|
||||
* Except for tagging datumns same as control click
|
||||
*/
|
||||
/mob/proc/CtrlMiddleClickOn(atom/A)
|
||||
if(check_rights_for(client, R_ADMIN))
|
||||
client.toggle_tag_datum(A)
|
||||
return
|
||||
CtrlClickOn(A)
|
||||
|
||||
/**
|
||||
* ## Custom ctrl click interaction
|
||||
* Override this to change default ctrl click behavior. Return `CLICK_ACTION_SUCCESS`, `CLICK_ACTION_BLOCKING` or `NONE`.
|
||||
*
|
||||
* ### Guard clauses
|
||||
* Consider adding `interaction_flags_click` before adding unique guard clauses.
|
||||
*
|
||||
* ### Return flags
|
||||
* Forgetting your return will cause the default ctrl click behavior to occur thereafter.
|
||||
*
|
||||
* Returning any value besides NONE will stop the attack chain and thus stop the object from getting pulled/grabbed
|
||||
**/
|
||||
/atom/proc/click_ctrl(mob/user)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
return NONE
|
||||
|
||||
/turf/click_ctrl(mob/user)
|
||||
user.stop_pulling()
|
||||
|
||||
/**
|
||||
* Control+Shift click
|
||||
* Unused except for AI
|
||||
*/
|
||||
/mob/proc/CtrlShiftClickOn(atom/A)
|
||||
base_click_ctrl_shift(A)
|
||||
|
||||
/**
|
||||
* ### Base proc for ctrl shift click interaction left click.
|
||||
*
|
||||
* If you wish to add custom `click_ctrl_shift` behavior for a single type, use that proc.
|
||||
*/
|
||||
/mob/proc/base_click_ctrl_shift(atom/target)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
// Check if they've hooked in to prevent src from ctrl clicking anything
|
||||
if(SEND_SIGNAL(src, COMSIG_MOB_CTRL_SHIFT_CLICKED, target) & COMSIG_MOB_CANCEL_CLICKON)
|
||||
return
|
||||
|
||||
// If it has a signal handler that returns a click action, done.
|
||||
if(SEND_SIGNAL(target, COMSIG_CLICK_CTRL_SHIFT, src) & CLICK_ACTION_ANY)
|
||||
return
|
||||
|
||||
target.click_ctrl_shift(src)
|
||||
/* //NYI
|
||||
// Proceed with ctrl shift click
|
||||
if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY))
|
||||
target.click_ctrl_shift(src)
|
||||
*/
|
||||
|
||||
/**
|
||||
* ## Custom ctrl shift click interaction
|
||||
*
|
||||
* ### Guard clauses
|
||||
* Consider adding `interaction_flags_click` before adding unique guard clauses.
|
||||
**/
|
||||
/atom/proc/click_ctrl_shift(mob/user)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
return NONE
|
||||
@@ -17,22 +17,35 @@
|
||||
return
|
||||
|
||||
var/list/modifiers = params2list(params)
|
||||
if(modifiers["shift"] && modifiers["ctrl"])
|
||||
CtrlShiftClickOn(A)
|
||||
|
||||
if(LAZYACCESS(modifiers, BUTTON4) || LAZYACCESS(modifiers, BUTTON5))
|
||||
return
|
||||
if(modifiers["shift"] && modifiers["middle"])
|
||||
ShiftMiddleClickOn(A)
|
||||
return
|
||||
if(modifiers["middle"])
|
||||
MiddleClickOn(A)
|
||||
return
|
||||
if(modifiers["shift"])
|
||||
|
||||
if(LAZYACCESS(modifiers, SHIFT_CLICK))
|
||||
if(LAZYACCESS(modifiers, MIDDLE_CLICK))
|
||||
ShiftMiddleClickOn(A)
|
||||
return
|
||||
if(LAZYACCESS(modifiers, CTRL_CLICK))
|
||||
CtrlShiftClickOn(A)
|
||||
return
|
||||
if (LAZYACCESS(modifiers, ALT_CLICK))
|
||||
alt_shift_click_on(A)
|
||||
return
|
||||
ShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["alt"]) // alt and alt-gr (rightalt)
|
||||
AltClickOn(A)
|
||||
if(LAZYACCESS(modifiers, MIDDLE_CLICK))
|
||||
if(LAZYACCESS(modifiers, CTRL_CLICK))
|
||||
CtrlMiddleClickOn(A)
|
||||
else
|
||||
MiddleClickOn(A, params)
|
||||
return
|
||||
if(modifiers["ctrl"])
|
||||
if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt)
|
||||
if(LAZYACCESS(modifiers, RIGHT_CLICK))
|
||||
AltClickSecondaryOn(A)
|
||||
else
|
||||
AltClickOn(A)
|
||||
return
|
||||
if(LAZYACCESS(modifiers, CTRL_CLICK))
|
||||
CtrlClickOn(A)
|
||||
return
|
||||
|
||||
@@ -106,26 +119,26 @@
|
||||
|
||||
//Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks
|
||||
// for non-doors/apcs
|
||||
/mob/living/silicon/robot/CtrlShiftClickOn(var/atom/A)
|
||||
A.BorgCtrlShiftClick(src)
|
||||
/mob/living/silicon/robot/CtrlShiftClickOn(atom/target)
|
||||
target.BorgCtrlShiftClick(src)
|
||||
|
||||
/mob/living/silicon/robot/ShiftClickOn(var/atom/A)
|
||||
A.BorgShiftClick(src)
|
||||
/mob/living/silicon/robot/ShiftClickOn(atom/target)
|
||||
target.BorgShiftClick(src)
|
||||
|
||||
/mob/living/silicon/robot/CtrlClickOn(var/atom/A)
|
||||
A.BorgCtrlClick(src)
|
||||
/mob/living/silicon/robot/CtrlClickOn(atom/target)
|
||||
target.BorgCtrlClick(src)
|
||||
|
||||
/mob/living/silicon/robot/AltClickOn(var/atom/A)
|
||||
A.BorgAltClick(src)
|
||||
/mob/living/silicon/robot/AltClickOn(atom/target)
|
||||
target.BorgAltClick(src)
|
||||
|
||||
/atom/proc/BorgCtrlShiftClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden
|
||||
CtrlShiftClick(user)
|
||||
/atom/proc/BorgCtrlShiftClick(mob/living/silicon/robot/user) //forward to human click if not overriden
|
||||
user.click_ctrl_shift(user)
|
||||
|
||||
/obj/machinery/door/airlock/BorgCtrlShiftClick(var/mob/living/silicon/robot/user)
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AICtrlShiftClick(user)
|
||||
AIclick_ctrl_shift(user)
|
||||
|
||||
/atom/proc/BorgShiftClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden
|
||||
ShiftClick(user)
|
||||
@@ -137,28 +150,28 @@
|
||||
AIShiftClick(user)
|
||||
|
||||
/atom/proc/BorgCtrlClick(var/mob/living/silicon/robot/user) //forward to human click if not overriden
|
||||
CtrlClick(user)
|
||||
user.base_click_ctrl(src)
|
||||
|
||||
/obj/machinery/door/airlock/BorgCtrlClick(var/mob/living/silicon/robot/user) // Bolts doors. Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AICtrlClick(user)
|
||||
ctrl_click_ai(user)
|
||||
|
||||
/obj/machinery/power/apc/BorgCtrlClick(var/mob/living/silicon/robot/user) // turns off/on APCs. Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AICtrlClick(user)
|
||||
ctrl_click_ai(user)
|
||||
|
||||
/obj/machinery/turretid/BorgCtrlClick(var/mob/living/silicon/robot/user) //turret control on/off. Forwards to AI code.
|
||||
if(user.bolt && !user.bolt.malfunction)
|
||||
return
|
||||
|
||||
AICtrlClick(user)
|
||||
ctrl_click_ai(user)
|
||||
|
||||
/atom/proc/BorgAltClick(var/mob/living/silicon/robot/user)
|
||||
AltClick(user)
|
||||
click_alt(user)
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/BorgAltClick(var/mob/living/silicon/robot/user) // Eletrifies doors. Forwards to AI code.
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
if(modifiers["alt"]) // alt and alt-gr (rightalt)
|
||||
var/turf/T = get_turf(A)
|
||||
if(T && TurfAdjacent(T))
|
||||
T.AltClick(src)
|
||||
T.click_alt(src)
|
||||
return
|
||||
// You are responsible for checking config.ghost_interaction when you override this function
|
||||
// Not all of them require checking, see below
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
remembered = null
|
||||
. = ..()
|
||||
|
||||
/obj/item/stack/hose/CtrlClick(mob/user)
|
||||
/obj/item/stack/hose/item_ctrl_click(mob/user)
|
||||
if(remembered)
|
||||
to_chat(user, span_notice("You wind \the [src] back up."))
|
||||
remembered = null
|
||||
|
||||
@@ -873,7 +873,7 @@
|
||||
to_chat(user, span_warning("Access denied."))
|
||||
return
|
||||
|
||||
/obj/machinery/alarm/AltClick(mob/user)
|
||||
/obj/machinery/alarm/click_alt(mob/user)
|
||||
..()
|
||||
togglelock(user)
|
||||
|
||||
|
||||
@@ -503,7 +503,7 @@ About the new airlock wires panel:
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/door/airlock/CtrlClick(mob/user) //Hold door open
|
||||
/obj/machinery/door/airlock/click_ctrl(mob/user) //Hold door open
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(user.is_incorporeal())
|
||||
return
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
// inserted = null
|
||||
// return ..()
|
||||
|
||||
/obj/machinery/gear_painter/AltClick(mob/user)
|
||||
/obj/machinery/gear_painter/click_alt(mob/user)
|
||||
. = ..()
|
||||
drop_item(user)
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/machinery/washing_machine/AltClick()
|
||||
/obj/machinery/washing_machine/click_alt()
|
||||
start()
|
||||
|
||||
/obj/machinery/washing_machine/verb/start_washing()
|
||||
|
||||
@@ -2044,7 +2044,7 @@
|
||||
else//Everyone else gets the normal noise
|
||||
who << sound('sound/mecha/nominal.ogg',volume=50)
|
||||
|
||||
/obj/mecha/AltClick(mob/living/user)
|
||||
/obj/mecha/click_alt(mob/living/user)
|
||||
if(user == occupant)
|
||||
strafing()
|
||||
|
||||
|
||||
@@ -185,6 +185,19 @@
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/click_ctrl(mob/user)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
//If the item is on the ground & not anchored we allow the player to drag it
|
||||
. = item_ctrl_click(user)
|
||||
if(. & CLICK_ACTION_ANY)
|
||||
return (isturf(loc) && !anchored) ? NONE : . //allow the object to get dragged on the floor
|
||||
|
||||
/// Subtypes only override this proc for ctrl click purposes. obeys same principles as ctrl_click()
|
||||
/obj/item/proc/item_ctrl_click(mob/user)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
return NONE
|
||||
|
||||
/// Called when an action associated with our item is deleted
|
||||
/obj/item/proc/on_action_deleted(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
// Description: Checks if the user is made of silicon and returns if they are. If the user is not made of silicon and can use the communicator,
|
||||
// removes the ID from the communicator if it has one, or sends a chat message indicating that the communicator does not have an ID.
|
||||
|
||||
/obj/item/communicator/AltClick()
|
||||
/obj/item/communicator/click_alt()
|
||||
if(issilicon(usr))
|
||||
return
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
compass.show_waypoint("\ref[gps]")
|
||||
compass.rebuild_overlay_lists(update_compass_icon)
|
||||
|
||||
/obj/item/gps/AltClick(mob/user)
|
||||
/obj/item/gps/click_alt(mob/user)
|
||||
toggletracking(user)
|
||||
|
||||
/obj/item/gps/proc/toggletracking(mob/living/user)
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/personal_shield_generator/AltClick(mob/living/user)
|
||||
/obj/item/personal_shield_generator/click_alt(mob/living/user)
|
||||
weapon_toggle()
|
||||
|
||||
/obj/item/personal_shield_generator/MouseDrop()
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
set_light_on(TRUE)
|
||||
|
||||
//VOREStation Add Start
|
||||
/obj/item/radio/intercom/AICtrlClick(var/mob/user)
|
||||
/obj/item/radio/intercom/ctrl_click_ai(var/mob/user)
|
||||
ToggleBroadcast()
|
||||
to_chat(user, span_notice("\The [src]'s microphone is now <b>[broadcasting ? "enabled" : "disabled"]</b>."))
|
||||
|
||||
|
||||
@@ -30,5 +30,5 @@
|
||||
if(ismob(loc))
|
||||
loc.runechat_message("\[TTS Voice\] [message]")
|
||||
|
||||
/obj/item/text_to_speech/AltClick(mob/user) // QOL Change
|
||||
/obj/item/text_to_speech/click_alt(mob/user) // QOL Change
|
||||
attack_self(user)
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
add_overlay(corptag_icon_state)
|
||||
|
||||
/obj/structure/closet/body_bag/cryobag/robobag/AltClick(mob/user)
|
||||
/obj/structure/closet/body_bag/cryobag/robobag/click_alt(mob/user)
|
||||
if(!Adjacent(user))
|
||||
..()
|
||||
if(corptag)
|
||||
|
||||
@@ -62,7 +62,7 @@ var/list/marker_beacon_colors = list(
|
||||
var/obj/structure/marker_beacon/M = new(user.loc, picked_color)
|
||||
transfer_fingerprints_to(M)
|
||||
|
||||
/obj/item/stack/marker_beacon/AltClick(mob/living/user)
|
||||
/obj/item/stack/marker_beacon/click_alt(mob/living/user)
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, span_warning("You can't do that right now!"))
|
||||
return
|
||||
@@ -138,7 +138,7 @@ var/list/marker_beacon_colors = list(
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/marker_beacon/AltClick(mob/living/user)
|
||||
/obj/structure/marker_beacon/click_alt(mob/living/user)
|
||||
..()
|
||||
if(perma)
|
||||
return
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
adjusted_name = sane_name
|
||||
return TRUE
|
||||
|
||||
/obj/item/toy/plushie/customizable/AltClick(mob/user)
|
||||
/obj/item/toy/plushie/customizable/click_alt(mob/user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/item/toy/plushie/customizable/dragon
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
|
||||
/obj/item/toy/sword/AltClick(mob/living/user)
|
||||
/obj/item/toy/sword/click_alt(mob/living/user)
|
||||
if(!in_range(src, user)) //Basic checks to prevent abuse
|
||||
return
|
||||
if(user.incapacitated() || !istype(user))
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
icon = 'icons/obj/drakietoy.dmi'
|
||||
var/lights_glowing = FALSE
|
||||
|
||||
/obj/item/toy/plushie/borgplushie/drake/AltClick(mob/living/user)
|
||||
/obj/item/toy/plushie/borgplushie/drake/click_alt(mob/living/user)
|
||||
. = ..()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room
|
||||
@@ -1033,7 +1033,7 @@
|
||||
/obj/item/toy/desk/attack_self(mob/user)
|
||||
activate(user)
|
||||
|
||||
/obj/item/toy/desk/AltClick(mob/user)
|
||||
/obj/item/toy/desk/click_alt(mob/user)
|
||||
activate(user)
|
||||
|
||||
/obj/item/toy/desk/MouseDrop(mob/user as mob) // Code from Paper bin, so you can still pick up the deck
|
||||
|
||||
@@ -54,7 +54,7 @@ GLOBAL_LIST_INIT(robot_glass_options, list(
|
||||
balloon_alert(user,"the fabricator now holds [stored_matter]/30 fabrication-units.")
|
||||
return
|
||||
|
||||
/obj/item/rsf/CtrlClick(mob/living/user)
|
||||
/obj/item/rsf/item_ctrl_click(mob/living/user)
|
||||
if(!Adjacent(user) || !istype(user))
|
||||
balloon_alert(user,"you are too far away.")
|
||||
return
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/melee/energy/AltClick(mob/living/user)
|
||||
/obj/item/melee/energy/click_alt(mob/living/user)
|
||||
if(!colorable) //checks if is not colorable
|
||||
return
|
||||
if(!in_range(src, user)) //Basic checks to prevent abuse
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
|
||||
/obj/item/shield/energy/AltClick(mob/living/user)
|
||||
/obj/item/shield/energy/click_alt(mob/living/user)
|
||||
if(!in_range(src, user)) //Basic checks to prevent abuse
|
||||
return
|
||||
if(user.incapacitated() || !istype(user))
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
if(0)
|
||||
to_chat(usr, "[src] now opens as a container.")
|
||||
|
||||
/obj/item/storage/quickdraw/AltClick(mob/user)
|
||||
/obj/item/storage/quickdraw/click_alt(mob/user)
|
||||
..()
|
||||
if(src.loc == user) //Are they carrying us?
|
||||
toggle_quickdraw()
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/storage/secure/AltClick(mob/user as mob)
|
||||
/obj/item/storage/secure/click_alt(mob/user as mob)
|
||||
if (isliving(user) && Adjacent(user) && (src.locked == 1))
|
||||
to_chat(user, span_warning("[src] is locked and cannot be opened!"))
|
||||
else if (isliving(user) && Adjacent(user) && (!src.locked))
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
usr.put_in_l_hand(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
/obj/item/storage/AltClick(mob/user)
|
||||
/obj/item/storage/click_alt(mob/user)
|
||||
if(user in is_seeing)
|
||||
src.close(user)
|
||||
// I would think there should be some incap check here or something
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
initialize_for_recipient(recipient_mob.mind, preset_goodies = TRUE)
|
||||
return TRUE
|
||||
|
||||
/obj/item/mail/blank/AltClick(mob/user)
|
||||
/obj/item/mail/blank/click_alt(mob/user)
|
||||
if(sealed)
|
||||
return
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
else
|
||||
toggle(user)
|
||||
|
||||
/obj/structure/closet/secure_closet/AltClick()
|
||||
/obj/structure/closet/secure_closet/click_alt()
|
||||
..()
|
||||
verb_togglelock()
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
if(health <= 0)
|
||||
puncture()
|
||||
|
||||
/obj/structure/inflatable/CtrlClick()
|
||||
/obj/structure/inflatable/click_ctrl()
|
||||
hand_deflate()
|
||||
|
||||
/obj/item/inflatable/proc/inflate(var/mob/user,var/location)
|
||||
|
||||
@@ -190,7 +190,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
|
||||
//New Altclick functionality!
|
||||
//Altclick the cart with a mop to stow the mop away
|
||||
//Altclick the cart with a reagent container to pour things into the bucket without putting the bottle in trash
|
||||
/obj/structure/janitorialcart/AltClick(mob/living/user)
|
||||
/obj/structure/janitorialcart/click_alt(mob/living/user)
|
||||
if(user.incapacitated() || !Adjacent(user)) return
|
||||
var/obj/I = user.get_active_hand()
|
||||
if(istype(I, /obj/item/mop))
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
setAngle(SIMPLIFY_DEGREES(new_angle))
|
||||
return TRUE
|
||||
|
||||
/obj/structure/reflector/AltClick(mob/user)
|
||||
/obj/structure/reflector/click_alt(mob/user)
|
||||
if(!CanUseTopic(user))
|
||||
return
|
||||
else if(finished)
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
return TryToSwitchState(user)
|
||||
|
||||
/* // CHOMPEDIT: disabling becaue alt-clicking to view a turf is pretty important.
|
||||
/obj/structure/simple_door/AltClick(mob/user as mob)
|
||||
/obj/structure/simple_door/click_alt(mob/user as mob)
|
||||
. = ..()
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(!Adjacent(user))
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
user_unbuckle_mob(A, user)
|
||||
return
|
||||
|
||||
/obj/structure/bed/chair/wheelchair/CtrlClick(var/mob/user)
|
||||
/obj/structure/bed/chair/wheelchair/click_ctrl(mob/user)
|
||||
if(in_range(src, user))
|
||||
if(!ishuman(user)) return
|
||||
if(has_buckled_mobs() && (user in buckled_mobs))
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
ChangeTurf(/turf/simulated/floor/cult, preserve_outdoors = TRUE)
|
||||
return TRUE
|
||||
|
||||
/turf/simulated/floor/AltClick(mob/user)
|
||||
/turf/simulated/floor/click_alt(mob/user)
|
||||
if(isliving(user))
|
||||
var/mob/living/livingUser = user
|
||||
if(try_graffiti(livingUser, livingUser.get_active_hand()))
|
||||
|
||||
@@ -347,7 +347,7 @@
|
||||
ChangeTurf(/turf/simulated/wall/cult, preserve_outdoors = TRUE)
|
||||
return TRUE
|
||||
|
||||
/turf/simulated/wall/AltClick(mob/user)
|
||||
/turf/simulated/wall/click_alt(mob/user)
|
||||
if(isliving(user))
|
||||
var/mob/living/livingUser = user
|
||||
if(try_graffiti(livingUser, livingUser.get_active_hand()))
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
info = {"<font face="Comic Sans MS" color=#DA0000><b><center></center><BR><center><I><B>Form - Inventory Requisition r10.7.1E</I></B></center><BR><center><font size="4">General Request Form</font></center><BR><BR><center><B>General</B></center><BR><BR>Name: <span class="paper_field"></span><BR>Department: <span class="paper_field"></span><BR>Departmental Rank: <span class="paper_field"></span><BR>Organization(If not Nanotrasen): <span class="paper_field"></span><BR>Date: <span class="paper_field"></span><BR><BR><BR><BR>Requested Item(s): <span class="paper_field"></span><BR>Quantity: <span class="paper_field"></span><BR>Reason for request: <span class="paper_field"></span><BR>Is this replacement equipment?: <span class="paper_field"></span><BR>If `Yes`; above, specify equiment and reason for replacement: <span class="paper_field"></span><BR><BR><BR><center><B>Authorization</B></center><BR><BR>Authorizing Department: <span class="paper_field"></span><BR>Authorizing Dept. Head: <span class="paper_field"></span><BR><BR><BR><center><B>Contact and Delivery</B></center><BR><BR>EPv2 Address of requesting party(Do not leave blank): <span class="paper_field"></span><BR>Delivery location or department: <span class="paper_field"></span><BR><BR><BR>Nanotrasen Employee Identification Number: <span class="paper_field"></span><BR><U>Signature of Requester and Date</U><BR><BR><span class="paper_field"></span><BR><BR><BR><BR>Authorizor`s Nanotrasen Employee Identification Number: <span class="paper_field"></span><BR><U>Authorizing Signature and Date(Include authorizing department`s stamp below)</U><BR><BR><span class="paper_field"></span><BR><BR><BR><center><B>Shipping Department Only</B></center><BR><center><I>(Do not write below this line)</I></center><BR>Nanotrasen Purchasing Approval Code: <span class="paper_field"></span><BR>Nanotrasen Employee Identification Number: <span class="paper_field"></span><BR>Receiving Shipping Employee: <span class="paper_field"></span><BR><U>Signature and Date</U><BR><BR><span class="paper_field"></span><BR></b></font>"}
|
||||
info_links = {"<font face="Comic Sans MS" color=#FF9300><b><center></center><BR><center><I><B>Form - Inventory Requisition r10.7.1E</I></B></center><BR><center><font size="4">General Request Form</font></center><BR><BR><center><B>General</B></center><BR><BR>Name: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=1'>write</A></font></span><BR>Department: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=2'>write</A></font></span><BR>Departmental Rank: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=3'>write</A></font></span><BR>Organization(If not Nanotrasen): <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=4'>write</A></font></span><BR>Date: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=5'>write</A></font></span><BR><BR><BR><BR>Requested Item(s): <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=6'>write</A></font></span><BR>Quantity: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=7'>write</A></font></span><BR>Reason for request: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=8'>write</A></font></span><BR>Is this replacement equipment?: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=9'>write</A></font></span><BR>If `Yes` above, specify equiment and reason for replacement: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=10'>write</A></font></span><BR><BR><BR><center><B>Authorization</B></center><BR><BR>Authorizing Department: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=11'>write</A></font></span><BR>Authorizing Dept. Head: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=12'>write</A></font></span><BR><BR><BR><center><B>Contact and Delivery</B></center><BR><BR>EPv2 Address of requesting party(Do not leave blank): <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=13'>write</A></font></span><BR>Delivery location or department: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=14'>write</A></font></span><BR><BR><BR>Nanotrasen Employee Identification Number: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=15'>write</A></font></span><BR><U>Signature of Requester and Date</U><BR><BR><span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=16'>write</A></font></span><BR><BR><BR><BR>Authorizor`s Nanotrasen Employee Identification Number: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=17'>write</A></font></span><BR><U>Authorizing Signature and Date(Include authorizing department`s stamp below)</U><BR><BR><span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=18'>write</A></font></span><BR><BR><BR><center><B>Shipping Department Only</B></center><BR><center><I>(Do not write below this line)</I></center><BR>Nanotrasen Purchasing Approval Code: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=19'>write</A></font></span><BR>Nanotrasen Employee Identification Number: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=20'>write</A></font></span><BR>Receiving Shipping Employee: <span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=21'>write</A></font></span><BR><U>Signature and Date</U><BR><BR><span class="paper_field"><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=22'>write</A></font></span><BR></b></font><font face="Verdana"><A href='byond://?src=[0x2057e0c];write=end'>write</A></font>"}
|
||||
|
||||
/obj/item/paper/carbon/cursedform/AltClick() // No fun.
|
||||
/obj/item/paper/carbon/cursedform/click_alt() // No fun.
|
||||
return
|
||||
|
||||
/obj/item/paper/carbon/cursedform/burnpaper(obj/item/flame/P, mob/user)
|
||||
|
||||
@@ -226,11 +226,11 @@
|
||||
sleep(5)
|
||||
target.filters -= filter(type="blur", size = 0)
|
||||
|
||||
/obj/item/telecube/CtrlClick(mob/user)
|
||||
/obj/item/telecube/item_ctrl_click(mob/user)
|
||||
if(Adjacent(user) && teleport_to_mate(user))
|
||||
cooldown(mate_too = FALSE)
|
||||
|
||||
/obj/item/telecube/AltClick(mob/user)
|
||||
/obj/item/telecube/click_alt(mob/user)
|
||||
if(Adjacent(user) && swap_with_mate())
|
||||
cooldown(mate_too = TRUE)
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
last_passive_use = world.time
|
||||
blob_type.on_chunk_tick(src)
|
||||
|
||||
/obj/item/blobcore_chunk/AltClick(mob/living/carbon/user)
|
||||
/obj/item/blobcore_chunk/click_alt(mob/living/carbon/user)
|
||||
if(blob_type && blob_type.chunk_active_type == BLOB_CHUNK_TOGGLE)
|
||||
should_tick = !should_tick
|
||||
|
||||
|
||||
@@ -191,7 +191,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers)
|
||||
|
||||
|
||||
|
||||
/obj/item/cataloguer/AltClick(mob/user)
|
||||
/obj/item/cataloguer/click_alt(mob/user)
|
||||
pulse_scan(user)
|
||||
|
||||
// Gives everything capable of being scanned an outline for a brief moment.
|
||||
|
||||
@@ -60,36 +60,38 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
|
||||
|
||||
// Rate limiting
|
||||
var/mtl = CONFIG_GET(number/minute_topic_limit)
|
||||
if (!check_rights_for(src, R_HOLDER) && mtl)
|
||||
var/minute = round(world.time, 600)
|
||||
if (!topiclimiter)
|
||||
topiclimiter = new(LIMITER_SIZE)
|
||||
if (minute != topiclimiter[CURRENT_MINUTE])
|
||||
topiclimiter[CURRENT_MINUTE] = minute
|
||||
topiclimiter[MINUTE_COUNT] = 0
|
||||
topiclimiter[MINUTE_COUNT] += 1
|
||||
if (topiclimiter[MINUTE_COUNT] > mtl)
|
||||
var/msg = "Your previous action was ignored because you've done too many in a minute."
|
||||
if (minute != topiclimiter[ADMINSWARNED_AT]) //only one admin message per-minute. (if they spam the admins can just boot/ban them)
|
||||
topiclimiter[ADMINSWARNED_AT] = minute
|
||||
msg += " Administrators have been informed."
|
||||
log_game("[key_name(src)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute")
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] [ADMIN_KICK(usr)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute")
|
||||
to_chat(src, span_danger("[msg]"))
|
||||
return
|
||||
if(href_list["window_id"] != "statbrowser") //Deviation from TG. Our statbrowser has so many commands that logging in as a borg can cause it to rate limit you. This needs fixing eventually.
|
||||
if (!check_rights_for(src, R_HOLDER) && mtl)
|
||||
var/minute = round(world.time, 600)
|
||||
if (!topiclimiter)
|
||||
topiclimiter = new(LIMITER_SIZE)
|
||||
if (minute != topiclimiter[CURRENT_MINUTE])
|
||||
topiclimiter[CURRENT_MINUTE] = minute
|
||||
topiclimiter[MINUTE_COUNT] = 0
|
||||
if(href_list["window_id"] != "statbrowser")
|
||||
topiclimiter[MINUTE_COUNT] += 1
|
||||
if (topiclimiter[MINUTE_COUNT] > mtl)
|
||||
var/msg = "Your previous action was ignored because you've done too many in a minute."
|
||||
if (minute != topiclimiter[ADMINSWARNED_AT]) //only one admin message per-minute. (if they spam the admins can just boot/ban them)
|
||||
topiclimiter[ADMINSWARNED_AT] = minute
|
||||
msg += " Administrators have been informed."
|
||||
log_game("[key_name(src)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute")
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] [ADMIN_KICK(usr)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute")
|
||||
to_chat(src, span_danger("[msg]"))
|
||||
return
|
||||
|
||||
var/stl = CONFIG_GET(number/second_topic_limit)
|
||||
if (!check_rights_for(src, R_HOLDER) && stl && href_list["window_id"] != "statbrowser")
|
||||
var/second = round(world.time, 10)
|
||||
if (!topiclimiter)
|
||||
topiclimiter = new(LIMITER_SIZE)
|
||||
if (second != topiclimiter[CURRENT_SECOND])
|
||||
topiclimiter[CURRENT_SECOND] = second
|
||||
topiclimiter[SECOND_COUNT] = 0
|
||||
topiclimiter[SECOND_COUNT] += 1
|
||||
if (topiclimiter[SECOND_COUNT] > stl)
|
||||
to_chat(src, span_danger("Your previous action was ignored because you've done too many in a second"))
|
||||
return
|
||||
var/stl = CONFIG_GET(number/second_topic_limit)
|
||||
if (!check_rights_for(src, R_HOLDER) && stl)
|
||||
var/second = round(world.time, 10)
|
||||
if (!topiclimiter)
|
||||
topiclimiter = new(LIMITER_SIZE)
|
||||
if (second != topiclimiter[CURRENT_SECOND])
|
||||
topiclimiter[CURRENT_SECOND] = second
|
||||
topiclimiter[SECOND_COUNT] = 0
|
||||
topiclimiter[SECOND_COUNT] += 1
|
||||
if (topiclimiter[SECOND_COUNT] > stl)
|
||||
to_chat(src, span_danger("Your previous action was ignored because you've done too many in a second"))
|
||||
return
|
||||
|
||||
//search the href for script injection
|
||||
if( findtext(href,"<script",1,0) )
|
||||
|
||||
@@ -510,7 +510,7 @@
|
||||
item_flags &= ~FLEXIBLEMATERIAL
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/accessory/gaiter/AltClick(mob/user)
|
||||
/obj/item/clothing/accessory/gaiter/click_alt(mob/user)
|
||||
. = ..()
|
||||
if(breath_masked && breathmask)
|
||||
to_chat(user, span_notice("You pull [breathmask] out from behind [src], and it drops to your feet."))
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
/obj/item/gps/watch
|
||||
gps_tag = "SRV-WTCH"
|
||||
|
||||
/obj/item/clothing/accessory/watch/survival/AltClick(mob/user)
|
||||
/obj/item/clothing/accessory/watch/survival/click_alt(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(Adjacent(user))
|
||||
|
||||
@@ -365,7 +365,7 @@ BLIND // can't see anything
|
||||
. = ..()
|
||||
. += to_chat(user, span_notice("Alt-click to toggle modes."))
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/bigshot/AltClick(mob/user)
|
||||
/obj/item/clothing/glasses/sunglasses/bigshot/click_alt(mob/user)
|
||||
set src in usr
|
||||
if(user.canmove && !user.stat && !user.restrained())
|
||||
if(src.ar)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
/obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, actiontype)
|
||||
halt()
|
||||
|
||||
/obj/item/clothing/mask/gas/sechailer/AltClick(mob/user)
|
||||
/obj/item/clothing/mask/gas/sechailer/click_alt(mob/user)
|
||||
selectphrase()
|
||||
|
||||
/obj/item/clothing/mask/gas/sechailer/verb/selectphrase()
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
to_chat(H, span_info("You deploy your suit helmet, sealing you off from the world."))
|
||||
playsound(src.loc, 'sound/machines/click2.ogg', 75, 1)
|
||||
|
||||
/obj/item/clothing/suit/space/void/AltClick(mob/living/user)
|
||||
/obj/item/clothing/suit/space/void/click_alt(mob/living/user)
|
||||
eject_tank()
|
||||
|
||||
/obj/item/clothing/suit/space/void/verb/eject_tank()
|
||||
|
||||
@@ -1063,7 +1063,7 @@
|
||||
/obj/item/clothing/suit/caution/attack_self()
|
||||
toggle()
|
||||
|
||||
/obj/item/clothing/suit/caution/AltClick()
|
||||
/obj/item/clothing/suit/caution/click_alt()
|
||||
toggle()
|
||||
|
||||
/obj/item/clothing/suit/caution/proc/toggle()
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
sample = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/microscope/AltClick()
|
||||
/obj/machinery/microscope/click_alt()
|
||||
remove_sample(usr)
|
||||
|
||||
/obj/machinery/microscope/MouseDrop(var/atom/other)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
interact(user)
|
||||
|
||||
|
||||
/obj/machinery/cash_register/AltClick(mob/user)
|
||||
/obj/machinery/cash_register/click_alt(mob/user)
|
||||
if(Adjacent(user))
|
||||
open_cash_box()
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
interact(user)
|
||||
|
||||
|
||||
/obj/item/retail_scanner/AltClick(var/mob/user)
|
||||
/obj/item/retail_scanner/click_alt(var/mob/user)
|
||||
if(Adjacent(user))
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
|
||||
@@ -371,7 +371,7 @@
|
||||
src.visible_message(span_notice("[user] slides the [W] over to [result]!"))
|
||||
next_result = 0
|
||||
|
||||
/obj/item/entrepreneur/spirit_board/AltClick(mob/living/carbon/user)
|
||||
/obj/item/entrepreneur/spirit_board/click_alt(mob/living/carbon/user)
|
||||
if(!istype(user)) //admins can be cheeky
|
||||
return 0
|
||||
next_result = tgui_input_list(user, "What should it land on next?", "Next result", possible_results)
|
||||
@@ -427,7 +427,7 @@
|
||||
rollertype = /obj/item/roller/massage
|
||||
bedtype = /obj/structure/bed/roller/massage
|
||||
|
||||
/obj/structure/bed/roller/massage/AltClick(mob/living/carbon/user)
|
||||
/obj/structure/bed/roller/massage/click_alt(mob/living/carbon/user)
|
||||
if(anchored)
|
||||
anchored = 0
|
||||
src.visible_message(span_notice("[user] turns the breaks off on the [src]!"))
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
. += span_notice("It has [Bait] hanging on its hook: ")
|
||||
. += Bait.examine(user)
|
||||
|
||||
/obj/item/material/fishing_rod/CtrlClick(mob/user)
|
||||
/obj/item/material/fishing_rod/item_ctrl_click(mob/user)
|
||||
if((src.loc == user || Adjacent(user)) && Bait)
|
||||
Bait.forceMove(get_turf(user))
|
||||
to_chat(user, span_notice("You remove the bait from \the [src]."))
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
playsound(src, 'sound/machines/click.ogg', 40, 1)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/appliance/AICtrlClick(mob/user)
|
||||
/obj/machinery/appliance/ctrl_click_ai(mob/user)
|
||||
attempt_toggle_power(user)
|
||||
|
||||
/obj/machinery/appliance/proc/choose_output()
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
return 1//Contains only a single object which can be extracted alone
|
||||
return 2//Contains multiple objects and/or reagents
|
||||
|
||||
/obj/item/reagent_containers/cooking_container/AltClick(var/mob/user)
|
||||
/obj/item/reagent_containers/cooking_container/click_alt(var/mob/user)
|
||||
do_empty(user)
|
||||
|
||||
//Deletes contents of container.
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
oven_loop.stop(src)
|
||||
..()
|
||||
|
||||
/obj/machinery/appliance/cooker/oven/AltClick(var/mob/user)
|
||||
/obj/machinery/appliance/cooker/oven/click_alt(var/mob/user)
|
||||
try_toggle_door(user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
|
||||
|
||||
@@ -253,10 +253,10 @@
|
||||
|
||||
user.visible_message(span_notice("\The [user] searches for specific cards in \the [src], and draws [cards_to_draw.len]."))
|
||||
|
||||
/obj/item/deck/CtrlClick(mob/user)
|
||||
/obj/item/deck/item_ctrl_click(mob/user)
|
||||
deal_card()
|
||||
|
||||
/obj/item/deck/CtrlShiftClick(mob/user)
|
||||
/obj/item/deck/click_ctrl_shift(mob/user)
|
||||
deal_card_multi()
|
||||
|
||||
/obj/item/deck/proc/deal_at(mob/user, mob/target, dcard) // Take in the no. of card to be dealt
|
||||
@@ -329,7 +329,7 @@
|
||||
else
|
||||
return
|
||||
|
||||
/obj/item/deck/AltClick(mob/user)
|
||||
/obj/item/deck/click_alt(mob/user)
|
||||
if(user.stat || !Adjacent(user))
|
||||
return
|
||||
shuffle(user)
|
||||
@@ -569,10 +569,10 @@
|
||||
..()
|
||||
src.update_icon()
|
||||
|
||||
/obj/item/hand/CtrlClick(mob/user)
|
||||
/obj/item/hand/item_ctrl_click(mob/user)
|
||||
if(user.stat || !Adjacent(user))
|
||||
return
|
||||
discard()
|
||||
|
||||
/obj/item/hand/AltClick(mob/user)
|
||||
/obj/item/hand/click_alt(mob/user)
|
||||
Removecard()
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
desc = "[initial(desc)] It looks a little misshapen, somehow..."
|
||||
loaded = to_weight
|
||||
|
||||
/obj/item/dice/AltClick(mob/user)
|
||||
/obj/item/dice/click_alt(mob/user)
|
||||
..()
|
||||
if(cheater)
|
||||
if(!loaded)
|
||||
@@ -141,7 +141,7 @@
|
||||
icon_state = "[name][result]"
|
||||
user.visible_message(span_notice("\The [user] turned \the [src] to the face reading [result] manually."))
|
||||
|
||||
/obj/item/dice/CtrlClick(mob/user)
|
||||
/obj/item/dice/item_ctrl_click(mob/user)
|
||||
set_dice(user)
|
||||
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
REAGENT_ID_PITCHERNECTAR = 1
|
||||
)
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/AltClick(var/mob/living/user)
|
||||
/obj/machinery/portable_atmospherics/hydroponics/click_alt(var/mob/living/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(mechanical && !user.incapacitated() && Adjacent(user))
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
if(IC)
|
||||
. += IC.examine(user)
|
||||
|
||||
/obj/item/clothing/CtrlShiftClick(mob/user)
|
||||
/obj/item/clothing/click_ctrl_shift(mob/user)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room
|
||||
return FALSE
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
/obj/item/walkpod/proc/update_music()
|
||||
listener?.force_music(media_url, media_start_time, volume) // Calling this with "" url (when we aren't playing) helpfully disables forced music
|
||||
|
||||
/obj/item/walkpod/AltClick(mob/living/L)
|
||||
/obj/item/walkpod/click_alt(mob/living/L)
|
||||
if(L == listener && check_listener())
|
||||
tgui_interact(L)
|
||||
else if(loc == L) // at least they're holding it
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
scan_time = 0.5 SECONDS
|
||||
exact = TRUE
|
||||
|
||||
/obj/item/mining_scanner/advanced/AltClick(mob/user)
|
||||
/obj/item/mining_scanner/advanced/click_alt(mob/user)
|
||||
change_size()
|
||||
|
||||
/obj/item/mining_scanner/advanced/verb/change_size()
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
var/digspeed = 40
|
||||
var/grave_mode = FALSE
|
||||
|
||||
/obj/item/shovel/AltClick(mob/user)
|
||||
/obj/item/shovel/click_alt(mob/user)
|
||||
grave_mode = !grave_mode
|
||||
to_chat(user, span_notice("You'll now dig [grave_mode ? "out graves" : "for loot"]."))
|
||||
. = ..()
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
/obj/item/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
do_scan(M, user)
|
||||
|
||||
/obj/item/robotanalyzer/AltClick(mob/user)
|
||||
/obj/item/robotanalyzer/click_alt(mob/user)
|
||||
mode = !mode
|
||||
user.show_message(span_blue("[mode ? "Toggled to cyborg analyzing mode." : "Toggled to cyborg upgrade scan mode."]"), 1)
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/obj/item/borg/cloak/attack_self(mob/user)
|
||||
set_cloak_level(user)
|
||||
|
||||
/obj/item/borg/cloak/CtrlClick(mob/user)
|
||||
/obj/item/borg/cloak/item_ctrl_click(mob/user)
|
||||
toggle_cloak(user)
|
||||
return
|
||||
|
||||
|
||||
@@ -525,7 +525,7 @@
|
||||
exact = TRUE
|
||||
to_chat(user, span_notice("You've upgraded the mining scanner for [upgrade_cost] points."))
|
||||
|
||||
/obj/item/mining_scanner/robot/AltClick(mob/user)
|
||||
/obj/item/mining_scanner/robot/click_alt(mob/user)
|
||||
change_size(user)
|
||||
|
||||
/obj/item/mining_scanner/robot/proc/change_size(mob/user)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
var/list/integrated_tool_images
|
||||
|
||||
/obj/item/robotic_multibelt/CtrlClick(mob/user)
|
||||
/obj/item/robotic_multibelt/item_ctrl_click(mob/user)
|
||||
if(selected_item)
|
||||
selected_item.attack_self(user)
|
||||
return
|
||||
@@ -597,13 +597,13 @@
|
||||
. += span_notice("\The [src] is holding \the [wrapped].")
|
||||
. += wrapped.examine(user)
|
||||
|
||||
/obj/item/gripper/CtrlClick(mob/user)
|
||||
/obj/item/gripper/item_ctrl_click(mob/user)
|
||||
var/obj/item/wrapped = get_current_pocket()
|
||||
if(wrapped && !is_in_use())
|
||||
wrapped.attack_self(user)
|
||||
return
|
||||
|
||||
/obj/item/gripper/AltClick(mob/user)
|
||||
/obj/item/gripper/click_alt(mob/user)
|
||||
if(!is_in_use())
|
||||
drop_item()
|
||||
return
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
var/icon_state_closed = "laptop-closed"
|
||||
|
||||
/obj/item/modular_computer/laptop/AltClick(mob/living/carbon/user)
|
||||
/obj/item/modular_computer/laptop/click_alt(mob/living/carbon/user)
|
||||
// We need to be close to it to open it
|
||||
if((!in_range(src, user)) || user.stat || user.restrained())
|
||||
return
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
icon_state = "greetingcard"
|
||||
slot_flags = null //no fun allowed!!!!
|
||||
|
||||
/obj/item/paper/card/AltClick() //No fun allowed
|
||||
/obj/item/paper/card/click_alt() //No fun allowed
|
||||
return
|
||||
|
||||
/obj/item/paper/card/update_icon()
|
||||
@@ -89,7 +89,7 @@
|
||||
/obj/item/paper/alien/burnpaper()
|
||||
return
|
||||
|
||||
/obj/item/paper/alien/AltClick() // No airplanes for me.
|
||||
/obj/item/paper/alien/click_alt() // No airplanes for me.
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
E.damage += 2.5
|
||||
H.emote("scream")
|
||||
|
||||
/obj/item/paper/AltClick(mob/living/carbon/user, obj/item/I)
|
||||
/obj/item/paper/click_alt(mob/living/carbon/user, obj/item/I)
|
||||
if ( istype(user) )
|
||||
if( (!in_range(src, user)) || user.stat || user.restrained() )
|
||||
return
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
var/selectedColor = 1
|
||||
var/colors = list("black","blue","red")
|
||||
|
||||
/obj/item/pen/AltClick(mob/user)
|
||||
/obj/item/pen/click_alt(mob/user)
|
||||
if(!Adjacent(user))
|
||||
return
|
||||
to_chat(user, span_notice("Click."))
|
||||
@@ -181,7 +181,7 @@
|
||||
active_icon_state = "[icon_state]-x"
|
||||
default_icon_state = icon_state
|
||||
|
||||
/obj/item/pen/blade/AltClick(mob/user)
|
||||
/obj/item/pen/blade/click_alt(mob/user)
|
||||
..()
|
||||
if(active)
|
||||
deactivate(user)
|
||||
|
||||
@@ -60,13 +60,13 @@
|
||||
if(Adjacent(user))
|
||||
. += "The time [stationtime2text()] is displayed in the corner of the screen."
|
||||
|
||||
/obj/item/pda/CtrlClick(mob/user)
|
||||
/obj/item/pda/item_ctrl_click(mob/user)
|
||||
if(can_use(user) && !issilicon(user))
|
||||
remove_pen()
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/pda/AltClick(mob/user)
|
||||
/obj/item/pda/click_alt(mob/user)
|
||||
if(issilicon(user))
|
||||
return
|
||||
|
||||
|
||||
@@ -702,7 +702,7 @@ GLOBAL_LIST_EMPTY(apcs)
|
||||
else
|
||||
to_chat(user, span_warning("Access denied."))
|
||||
|
||||
/obj/machinery/power/apc/AltClick(mob/user)
|
||||
/obj/machinery/power/apc/click_alt(mob/user)
|
||||
..()
|
||||
togglelock(user)
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@ GLOBAL_LIST_EMPTY(magazine_icondata_states)
|
||||
drop_sound = 'sound/items/drop/matchbox.ogg'
|
||||
pickup_sound = 'sound/items/pickup/matchbox.ogg'
|
||||
|
||||
/obj/item/ammo_magazine/ammo_box/AltClick(mob/user)
|
||||
/obj/item/ammo_magazine/ammo_box/click_alt(mob/user)
|
||||
if(can_remove_ammo)
|
||||
if(isliving(user) && Adjacent(user))
|
||||
if(stored_ammo.len)
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
var/flight_x_offset = 0
|
||||
var/flight_y_offset = 0
|
||||
|
||||
/obj/item/gun/CtrlClick(mob/user)
|
||||
/obj/item/gun/item_ctrl_click(mob/user)
|
||||
if(can_flashlight && ishuman(user) && loc == user && !user.incapacitated(INCAPACITATION_ALL))
|
||||
toggle_flashlight()
|
||||
else
|
||||
|
||||
@@ -327,7 +327,7 @@
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/item/melee/robotic/blade/AltClick(mob/living/user)
|
||||
/obj/item/melee/robotic/blade/click_alt(mob/living/user)
|
||||
if(!in_range(src, user)) //Basic checks to prevent abuse
|
||||
return
|
||||
if(user.incapacitated() || !istype(user))
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/projectile/smartgun/AltClick(mob/user)
|
||||
/obj/item/gun/projectile/smartgun/click_alt(mob/user)
|
||||
if(ishuman(user) && !user.incapacitated() && Adjacent(user))
|
||||
if(cycling)
|
||||
to_chat(user, span_warning("[src] is still cycling!"))
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
to_chat(user, span_warning("The alembic is already boiling!"))
|
||||
return
|
||||
|
||||
/obj/machinery/alembic/AltClick(mob/user)
|
||||
/obj/machinery/alembic/click_alt(mob/user)
|
||||
if(potion_reagent == 0)
|
||||
to_chat(user, span_warning("There is nothing in the alembic!"))
|
||||
return
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
/obj/structure/reagent_dispensers/blob_act()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/AltClick(mob/user)
|
||||
/obj/structure/reagent_dispensers/click_alt(mob/user)
|
||||
if(!Adjacent(user))
|
||||
return
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
//CHOMPedit end
|
||||
return 0
|
||||
|
||||
/obj/machinery/reagentgrinder/AltClick(mob/user)
|
||||
/obj/machinery/reagentgrinder/click_alt(mob/user)
|
||||
. = ..()
|
||||
if(user.incapacitated() || !Adjacent(user))
|
||||
return
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/injector_maker/AltClick(mob/user)
|
||||
/obj/machinery/injector_maker/click_alt(mob/user)
|
||||
. = ..()
|
||||
if(beaker)
|
||||
if(!user.incapacitated() && Adjacent(user))
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
balloon_alert(user, "\The [W] burns the blood in \the [src].")
|
||||
B.changling_blood_test(reagents)
|
||||
|
||||
/obj/item/reagent_containers/AltClick(mob/user)
|
||||
/obj/item/reagent_containers/click_alt(mob/user)
|
||||
. = ..()
|
||||
if(!Adjacent(user))
|
||||
return
|
||||
|
||||
@@ -255,17 +255,15 @@
|
||||
add_overlay(hose_overlay)
|
||||
break
|
||||
|
||||
/obj/item/reagent_containers/spray/chemsprayer/hosed/AltClick(mob/living/carbon/user)
|
||||
/obj/item/reagent_containers/spray/chemsprayer/hosed/click_alt(mob/living/carbon/user)
|
||||
if(++spray_particles > 3) spray_particles = 1
|
||||
|
||||
balloon_alert(user, "dial turned to [spray_particles].")
|
||||
return
|
||||
|
||||
/obj/item/reagent_containers/spray/chemsprayer/hosed/CtrlClick(var/mob/user)
|
||||
/obj/item/reagent_containers/spray/chemsprayer/hosed/item_ctrl_click(mob/user)
|
||||
if(loc != get_turf(src))
|
||||
heavy_spray = !heavy_spray
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/item/reagent_containers/spray/chemsprayer/hosed/Spray_at(atom/A as mob|obj, mob/user)
|
||||
update_icon()
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
if(!reskin_ran)
|
||||
. += span_notice("[src]'s external casing can be modified via alt-click.")
|
||||
|
||||
/obj/item/storage/part_replacer/AltClick(mob/user)
|
||||
/obj/item/storage/part_replacer/click_alt(mob/user)
|
||||
. = ..()
|
||||
if(!reskin_ran)
|
||||
reskin_radial(user)
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/vehicle/bike/CtrlClick(var/mob/user)
|
||||
/obj/vehicle/bike/click_ctrl(mob/user)
|
||||
if(Adjacent(user) && anchored)
|
||||
toggle()
|
||||
else
|
||||
@@ -78,7 +78,7 @@
|
||||
turn_off()
|
||||
src.visible_message("\The [src] putters before turning off.", "You hear something putter slowly.")
|
||||
|
||||
/obj/vehicle/bike/AltClick(var/mob/user)
|
||||
/obj/vehicle/bike/click_alt(var/mob/user)
|
||||
if(Adjacent(user))
|
||||
kickstand(user)
|
||||
else
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
. += "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%"
|
||||
|
||||
|
||||
/obj/vehicle/train/engine/CtrlClick(var/mob/user)
|
||||
/obj/vehicle/train/engine/click_ctrl(mob/user)
|
||||
if(Adjacent(user))
|
||||
if(on)
|
||||
stop_engine()
|
||||
@@ -217,7 +217,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/train/engine/AltClick(var/mob/user)
|
||||
/obj/vehicle/train/engine/click_alt(var/mob/user)
|
||||
if(Adjacent(user))
|
||||
remove_key()
|
||||
else
|
||||
|
||||
@@ -1929,7 +1929,7 @@ Departamental Swimsuits, for general use
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/clothing/head/fluff/nikki/AltClick(mob/user)
|
||||
/obj/item/clothing/head/fluff/nikki/click_alt(mob/user)
|
||||
if (translocator && (user.get_inactive_hand() == src))
|
||||
translocator_unequip(translocator, user)
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user