16 Commits

Author SHA1 Message Date
CHOMPStation2StaffMirrorBot
896094ef9c Limit dispenser importing to specific jobs 2025-12-08 20:23:17 +00:00
SatinIsle
65aa2cbdc7 Limit dispenser importing to specific jobs (#18805)
* Limit dispenser importing to specific jobs

This change is designed to encourage people playing specific jobs to set up their dispensers how they like, and slow down other people who may try to do that job from under them by requiring them to do it manually. Therefore chemists and bartenders can import a list of recipes into their respective dispensers, but a medical doctor can't rush in and immediately print their favourite 7 bottles before the chemist even walks in the door.

* Fix nulls
2025-12-08 20:23:16 +00:00
chompstation-ci[bot]
50d9481fa2 Automatic changelog compile [ci skip] 2025-12-07 01:38:29 +00:00
chompstation-ci[bot]
3beef0f44a Automatic changelog for PR #12069 [ci skip] 2025-12-06 20:16:56 +00:00
FluffMedic
7e3b3aa8a9 Desert Planet Alterations (#12069) 2025-12-06 21:16:17 +01:00
chompstation-ci[bot]
f746678620 Automatic changelog for PR #12071 [ci skip] 2025-12-06 08:19:12 +00:00
CHOMPStation2StaffMirrorBot
f7de0bb70b [MIRROR] Start of TG Click Code Port (#12071)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-12-06 03:18:32 -05:00
chompstation-ci[bot]
c3efdda013 Automatic changelog for PR #12070 [ci skip] 2025-12-05 21:45:34 +00:00
CHOMPStation2StaffMirrorBot
07b96e12e9 [MIRROR] dependency update (#12070)
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
2025-12-05 22:44:51 +01:00
chompstation-ci[bot]
ad7d82f3ae Automatic changelog compile [ci skip] 2025-12-05 01:23:02 +00:00
chompstation-ci[bot]
c4337dc60a Automatic changelog for PR #12068 [ci skip] 2025-12-05 01:19:46 +00:00
chompstation-ci[bot]
90bebd219a Automatic changelog for PR #12067 [ci skip] 2025-12-05 01:19:30 +00:00
CHOMPStation2StaffMirrorBot
067ab7459b [MIRROR] Hair fix things (#12068)
Co-authored-by: FluffMedic <109300046+FluffMedic@users.noreply.github.com>
2025-12-05 02:19:06 +01:00
CHOMPStation2StaffMirrorBot
a42bdce47b [MIRROR] Iframe fix (#12067)
Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com>
2025-12-05 02:18:52 +01:00
chompstation-ci[bot]
28a8d23bf6 Automatic changelog for PR #12040 [ci skip] 2025-12-05 00:26:47 +00:00
CHOMPStation2StaffMirrorBot
ba5019bd9d [MIRROR] Port of the iframe storage for settings (#12040)
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
2025-12-05 01:26:10 +01:00
151 changed files with 11314 additions and 10227 deletions

View File

@@ -0,0 +1,33 @@
name: "Generate Client Storage"
on:
push:
branches:
- master
paths:
- tgui/public/*
jobs:
dispatch_repo:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Repository Dispatch
runs-on: ubuntu-latest
steps:
- name: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v2
if: env.APP_PRIVATE_KEY != '' && env.APP_ID != ''
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: vorestation
env:
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
APP_ID: ${{ secrets.APP_ID }}
- name: Send Repository Dispatch
if: success()
uses: peter-evans/repository-dispatch@v4
with:
token: ${{ steps.app-token-generation.outputs.token }}
repository: vorestation/byond-client-storage
event-type: on_master_push

View File

@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/2.3.7/schema.json",
"$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
"assist": {
"actions": {
"source": {

View File

@@ -4,30 +4,30 @@
"workspaces": {
"": {
"devDependencies": {
"@biomejs/biome": "^2.3.7",
"prettier": "^3.6.2",
"@biomejs/biome": "^2.3.8",
"prettier": "^3.7.4",
},
},
},
"packages": {
"@biomejs/biome": ["@biomejs/biome@2.3.7", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.3.7", "@biomejs/cli-darwin-x64": "2.3.7", "@biomejs/cli-linux-arm64": "2.3.7", "@biomejs/cli-linux-arm64-musl": "2.3.7", "@biomejs/cli-linux-x64": "2.3.7", "@biomejs/cli-linux-x64-musl": "2.3.7", "@biomejs/cli-win32-arm64": "2.3.7", "@biomejs/cli-win32-x64": "2.3.7" }, "bin": { "biome": "bin/biome" } }, "sha512-CTbAS/jNAiUc6rcq94BrTB8z83O9+BsgWj2sBCQg9rD6Wkh2gjfR87usjx0Ncx0zGXP1NKgT7JNglay5Zfs9jw=="],
"@biomejs/biome": ["@biomejs/biome@2.3.8", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.3.8", "@biomejs/cli-darwin-x64": "2.3.8", "@biomejs/cli-linux-arm64": "2.3.8", "@biomejs/cli-linux-arm64-musl": "2.3.8", "@biomejs/cli-linux-x64": "2.3.8", "@biomejs/cli-linux-x64-musl": "2.3.8", "@biomejs/cli-win32-arm64": "2.3.8", "@biomejs/cli-win32-x64": "2.3.8" }, "bin": { "biome": "bin/biome" } }, "sha512-Qjsgoe6FEBxWAUzwFGFrB+1+M8y/y5kwmg5CHac+GSVOdmOIqsAiXM5QMVGZJ1eCUCLlPZtq4aFAQ0eawEUuUA=="],
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LirkamEwzIUULhXcf2D5b+NatXKeqhOwilM+5eRkbrnr6daKz9rsBL0kNZ16Hcy4b8RFq22SG4tcLwM+yx/wFA=="],
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HM4Zg9CGQ3txTPflxD19n8MFPrmUAjaC7PQdLkugeeC0cQ+PiVrd7i09gaBS/11QKsTDBJhVg85CEIK9f50Qww=="],
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.3.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-Q4TO633kvrMQkKIV7wmf8HXwF0dhdTD9S458LGE24TYgBjSRbuhvio4D5eOQzirEYg6eqxfs53ga/rbdd8nBKg=="],
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.3.8", "", { "os": "darwin", "cpu": "x64" }, "sha512-lUDQ03D7y/qEao7RgdjWVGCu+BLYadhKTm40HkpJIi6kn8LSv5PAwRlew/DmwP4YZ9ke9XXoTIQDO1vAnbRZlA=="],
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.3.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-inHOTdlstUBzgjDcx0ge71U4SVTbwAljmkfi3MC5WzsYCRhancqfeL+sa4Ke6v2ND53WIwCFD5hGsYExoI3EZQ=="],
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.3.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-Uo1OJnIkJgSgF+USx970fsM/drtPcQ39I+JO+Fjsaa9ZdCN1oysQmy6oAGbyESlouz+rzEckLTF6DS7cWse95g=="],
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.3.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-/afy8lto4CB8scWfMdt+NoCZtatBUF62Tk3ilWH2w8ENd5spLhM77zKlFZEvsKJv9AFNHknMl03zO67CiklL2Q=="],
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.3.8", "", { "os": "linux", "cpu": "arm64" }, "sha512-PShR4mM0sjksUMyxbyPNMxoKFPVF48fU8Qe8Sfx6w6F42verbwRLbz+QiKNiDPRJwUoMG1nPM50OBL3aOnTevA=="],
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.3.7", "", { "os": "linux", "cpu": "x64" }, "sha512-fJMc3ZEuo/NaMYo5rvoWjdSS5/uVSW+HPRQujucpZqm2ZCq71b8MKJ9U4th9yrv2L5+5NjPF0nqqILCl8HY/fg=="],
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.3.8", "", { "os": "linux", "cpu": "x64" }, "sha512-QDPMD5bQz6qOVb3kiBui0zKZXASLo0NIQ9JVJio5RveBEFgDgsvJFUvZIbMbUZT3T00M/1wdzwWXk4GIh0KaAw=="],
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.3.7", "", { "os": "linux", "cpu": "x64" }, "sha512-CQUtgH1tIN6e5wiYSJqzSwJumHYolNtaj1dwZGCnZXm2PZU1jOJof9TsyiP3bXNDb+VOR7oo7ZvY01If0W3iFQ=="],
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.3.8", "", { "os": "linux", "cpu": "x64" }, "sha512-YGLkqU91r1276uwSjiUD/xaVikdxgV1QpsicT0bIA1TaieM6E5ibMZeSyjQ/izBn4tKQthUSsVZacmoJfa3pDA=="],
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.3.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-aJAE8eCNyRpcfx2JJAtsPtISnELJ0H4xVVSwnxm13bzI8RwbXMyVtxy2r5DV1xT3WiSP+7LxORcApWw0LM8HiA=="],
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.3.8", "", { "os": "win32", "cpu": "arm64" }, "sha512-H4IoCHvL1fXKDrTALeTKMiE7GGWFAraDwBYFquE/L/5r1927Te0mYIGseXi4F+lrrwhSWbSGt5qPFswNoBaCxg=="],
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.3.7", "", { "os": "win32", "cpu": "x64" }, "sha512-pulzUshqv9Ed//MiE8MOUeeEkbkSHVDVY5Cz5wVAnH1DUqliCQG3j6s1POaITTFqFfo7AVIx2sWdKpx/GS+Nqw=="],
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.3.8", "", { "os": "win32", "cpu": "x64" }, "sha512-RguzimPoZWtBapfKhKjcWXBVI91tiSprqdBYu7tWhgN8pKRZhw24rFeNZTNf6UiBfjCYCi9eFQs/JzJZIhuK4w=="],
"prettier": ["prettier@3.6.2", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ=="],
"prettier": ["prettier@3.7.4", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA=="],
}
}

View File

@@ -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"]"

View File

@@ -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)

View File

@@ -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.")

View File

@@ -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)

View File

@@ -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 ..()

View File

@@ -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))

View File

@@ -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)

View File

@@ -58,4 +58,4 @@
#endif //ifdef REFERENCE_TRACKING
// Standard flags to use for browser-options
#define DEFAULT_CLIENT_BROWSER_OPTIONS "byondstorage,find"
#define DEFAULT_CLIENT_BROWSER_OPTIONS "find"

View File

@@ -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

View File

@@ -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!

View File

@@ -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"

View File

@@ -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"

View File

@@ -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.

View File

@@ -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)

View File

@@ -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
View 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
View 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

View File

@@ -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"])
if(LAZYACCESS(modifiers, SHIFT_CLICK))
if(LAZYACCESS(modifiers, MIDDLE_CLICK))
ShiftMiddleClickOn(A)
return
if(modifiers["middle"])
MiddleClickOn(A)
if(LAZYACCESS(modifiers, CTRL_CLICK))
CtrlShiftClickOn(A)
return
if (LAZYACCESS(modifiers, ALT_CLICK))
alt_shift_click_on(A)
return
if(modifiers["shift"])
ShiftClickOn(A)
return
if(modifiers["alt"]) // alt and alt-gr (rightalt)
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(modifiers["ctrl"])
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.

View File

@@ -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

View File

@@ -11,3 +11,7 @@
/datum/config_entry/flag/smart_cache_assets
/datum/config_entry/flag/save_spritesheets
/datum/config_entry/string/storage_cdn_iframe
protection = CONFIG_ENTRY_LOCKED
default = "https://vorestation.github.io/byond-client-storage/iframe.html"

View File

@@ -15,9 +15,12 @@ SUBSYSTEM_DEF(tgui)
wait = 9
flags = SS_NO_INIT
priority = FIRE_PRIORITY_TGUI
init_stage = INITSTAGE_EARLY
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
dependencies = list(
/datum/controller/subsystem/assets
)
/// A list of UIs scheduled to process
var/list/current_run = list()
/// A list of all open UIs
@@ -40,6 +43,25 @@ SUBSYSTEM_DEF(tgui)
basehtml = replacetextEx(basehtml, "<!-- tgui:nt-copyright -->", "Nanotrasen (c) 2284-[text2num(time2text(world.realtime,"YYYY")) + STATION_YEAR_OFFSET]")
/datum/controller/subsystem/tgui/OnConfigLoad()
var/storage_iframe = CONFIG_GET(string/storage_cdn_iframe)
if(storage_iframe && storage_iframe != /datum/config_entry/string/storage_cdn_iframe::default)
basehtml = replacetextEx(basehtml, "\[tgui:storagecdn]", storage_iframe)
return
if(CONFIG_GET(string/asset_transport) == "webroot")
var/datum/asset_transport/webroot/webroot = SSassets.transport
var/datum/asset_cache_item/item = webroot.register_asset("iframe.html", file("tgui/public/iframe.html"))
basehtml = replacetextEx(basehtml, "\[tgui:storagecdn]", webroot.get_asset_url("iframe.html", item))
return
if(!storage_iframe)
return
basehtml = replacetextEx(basehtml, "\[tgui:storagecdn]", storage_iframe)
/datum/controller/subsystem/tgui/Shutdown()
close_all_uis()

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -42,7 +42,7 @@
. = ..()
/obj/machinery/washing_machine/AltClick()
/obj/machinery/washing_machine/click_alt()
start()
/obj/machinery/washing_machine/verb/start_washing()

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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()

View File

@@ -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>."))

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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))

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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))

View File

@@ -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()

View File

@@ -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))

View File

@@ -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

View File

@@ -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

View File

@@ -116,7 +116,7 @@
else
toggle(user)
/obj/structure/closet/secure_closet/AltClick()
/obj/structure/closet/secure_closet/click_alt()
..()
verb_togglelock()

View File

@@ -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)

View File

@@ -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))

View File

@@ -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)

View File

@@ -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))

View File

@@ -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))

View File

@@ -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()))

View File

@@ -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()))

View File

@@ -782,3 +782,8 @@ ADMIN_VERB(quick_nif, R_ADMIN, "Quick NIF", "Spawns a NIF into someone in quick-
log_and_message_admins("Quick NIF'd [H.real_name] with a [input_NIF].", user)
feedback_add_details("admin_verb","QNIF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
ADMIN_VERB(reload_configuration, R_DEBUG, "Reload Configuration", "Reloads the configuration from the default path on the disk, wiping any in-round modifications.", ADMIN_CATEGORY_DEBUG)
if(tgui_alert(user, "Are you absolutely sure you want to reload the configuration from the default path on the disk, wiping any in-round modifications?", "Really reset?", list("No", "Yes")) != "Yes")
return
config.admin_reload()

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -10,6 +10,7 @@
ui_title = "Premium Drink Dispensary"
accept_drinking = 1
var/max_cartridges = 90
import_job = null
/obj/machinery/chemical_dispenser/premium/full
spawn_cartridges = list(

View File

@@ -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.

View File

@@ -60,6 +60,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
// Rate limiting
var/mtl = CONFIG_GET(number/minute_topic_limit)
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)
@@ -67,6 +68,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
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."
@@ -79,7 +81,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
return
var/stl = CONFIG_GET(number/second_topic_limit)
if (!check_rights_for(src, R_HOLDER) && stl && href_list["window_id"] != "statbrowser")
if (!check_rights_for(src, R_HOLDER) && stl)
var/second = round(world.time, 10)
if (!topiclimiter)
topiclimiter = new(LIMITER_SIZE)
@@ -269,6 +271,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if (CONFIG_GET(flag/chatlog_database_backend))
chatlog_token = vchatlog_generate_token(ckey, GLOB.round_id)
winset(src, null, list("browser-options" = "find,refresh"))
// Instantiate stat panel
stat_panel = new(src, "statbrowser")
stat_panel.subscribe(src, PROC_REF(on_stat_panel_message))

View File

@@ -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."))

View File

@@ -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))

View File

@@ -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)

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)

View File

@@ -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]!"))

View File

@@ -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]."))

View File

@@ -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()

View File

@@ -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.

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)

View File

@@ -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))

View File

@@ -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

View File

@@ -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

View File

@@ -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()

View File

@@ -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"]."))
. = ..()

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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))

View File

@@ -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!"))

View File

@@ -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

View File

@@ -25,6 +25,7 @@
var/list/recording_recipe
/// Saves all the recipes recorded by the machine
var/list/saved_recipes = list()
var/import_job = JOB_CHEMIST
/obj/machinery/chemical_dispenser/Initialize(mapload)
. = ..()
@@ -203,6 +204,9 @@
. = TRUE
if("import_config")
if(import_job && (ui.user.mind.assigned_role != import_job))
to_chat(ui.user, span_warning("This option is only available to the job: [import_job]"))
return FALSE
var/list/our_data = params["config"]
if(!islist(our_data))
return FALSE

Some files were not shown because too many files have changed in this diff Show More