client
Client datum
A datum that is created whenever a user joins a BYOND world, one will exist for every active connected player
when they first connect, this client object is created and [/client/New] is called
When they disconnect, this client object is deleted and [/client/Del] is called
All client topic calls go through [/client/Topic] first, so a lot of our specialised topic handling starts here
Vars | |
AI_Interact | Used for admin AI interaction |
---|---|
account_age | Age of byond account in days |
account_join_date | Date of byond account creation in ISO 8601 format |
active_mousedown_item | Autoclick variable referencing the associated item. |
admin_music_volume | Admin music volume, from 0 to 1. |
adminhelptimerid | Client var used for returning the ahelp verb |
area | Current area of the controlled mob |
avgping | Average ping of the client |
ban_cache | Used to cache this client's bans to save on DB queries |
ban_cache_start | If we are currently building this client's ban cache, this var stores the timeofday we started at |
char_render_holders | Should only be a key-value list of north/south/east/west = atom/movable/screen. |
click_intercept | Needs to implement InterceptClickOn(user,params,atom) proc |
click_intercept_time | Time when the click was intercepted |
clicklimiter | Used for limiting the rate of clicks sends by the client to avoid abuse |
client_keysend_amount | Amount of keydowns in the last keysend checking interval |
combo_hud_enabled | Whether or not this client has the combo HUD enabled |
completed_asset_jobs | List of all completed blocking send jobs awaiting acknowledgement by send_asset |
connection_realtime | world.realtime they connected |
connection_time | world.time they connected |
connection_timeofday | world.timeofday they connected |
crew_manifest_delay | rate limiting for the crew manifest |
current_ticket | Client var used for tracking the ticket the (usually) not-admin client is dealing with |
do_parallax_animations | Do we want to do parallax animations at all? Exists to prevent laptop fires |
dont_animate_parallax | world.time of when we can state animate()ing parallax again |
externalreplyamount | Internal counter for clients sending external (IRC/Discord) relay messages via ahelp to prevent spamming. Set to a number every time an admin reply is sent, decremented for every client send. |
fully_created | If this client has been fully initialized or not |
holder | Contains admin info. Null if client is not an admin. |
hotkeys | Whether or not this client has standard hotkeys enabled |
intended_direction | The direction we WANT to move, based off our keybinds Will be updated to be the actual direction later on |
ip_intel | Used for ip intel checking to identify evaders, disabled because of issues with traffic |
key_combos_held | A buffer for combinations such of modifiers + keys (ex: CtrlD, AltE, ShiftT). Format: "key" -> "combo" (ex: "D" -> "CtrlD" ) |
keys_held | A buffer of currently held keys. |
keysend_tripped | When set to true, user will be autokicked if they trip the keysends in a second limit again |
last_asset_job | Last asset send job id. |
last_message | Contains the last message sent by this client - used to protect against copy-paste spamming. |
last_message_count | contins a number of how many times a message identical to last_message was sent. |
last_turn | last turn of the controlled mob, I think this is only used by mechs? |
lastping | Last ping of the client |
linked_discord_account | Linked Discord account ID. Null is valid if the bunker is disabled. |
mouseParams | Used in MouseDrag to preserve the original mouse click parameters |
mouse_down_icon | used to make a special mouse cursor, this one for mouse up icon |
mouse_location_ref | Used in MouseDrag to preserve the last mouse-entered location. Weakref |
mouse_object_ref | Used in MouseDrag to preserve the last mouse-entered object. Weakref |
mouse_override_icon | used to override the mouse cursor so it doesnt get reset |
mouse_pointer_icon | Use our custom cursor |
mouse_up_icon | used to make a special mouse cursor, this one for mouse up icon |
move_delay | Move delay of controlled mob, any keypresses inside this period will persist until the next proper move |
movement_keys | custom movement keys for this client |
movement_locked | Are we locking our movement input? |
movingmob | this is the last recorded client eye by SSparallax/fire() |
navigation_images | Images of the path created by navigate(). |
next_keysend_reset | World tick time where client_keysend_amount will reset |
next_keysend_trip_reset | World tick time where keysend_tripped will reset back to false |
next_move_dir_add | On next move, add this dir to the move that would otherwise be done |
next_move_dir_sub | On next move, subtract this dir from the move that would otherwise be done |
obj_window | Our object window datum. It stores info about and handles behavior for the object tab |
panel_tabs | list of all tabs |
parallax_animate_timers | Timers for the area directional animation, one for each layer |
parallax_layers_max | How many parallax layers to show our client |
parallax_movedir | Direction our current area wants to move parallax |
parent_type | This line makes clients parent type be a datum |
player_age | Used to determine how old the account is - in days. |
player_details | these persist between logins/logouts during the same round. |
player_join_date | Date that this account was first seen in the server |
playing_ambience | Keeps track of what ambience we are playing. Yeah i know it sucks. |
prefs | Player preferences datum for the client |
recent_examines | A lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call /atom/proc/examine_more instead of /atom/proc/examine on them when examining |
related_accounts_cid | So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id |
related_accounts_ip | So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip |
restricted_mode | If the client is currently under the restrictions of the interview system, or any other reason. |
say_slowmode | Tracks say() usage for ic/dchat while slowmode is enabled |
screen_maps | Assoc list with all the active maps - when a screen obj is added to a map, it's put in here as well. |
screen_texts | lazylist of screen_texts for this client, first in this list is the one playing |
script | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!HEY LISTEN!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
seen_messages | Messages currently seen by this client |
selected_target | Autoclick list of two elements, first being the clicked thing, second being the parameters. |
show_verb_panel | hides the byond verb panel as we use our own custom version |
spell_tabs | list of tabs containing spells and abilities |
stat_panel | Stat panel window declaration |
stat_tab | our current tab |
tgui_cache_reloaded | global |
tgui_windows | global |
tooltips | datum that controls the displaying and hiding of tooltips |
topiclimiter | Used for limiting the rate of topic sends by the client to avoid abuse |
total_count_reset | Next tick to reset the total message counter |
total_message_count | How many messages sent in the last 10 seconds |
updating_macros | Semaphore for macro updates, so that they all complete and don't stomp over each other. |
urgent_ahelp_cooldown | The last urgent ahelp that this player sent |
view_size | datum wrapper for client view |
visual_delay | The visual delay to use for the current client.Move(), mostly used for making a client based move look like it came from some other slower source |
Procs | |
Move | Move a client in a direction |
Move_object | force move the control_object of your client mob |
Process_Incorpmove | Allows mobs to ignore density and phase through objects |
_Topic | dumb workaround because byond doesnt seem to recognize the .proc/Topic() typepath for /datum/proc/Topic() from the client Topic, so we cant queue it without this |
adjust_heart | Gives someone hearted status for OOC, from behavior commendations |
admin_follow | Attempts to make the client orbit the given object, for administrative purposes. If they are not an observer, will try to aghost them. |
asset_cache_confirm_arrival | Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]" |
asset_cache_preload_data | Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING]" |
asset_cache_update_json | Updates the client side stored json file used to keep track of what assets the client has between restarts/reconnects. |
attempt_auto_fit_viewport | Attempt to automatically fit the viewport, assuming the user wants it |
body_chest | Hidden verb to target the chest, bound to 5 |
body_eyes | Hidden verb to target the eyes, bound to 7 |
body_groin | Hidden verb to target the groin, bound to 2 |
body_l_arm | Hidden verb to target the left arm, bound to 6 |
body_l_leg | Hidden verb to target the left leg, bound to 3 |
body_mouth | Hidden verb to target the mouth, bound to 9 |
body_r_arm | Hidden verb to target the right arm, bound to 4 |
body_r_leg | Hidden verb to target the right leg, bound to 1 |
body_toggle_head | Hidden verb to set the target zone of a mob to the head |
browse_queue_flush | Blocks until all currently sending browse and browse_rsc assets have been sent. Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away. |
check_atmos_controls | Checks the atmos monitor, sensors, meters, vents, and injectors, and makes sure they dont overlap or do nothing. |
check_can_move | Checks to see if an external factor is preventing movement, mainly grabbing. |
check_drag_proximity | Handles treating drags as clicks if they're within some conditions Does some other stuff adjacent to trying to figure out what the user actually "wanted" to click Returns TRUE if it caused a click, FALSE otherwise |
check_has_body_select | Validate the client's mob has a valid zone selected |
check_panic_bunker | Checks panic bunker status and applies restricted_mode if necessary. Returns TRUE if the client should be kicked. |
check_timer_sources | A debug verb to check the sources of currently running timers |
clear_all_maps | Clears all the maps of registered screen objects. |
clear_map | Clears the map of registered screen objects. |
close_popup | Closes a popup. |
cmd_admin_create_centcom_report | Verb to open the create command report window and send command reports. |
cmd_change_command_name | Verb to change the global command name. |
create_popup | Creates a popup window with a basic map element in it, without any further initialization. |
debug_spell_requirements | Debug verb for seeing at a glance what all spells have as set requirements |
discord_generate_one_time_token | Generate a timebound token for discord verification |
discord_get_or_generate_one_time_token_for_ckey | Given a ckey as a string, look up the OTP token attached to that ckey, else generated new one |
discord_is_link_valid | Checks if the the given ckey has a valid discord link Returns: TRUE if valid, FALSE if invalid or missing |
discord_lookup_ckey | Given a discord id as a string, look up the ckey attached to that account, if any |
discord_lookup_id | Given a ckey, look up the discord user id attached to the user, if any |
discord_read_linked_id | Checks if the the given ckey has a valid discord link. This also updates the client's linked account var. Returns: TRUE if valid, FALSE if invalid or missing. |
drop_item | If your mob is concious, drop the item in the active hand |
dsay | Our current command name to swap back to after sending the report. The sound we're going to play on report. |
find_discord_link_by_ckey | Find discord link entry by the passed in user ckey |
find_discord_link_by_discord_id | Find discord link entry by the passed in user discord id |
find_discord_link_by_token | Find discord link entry by the passed in user token |
fix_tgui_panel | tgui panel / chat troubleshooting verb |
forcerandomrotate | broadcaster[id_tag] = machine listened_to[atmos_chamber_entry] = bool TRUE means we have the corresponding id_tag being listened to by an atmos control computer. broadcasted_to[id_tag[1]] = bool TRUE means we have the corresponding id_tag being broadcasted to by a device, be it meter, sensors, etc. How many things dont fit the recognized subtypes. How many things have invalid (messes with our delimiter) tags. How many things have empty tags, invalids but much worse. How many things have duped id_tag. How many things are broadcasting without an atmos computer listening How many atmos computers are listening to an empty tag. |
get_award_status | Redirect proc that makes it easier to get the status of an achievement. Achievement type is the typepath to the award. |
get_remaining_days | Checks if this client has met the days requirement passed in, or if they are exempt from it. Returns the number of days left, or 0. |
give_award | Redirect proc that makes it easier to call the unlock achievement proc. Achievement type is the typepath to the award, user is the mob getting the award, and value is an optional variable used for leaderboard value increments |
handle_popup_close | When the popup closes in any way (player or proc call) it calls this. |
init_verbs | compiles a full list of verbs and sends it to the browser |
initialize_menus | Initializes dropdown menus on client |
is_drag_clickable | Does the logic for checking if a drag counts as a click or not Returns true if it does, false otherwise |
is_veteran | Returns whether the client should receive the gamer cloak |
keyUp | Check if the key is short enough to even be a real key |
on_stat_panel_message | Handles incoming messages from the stat-panel TGUI. |
only_one | Gives everyone kilts, berets, claymores, and pinpointers, with the objective to hijack the emergency shuttle. Uses highlander controller to do so! |
ooc | talking in OOC uses this |
open_particle_editor | opens the particle editor UI for the in_atom object for this client |
register_map_obj | Registers screen obj with the client, which makes it visible on the assigned map, and becomes a part of the assigned map's lifecycle. |
requests | Verb for opening the requests manager panel |
reset_held_keys | Manually clears any held keys, in case due to lag or other undefined behavior a key gets stuck. |
send_resources | Send resources to the client. Sends both game resources and browser assets. |
set_macros | Apply client macros. Has a system to prevent infighting bullshit. There's probably a cleaner way to do this but I'm tired. |
setup_popup | Create the popup, and get it ready for generic use by giving it a background. |
spawn_debug_full_crew | Debug verb that spawns human crewmembers of each job type, gives them a mind and assigns the role, and injects them into the manifest, as if they were a "player". |
strip_verbs | Strip verbs from a client and it's mob. |
toggle_walk_run | Verb to toggle the walk or run status |
uiclose | verb |
update_exp_list | Tallies up the exp for the playtime tracking and adds it to the global update list. |
update_special_keybinds | Updates the keybinds for special keys |
Var Details
AI_Interact
Used for admin AI interaction
account_age
Age of byond account in days
account_join_date
Date of byond account creation in ISO 8601 format
active_mousedown_item
Autoclick variable referencing the associated item.
admin_music_volume
Admin music volume, from 0 to 1.
adminhelptimerid
Client var used for returning the ahelp verb
area
Current area of the controlled mob
avgping
Average ping of the client
ban_cache
Used to cache this client's bans to save on DB queries
ban_cache_start
If we are currently building this client's ban cache, this var stores the timeofday we started at
char_render_holders
Should only be a key-value list of north/south/east/west = atom/movable/screen.
click_intercept
Needs to implement InterceptClickOn(user,params,atom) proc
click_intercept_time
Time when the click was intercepted
clicklimiter
Used for limiting the rate of clicks sends by the client to avoid abuse
client_keysend_amount
Amount of keydowns in the last keysend checking interval
combo_hud_enabled
Whether or not this client has the combo HUD enabled
completed_asset_jobs
List of all completed blocking send jobs awaiting acknowledgement by send_asset
connection_realtime
world.realtime they connected
connection_time
world.time they connected
connection_timeofday
world.timeofday they connected
crew_manifest_delay
rate limiting for the crew manifest
current_ticket
Client var used for tracking the ticket the (usually) not-admin client is dealing with
do_parallax_animations
Do we want to do parallax animations at all? Exists to prevent laptop fires
dont_animate_parallax
world.time of when we can state animate()ing parallax again
externalreplyamount
Internal counter for clients sending external (IRC/Discord) relay messages via ahelp to prevent spamming. Set to a number every time an admin reply is sent, decremented for every client send.
fully_created
If this client has been fully initialized or not
holder
Contains admin info. Null if client is not an admin.
hotkeys
Whether or not this client has standard hotkeys enabled
intended_direction
The direction we WANT to move, based off our keybinds Will be updated to be the actual direction later on
ip_intel
Used for ip intel checking to identify evaders, disabled because of issues with traffic
key_combos_held
A buffer for combinations such of modifiers + keys (ex: CtrlD, AltE, ShiftT). Format: "key"
-> "combo"
(ex: "D"
-> "CtrlD"
)
keys_held
A buffer of currently held keys.
keysend_tripped
When set to true, user will be autokicked if they trip the keysends in a second limit again
last_asset_job
Last asset send job id.
last_message
Contains the last message sent by this client - used to protect against copy-paste spamming.
last_message_count
contins a number of how many times a message identical to last_message was sent.
last_turn
last turn of the controlled mob, I think this is only used by mechs?
lastping
Last ping of the client
linked_discord_account
Linked Discord account ID. Null is valid if the bunker is disabled.
mouseParams
Used in MouseDrag to preserve the original mouse click parameters
mouse_down_icon
used to make a special mouse cursor, this one for mouse up icon
mouse_location_ref
Used in MouseDrag to preserve the last mouse-entered location. Weakref
mouse_object_ref
Used in MouseDrag to preserve the last mouse-entered object. Weakref
mouse_override_icon
used to override the mouse cursor so it doesnt get reset
mouse_pointer_icon
Use our custom cursor
mouse_up_icon
used to make a special mouse cursor, this one for mouse up icon
move_delay
Move delay of controlled mob, any keypresses inside this period will persist until the next proper move
movement_keys
custom movement keys for this client
movement_locked
Are we locking our movement input?
movingmob
this is the last recorded client eye by SSparallax/fire()
navigation_images
Images of the path created by navigate().
next_keysend_reset
World tick time where client_keysend_amount will reset
next_keysend_trip_reset
World tick time where keysend_tripped will reset back to false
next_move_dir_add
On next move, add this dir to the move that would otherwise be done
next_move_dir_sub
On next move, subtract this dir from the move that would otherwise be done
obj_window
Our object window datum. It stores info about and handles behavior for the object tab
panel_tabs
list of all tabs
parallax_animate_timers
Timers for the area directional animation, one for each layer
parallax_layers_max
How many parallax layers to show our client
parallax_movedir
Direction our current area wants to move parallax
parent_type
This line makes clients parent type be a datum
By default in byond if you define a proc on datums, that proc will exist on nearly every single type from icons to images to atoms to mobs to objs to turfs to areas, it won't however, appear on client
instead by default they act like their own independent type so while you can do istype(icon, /datum) and have it return true, you can't do istype(client, /datum), it will always return false.
This makes writing oo code hard, when you have to consider this extra special case
This line prevents that, and has never appeared to cause any ill effects, while saving us an extra pain to think about
This line is widely considered black fucking magic, and the fact it works is a puzzle to everyone involved, including the current engine developer, lummox
If you are a future developer and the engine source is now available and you can explain why this is the way it is, please do update this comment
player_age
Used to determine how old the account is - in days.
player_details
these persist between logins/logouts during the same round.
player_join_date
Date that this account was first seen in the server
playing_ambience
Keeps track of what ambience we are playing. Yeah i know it sucks.
prefs
Player preferences datum for the client
recent_examines
A lazy list of atoms we've examined in the last RECENT_EXAMINE_MAX_WINDOW (default 2) seconds, so that we will call /atom/proc/examine_more instead of /atom/proc/examine on them when examining
related_accounts_cid
So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id
related_accounts_ip
So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip
restricted_mode
If the client is currently under the restrictions of the interview system, or any other reason.
say_slowmode
Tracks say() usage for ic/dchat while slowmode is enabled
screen_maps
Assoc list with all the active maps - when a screen obj is added to a map, it's put in here as well.
Format: list(
screen_texts
lazylist of screen_texts for this client, first in this list is the one playing
script
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!HEY LISTEN!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
seen_messages
Messages currently seen by this client
selected_target
Autoclick list of two elements, first being the clicked thing, second being the parameters.
show_verb_panel
hides the byond verb panel as we use our own custom version
spell_tabs
list of tabs containing spells and abilities
stat_panel
Stat panel window declaration
stat_tab
our current tab
tgui_cache_reloaded
global
TRUE if cache was reloaded by tgui dev server at least once.
tgui_windows
global
Tracks open windows for a user.
tooltips
datum that controls the displaying and hiding of tooltips
topiclimiter
Used for limiting the rate of topic sends by the client to avoid abuse
total_count_reset
Next tick to reset the total message counter
total_message_count
How many messages sent in the last 10 seconds
updating_macros
Semaphore for macro updates, so that they all complete and don't stomp over each other.
urgent_ahelp_cooldown
The last urgent ahelp that this player sent
view_size
datum wrapper for client view
visual_delay
The visual delay to use for the current client.Move(), mostly used for making a client based move look like it came from some other slower source
Proc Details
Move
Move a client in a direction
Huge proc, has a lot of functionality
Mostly it will despatch to the mob that you are the owner of to actually move in the physical realm
Things that stop you moving as a mob:
- world time being less than your next move_delay
- not being in a mob, or that mob not having a loc
- missing the n and direction parameters
- being in remote control of an object (calls Moveobject instead)
- being dead (it ghosts you instead)
Things that stop you moving as a mob living (why even have OO if you're just shoving it all in the parent proc with istype checks right?):
- having incorporeal_move set (calls Process_Incorpmove() instead)
- being grabbed
- being buckled (relaymove() is called to the buckled atom instead)
- having your loc be some other mob (relaymove() is called on that mob instead)
- Not having MOBILITY_MOVE
- Failing Process_Spacemove() call
At this point, if the mob is is confused, then a random direction and target turf will be calculated for you to travel to instead
Now the parent call is made (to the byond builtin move), which moves you
Some final move delay calculations (doubling if you moved diagonally successfully)
if mob throwing is set I believe it's unset at this point via a call to finalize
Finally if you're pulling an object and it's dense, you are turned 180 after the move (if you ask me, this should be at the top of the move so you don't dance around)
Move_object
force move the control_object of your client mob
Used in admin possession and called from the client Move proc ensures the possessed object moves and not the admin mob
Has no sanity other than checking density
Process_Incorpmove
Allows mobs to ignore density and phase through objects
Called by client/Move()
The behaviour depends on the incorporeal_move value of the mob
- INCORPOREAL_MOVE_BASIC - forceMoved to the next tile with no stop
- INCORPOREAL_MOVE_SHADOW - the same but leaves a cool effect path
- INCORPOREAL_MOVE_JAUNT - the same but blocked by holy tiles
You'll note this is another mob living level proc living at the client level
_Topic
dumb workaround because byond doesnt seem to recognize the .proc/Topic() typepath for /datum/proc/Topic() from the client Topic, so we cant queue it without this
adjust_heart
Gives someone hearted status for OOC, from behavior commendations
admin_follow
Attempts to make the client orbit the given object, for administrative purposes. If they are not an observer, will try to aghost them.
asset_cache_confirm_arrival
Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]"
asset_cache_preload_data
Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING]"
asset_cache_update_json
Updates the client side stored json file used to keep track of what assets the client has between restarts/reconnects.
attempt_auto_fit_viewport
Attempt to automatically fit the viewport, assuming the user wants it
body_chest
Hidden verb to target the chest, bound to 5
body_eyes
Hidden verb to target the eyes, bound to 7
body_groin
Hidden verb to target the groin, bound to 2
body_l_arm
Hidden verb to target the left arm, bound to 6
body_l_leg
Hidden verb to target the left leg, bound to 3
body_mouth
Hidden verb to target the mouth, bound to 9
body_r_arm
Hidden verb to target the right arm, bound to 4
body_r_leg
Hidden verb to target the right leg, bound to 1
body_toggle_head
Hidden verb to set the target zone of a mob to the head
(bound to 8) - repeated presses toggles through head - eyes - mouth Hidden verb to target the head, bound to 8
browse_queue_flush
Blocks until all currently sending browse and browse_rsc assets have been sent. Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away.
check_atmos_controls
Checks the atmos monitor, sensors, meters, vents, and injectors, and makes sure they dont overlap or do nothing.
check_can_move
Checks to see if an external factor is preventing movement, mainly grabbing.
Called by client/Move()
check_drag_proximity
Handles treating drags as clicks if they're within some conditions Does some other stuff adjacent to trying to figure out what the user actually "wanted" to click Returns TRUE if it caused a click, FALSE otherwise
check_has_body_select
Validate the client's mob has a valid zone selected
check_panic_bunker
Checks panic bunker status and applies restricted_mode if necessary. Returns TRUE if the client should be kicked.
check_timer_sources
A debug verb to check the sources of currently running timers
clear_all_maps
Clears all the maps of registered screen objects.
clear_map
Clears the map of registered screen objects.
close_popup
Closes a popup.
cmd_admin_create_centcom_report
Verb to open the create command report window and send command reports.
cmd_change_command_name
Verb to change the global command name.
create_popup
Creates a popup window with a basic map element in it, without any further initialization.
Ratio is how many pixels by how many pixels (keep it simple).
Returns a map name.
debug_spell_requirements
Debug verb for seeing at a glance what all spells have as set requirements
discord_generate_one_time_token
Generate a timebound token for discord verification
This uses the common word list to generate a three word random token, this token can then be fed to a discord bot that has access to the same database, and it can use it to link a ckey to a discord id, with minimal user effort
It returns the token to the calling proc, after inserting an entry into the discord_link table of the following form
(unique_id, ckey, null, the current time, the one time token generated)
the null value will be filled out with the discord id by the integrated discord bot when a user verifies
Notes:
- The token is guaranteed to be unique during it's validity period
- The validity period is currently set at 4 hours
- A token may not be unique outside it's validity window (to reduce conflicts)
Arguments:
- ckey_for a string representing the ckey this token is for
Returns a string representing the one time token
discord_get_or_generate_one_time_token_for_ckey
Given a ckey as a string, look up the OTP token attached to that ckey, else generated new one
Arguments:
- ckey The ckey as a string
Returns: OTP token as string
discord_is_link_valid
Checks if the the given ckey has a valid discord link Returns: TRUE if valid, FALSE if invalid or missing
discord_lookup_ckey
Given a discord id as a string, look up the ckey attached to that account, if any
This gets the most recent entry from the discord_link table that is associated with this discord id snowflake
Arguments:
- lookup_id The discord id as a string
Returns: ckey as string
discord_lookup_id
Given a ckey, look up the discord user id attached to the user, if any
This gets the most recent entry from the discord_link table that is associated with the given ckey
Arguments:
- lookup_ckey A string representing the ckey to search on
discord_read_linked_id
Checks if the the given ckey has a valid discord link. This also updates the client's linked account var. Returns: TRUE if valid, FALSE if invalid or missing.
drop_item
If your mob is concious, drop the item in the active hand
This is a hidden verb, likely for binding with winset for hotkeys
dsay
Our current command name to swap back to after sending the report. The sound we're going to play on report.
find_discord_link_by_ckey
Find discord link entry by the passed in user ckey
This will look into the discord link table and return the last (most recent) entry that matches the given ckey
Arguments:
- ckey the users ckey as a string
- timebound A boolean flag, that specifies if it should only look for entries within the last 4 hours, false by default
Returns a /datum/discord_link_record
find_discord_link_by_discord_id
Find discord link entry by the passed in user discord id
This will look into the discord link table and return the last (most recent) entry that matches the given id number
Arguments:
- discord_id The users discord id (string)
- timebound should we search only in the last 4 hours
Returns a /datum/discord_link_record
find_discord_link_by_token
Find discord link entry by the passed in user token
This will look into the discord link table and return the last (most recent) entry that matches the given one time token
Arguments:
- one_time_token the string of words representing the one time token
- timebound A boolean flag, that specifies if it should only look for entries within the last 4 hours, false by default
Returns a /datum/discord_link_record
fix_tgui_panel
tgui panel / chat troubleshooting verb
forcerandomrotate
broadcaster[id_tag] = machine listened_to[atmos_chamber_entry] = bool TRUE means we have the corresponding id_tag being listened to by an atmos control computer. broadcasted_to[id_tag[1]] = bool TRUE means we have the corresponding id_tag being broadcasted to by a device, be it meter, sensors, etc. How many things dont fit the recognized subtypes. How many things have invalid (messes with our delimiter) tags. How many things have empty tags, invalids but much worse. How many things have duped id_tag. How many things are broadcasting without an atmos computer listening How many atmos computers are listening to an empty tag.
get_award_status
Redirect proc that makes it easier to get the status of an achievement. Achievement type is the typepath to the award.
get_remaining_days
Checks if this client has met the days requirement passed in, or if they are exempt from it. Returns the number of days left, or 0.
give_award
Redirect proc that makes it easier to call the unlock achievement proc. Achievement type is the typepath to the award, user is the mob getting the award, and value is an optional variable used for leaderboard value increments
handle_popup_close
When the popup closes in any way (player or proc call) it calls this.
init_verbs
compiles a full list of verbs and sends it to the browser
initialize_menus
Initializes dropdown menus on client
is_drag_clickable
Does the logic for checking if a drag counts as a click or not Returns true if it does, false otherwise
is_veteran
Returns whether the client should receive the gamer cloak
keyUp
Check if the key is short enough to even be a real key
on_stat_panel_message
Handles incoming messages from the stat-panel TGUI.
only_one
Gives everyone kilts, berets, claymores, and pinpointers, with the objective to hijack the emergency shuttle. Uses highlander controller to do so!
Arguments:
- was_delayed: boolean: whether the option to do a "delayed" highlander was pressed before this was called, changes up the logging a bit.
ooc
talking in OOC uses this
open_particle_editor
opens the particle editor UI for the in_atom object for this client
register_map_obj
Registers screen obj with the client, which makes it visible on the assigned map, and becomes a part of the assigned map's lifecycle.
requests
Verb for opening the requests manager panel
reset_held_keys
Manually clears any held keys, in case due to lag or other undefined behavior a key gets stuck.
Hardcoded to the ESC key.
send_resources
Send resources to the client. Sends both game resources and browser assets.
set_macros
Apply client macros. Has a system to prevent infighting bullshit. There's probably a cleaner way to do this but I'm tired.
setup_popup
Create the popup, and get it ready for generic use by giving it a background.
Width and height are multiplied by 64 by default.
spawn_debug_full_crew
Debug verb that spawns human crewmembers of each job type, gives them a mind and assigns the role, and injects them into the manifest, as if they were a "player".
This spawns humans with minds and jobs, but does NOT make them 'players'. They're all clientles mobs with minds / jobs.
strip_verbs
Strip verbs from a client and it's mob.
toggle_walk_run
Verb to toggle the walk or run status
uiclose
verb
Called by UIs when they are closed. Must be a verb so winset() can call it.
required uiref ref The UI that was closed.
update_exp_list
Tallies up the exp for the playtime tracking and adds it to the global update list.
For a client mob of /mob/dead/observer, it adds EXP_TYPE_GHOST.
For a client mob of /mob/living, it grabs the exp list from a mob proc call. Being dead but still in your body will tally time towards your /mob/living roles instead of ghost roles. If /mob/living returns an empty list, uses "Unknown" instead.
For anything else, it doesn't update anything.
Arguments:
- minutes - The number of minutes to add to the playtime tally.
update_special_keybinds
Updates the keybinds for special keys
Handles adding macros for the keys that need it And adding movement keys to the clients movement_keys list At the time of writing this, communication(OOC, Say, IC) require macros Arguments:
- direct_prefs - the preference we're going to get keybinds from