Commit Graph

349 Commits

Author SHA1 Message Date
Afevis
d12576371c Fixes ambient sound preferences runtiming every time a client connects (#84202)
fixes #84200

forgot to pass the value that's sent while preferences are still
initializing.
2024-06-22 17:24:44 +01:00
Jackraxxus
d2dc233b73 Makes The Automute Thingo Yell At You A Bit Louder (#83636)
## About The Pull Request
It makes the automute use bigger, redder text and also balloon alert
I know ppl dont like punctuation in balloon alerts so I can remove the
exclamation mark if u want, i like it tho
I guess if u support darwinism u could leave it as is but in the era of
runetext and TTS ppl cant pay attention to the chat window they're too
busy watching subway surfers on their second monitor and scrolling
tiktok on their phone
Doesnt change the text so it stays deliberately vague like the comment
says it should

Before:
<img src="https://i.ibb.co/3hDnpQm/Automute-Before.png">
After:
<img src="https://i.ibb.co/0qSwJFB/Automute-After.png">
<img src="https://i.ibb.co/n3ch9fg/Automute-Balloon-Alert.png">
## Why It's Good For The Game
Being automuted when there's no admins on cuz u got a bit carried away
isnt cool and then u have to urgent ahelp it, which is understandable
cuz it's making the round unplayable for you but you did kinda bring it
on yourself and the admin might not be too happy with you about it.
## Changelog
🆑
admin: The auto-mute system yells at you harder when you send a bunch of
identical messages.
/🆑
2024-06-07 22:44:52 -04:00
LemonInTheDark
07882b23cc Converts parallax to pixel offsets, saves a bunch of cpu time, makes things nicer on clients too (#83395)
## About The Pull Request

Right now parallax is like a quarter of SSinput, which is BAD. It's so
high mostly because of the animates we need to do, but also due to the
cost of setting screen_loc.


![image](https://github.com/tgstation/tgstation/assets/58055496/8e4ec4b7-2101-4dca-91b8-4db9e79de7c4)

This sucks. The default step is to reduce the poll rate of the effect,
but I don't want to do that because it SUCKS. Sooooo how can we
optimize.

Well, if we stop thinking in terms of screen_loc, which is a string
(tree shit) and also unanimatable, and start working in pixel offsets,
this'd be a way cheaper.

We can make that happen by sticking all our parallax layers on one rock
screen object. Then they have relative positions and can be pixel offset
(I have stolen this concept wholesale from Ter)

This works unreasonably well, roughly a 65% cost reduction. S good shit.


![image](https://github.com/tgstation/tgstation/assets/58055496/1e6c4455-a13b-44c3-bf59-71ef26cac9fd)

While I'm here...

[uses KEEP_TOGETHER to reduce clientside load, makes the flying
animation
better.](52610398e2)

We were individually rendering all like fucking 24 480x480 overlays on
all 5 parallax layers, which means we had to apply our transform to EACH
ONE. This has GOTTA suck shit for clients, so let's... not? Should help.

The existing flying animation makes me depressed. it has some very
visible stutter, and jumps around a lot.

We can deal with the starting stutter by avoiding starting a new
animation on the layer until the old one is finished. This is what was
SUPPOSED to be happening, but because we fired one timer for all the
layers, they'd desync and jump in ugly ways.

This means we need to use one timer per layer, which does induce more
cost then I'd like. IDK how I feel about this to be honest.

I try and reduce ending weirdness by unscaling time at the end, so
different aspects don't slow down at different rates.

Speed on the parallax animation was weird, it'd spike up, then dip down
in flight.
This was because the percieved rate of change from the quad easing was
closer to 2x the existing.
I've handled this by halving the animation time in the loop

Oh also there's no sense calling the update animation proc if we are
coming to a stop, and thus have no follow up animation.


## Changelog

🆑 LemonInTheDark
refactor: I have reworked how parallax and its animations (space travel)
work. Please report any bugs lads!
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-05-27 10:43:25 -06:00
san7890
50de5108e2 Cleans up some admin-related stuff in client Destroy() and adminGreet() (#83427)
## About The Pull Request

It made me really mad to see a huge list in the middle of client/Destroy
for something that doesn't even run for 95% of users so I split it out
into another proc so the fingerprint of the very important `Destroy()`
stuff could be as minimal as possible without a big `pick()` so the
server can send the "I need a man 🥺" message could be punted off to
where no-one would care for it. It was already doing the async TGS
operation so it doesn't matter anyways as far as proc overhead in my
books.

I also fixed up the code for `adminGreet()` as well because that was
being really weird with not having proper booleans and running `pick()`
on things with literally one value (as well as excess
stringification)... it wasn't good so I just cleaned all that up too.
Ideally this all means we take up a little less CPU time but the aim of
this PR is to just clean it all up for modern coding standards.
alphabetized lists and early returns galore.

## Why It's Good For The Game

Code is better to read and less idented, and better yet it's no longer
necessary to read all the softie messages in the middle of `Destroy()`

## Changelog

Irrelevant
2024-05-25 15:57:29 -07:00
Kyle Spier-Swenson
2bf57113df Command bar typing indicators (client side html version) (#83081)
This uses a browser skin element to spy on the command bar and report
back to the server what verb is currently in it and how many characters
it has. it skips reporting if the text hasn't changed since the last
report.

im intentionally not providing the full text in the command bar to the
server, while designing the system so new verbs can be given typing
indicators by editing DM code, not html code.

The report rate is once a second but this could be lowered or tweaked.

Both the tgui say window being open and this system being active because
the command bar starts with `say "` is undefined behavior, mostly the
first one to end the indicator will just freeze indicators for the other
one until it too ends its current indicator session.

The system waits until something besides the `"` is in the argument to
say.

It is enabled for verbs `say`, `me`, and `whisper`.

I don't actually know if this is the case for tgui say. this is a one
line tweak anyways so let me know if this should be changed.

[(This pr closes a
bounty)](https://tgstation13.org/phpBB/viewtopic.php?p=726634#p726634)

🆑 MrStonedOne & Lilah Novi
add: Say commands typed in the command bar now trigger typing indicators
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-05-08 19:35:30 -06:00
oranges
82d5a88325 General IP intel tweaks (#82904)
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: ZephyrTFA <matthew@tfaluc.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2024-05-03 14:35:20 -04:00
Zephyr
cbcf5a7108 ip intel mk2 (#82683)
Do not merge this without coordinating with your server's host.

## About The Pull Request

Slightly refactors the way we handle IP intel.
You can still use the old data stored in the database.
Adds the ability to automatically reject connections determined by
config flags.

## Why It's Good For The Game

We used to have IP intel to check for VPNs, although it was disabled due
to being bad and unhelpful.
This refactor should make it much more manageable for hosts and admins.

## HOSTS BEWARE
This adds a new SQL table `ipintel_whitelist`
Look at the schema!

## Changelog

🆑
admin: The return of IPIntel
/🆑

---------

Co-authored-by: MrStonedOne <kyleshome@gmail.com>
Co-authored-by: oranges <email@oranges.net.nz>
2024-04-26 14:52:54 +12:00
Jeremiah
d554ab7766 RPG Loot: Revisited & READY (#82533)
## About The Pull Request
Revival of #72881

A new alt click window with a tarkov-y loading spinner. Replaces the
object item window in stat panel.

## Videos
<details>
<summary>vids</summary>

toggleable grouping:

![syAA5zf6RK](https://github.com/tgstation/tgstation/assets/42397676/c89b372d-29f6-4ebe-895d-f73bbdc41c19)

now lists the floor as first obj:

![abc](https://github.com/tgstation/tgstation/assets/42397676/cd8dc962-2ac7-41bf-a5d3-b9e926116b06)

in action:

![dreamseeker_IkrPKt2QZt](https://github.com/tgstation/tgstation/assets/42397676/1f990aa0-60f0-47e7-9d93-b63e35d05273)

</details>

## features:
- search by name
- 515 image generator is much faster than alt click menu
- opening a gargantuan amount of items shouldnt freeze your screen
- groups similar items together in stacks by default, toggleable
- shows tile as first item
- <kbd>Shift</kbd> and <kbd>Ctrl</kbd> compatible with LMB
🖱️
- RMB points points at items (sry i could not get MMB working)
- key <kbd>Esc</kbd> to exit the window.


For devs:
- A new image generation tech.
- An error refetch mechanic to the Image component
- It does not "smart track" the items being added to the pile, just
reopen or refresh. This was a design decision.

## Why It's Good For The Game
Honestly I just dislike the stat panel

Fixes #53824

Fixes 

![image](https://github.com/tgstation/tgstation/assets/42397676/0e50faab-7d4d-4bf7-8c5b-4ac28547bfbd)

## Changelog
🆑
add: Added a loot window for alt-clicking tiles.
del: Removed the item browser from the stat panel.
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2024-04-14 17:35:03 -04:00
Zephyr
7f8752be14 Admin Verb Datums MkIII | Now with functional command bar (#82511) 2024-04-12 12:27:09 -07:00
san7890
c403a6eccc Wraps lowertext() to ensure proper stringification. (#82442)
## About The Pull Request

Fixes #82440

This PR just creates a new macro, `LOWER_TEXT()` (yes the irony is not
lost on me) to wrap around all calls of `lowertext()` and ensure that
whatever we input into that proc will be stringified using the `"[]"`
(or `tostring()` for the nerds) operator. very simple.

I also added a linter to enforce this (and prevent all forms of
regression) because I think that machines should do the menial work and
we shouldn't expect maintainers to remember this, let me know if you
disagree. if there is a time when it should be opted out for some
reason, the linter does respect it if you wrap your input with the
`UNLINT()` function.
2024-04-10 12:19:43 -07:00
John Willard
5e9ce5ab99 New Battle Arcade (#81810)
## About The Pull Request

Remakes Battle Arcade from just about the ground up, with exceptions
taken for emagged stuff since I didn't really want to touch its
behavior.

The Battle Arcade now has stages that players can go through, unlocking
a stage by beating 2 enemies and the boss of the previous one, but this
must all be done in a row. You can choose to take a break between each
battle and there's a good chance you'll sleep just fine but there's also
a chance it can go wrong either through an ambush or robbery.

The Inn lets you restore everything for 15 gold and you can buy a sword
and armor, each level you unlock is a new sword and armor pair you can
buy that's better than the last, it's 30 gold each but scales up as you
progress through levels. They are really worth getting so it's best to
try to not lose your money early in.

The battle system is nearly the same as how it was before but I removed
the poor combo system that plagued the old arcade as one big knowledge
lock, now it's more just turn based. The game is built on permadeath so
dying means you restart from the beginning, but if you are going to lose
you can try to escape instead which costs you half of your gold.

Getting to higher levels increases the difficulty of enemies but also
increases the gaming exp rewards which could make this a better way to
get exp if you can get good at it.

Gaming EXP is used to increase chances of counterattacking but doesn't
give any extra health to the player.

I also removed the exploit of being able to screwdriver arcade cabinets
because people would do that if they thought they were on the verge of
losing to bypass the effects of loss. I instead replaced it with a new
interaction that the Curator's display case key can be used to reset
arcade cabinets (there's several keys on the chain so it made sense to
me), which I added solely because I thought Curators would be the type
of person to have run an actual arcade.

This is some gameplay

https://github.com/tgstation/tgstation/assets/53777086/499083f5-75cc-43b5-b457-017a012beede

As a misc sidenote, I also split up the arcade file just like how Orion
Trail was before, just for neat code organization.
The Inn keeper is straight up just a photo of my localhost dude, he's
not a player reference or anything it's not my actual character.
I also have no idea how well balanced this is cause I suck at it lol.

## Why It's Good For The Game

Battle Arcade is one of 3 last machines in my hackmd here to turn into
TGUI https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view
I've always thought the current version of battle arcade is quite lame
and lacks any progression, like Orion Trail I thought that since I was
moving this to TGUI, it would also be a perfect opportunity to revamp it
and try to improve on where it failed before, especially since the
alternative (NTOS Arcade) is also lame as hell and is even lamer than
HTML battle arcade (spam mana, then spam health, then just spam attack,
rinse and repeat).
This will hopefully be more entertaining and give players sense that
they are getting through a series of tasks rather than doing one same
one again and again.

## Changelog

🆑 JohnFulpWillard, Zeek the Rat
add: Battle Arcade has been completely overhauled in a new progression
system, this time using TGUI.
add: The Curator's keys can now reset arcade cabinets.
balance: You now need to be literate to play arcade games, except for
Mediborg's Amputation Adventure.
fix: You can no longer screwdriver emagged arcade consoles. Accept your
fate.
fix: Silicons can no longer play Mediborg's Amputation Adventure.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2024-04-08 23:24:27 +00:00
Kyle Spier-Swenson
ae109891c1 Fix job time stuff not detecting the database was down. (#81821)
This comment hasn't been true for 7 years.
2024-03-04 19:00:53 -07:00
LemonInTheDark
89073444db Micro-Optimize keyLoop's self time (#81464)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

This is a REALLY hot proc, takes up to like 2% of total cpu at highpop 
Let's micro it then

First, clients do not go null at random. It's not predictable per say
but it is consistent.
We can use this understanding to remove a bunch of null checks here

For loops are expensive. So rather then doing one each keyLoop, let's
cache the client's intended move direction on the client. Simplifies
some other code too

There is no sense running a turn call if it would have no effect, let's
be more intelligent about this

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
refactor: Fucks with how movement keys are handled. Please report any
bugs
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2024-02-14 18:28:34 -08:00
LemonInTheDark
2ed5a9fca0 Fixes the "Saw this admin message" button not working (#80908)
## About The Pull Request

Wrong fuckin name brother (also topic doesn't automake textnums into
nums)

## Why It's Good For The Game

Closes #80020

## Changelog
🆑
admin: Confirming that you have read an admin message now uh, works.
it's been 2 years bros
/🆑
2024-01-13 16:13:45 -07:00
Kyle Spier-Swenson
a470da144c update blacklisted client byond versions (#80523)
Also cleans up old ones that don't matter. Since we use 514 client
features so byond forces 514 clients anyways.

Resolves #80504
2023-12-23 22:08:10 -05:00
Zephyr
1d698431fe reload savefile on pref assosciation (#78984)
## About The Pull Request

Tells the preferences datum to reload the savefile when we associate to
an already existing one
## Why It's Good For The Game

This trolled me locally for a good hour wondering "why aren't my prefs
updating when I swap out the file"
## Changelog
2023-10-16 22:17:10 +02:00
LemonInTheDark
167f683bee Adds logging for first time user connections (#78525)
## About The Pull Request

Fikou asked me for this and I like fikou.

![image](https://github.com/tgstation/tgstation/assets/58055496/fdf99821-2404-45c4-ac09-85e29589a7ac)


## Changelog
🆑
admin: First time user connections are now logged
/🆑
2023-09-25 01:19:04 +02:00
Ghom
a351e4522c Culls client/mouse code only used by beam rifles in favor of signals. (#78113) 2023-09-17 01:25:51 -05:00
Striders13
bf6648b3a9 Makes client upload limit a config, bumps admin file size upload limit to 5mb (from 2.5mb) (#77708)
## About The Pull Request
Makes client upload limit a config. Increases max file size admins can
upload to 5mb, up from 2.5mb.
## Why It's Good For The Game
Makes it easier to do custom maps for events. Some of our in-game maps
are already larger than 2.5mb (delta is almost 3mb).
## Changelog
🆑
admin: admins can now upload files to the server up to 5mb (used to be
2.5mb)
config: file upload restriction is now config
/🆑
2023-08-19 12:19:55 -06:00
Spookuni
29bbef79bf wtb active headmin (#77670)
## About The Pull Request
this pr made me learn to webedit

## Why It's Good For The Game

turns out headmins have interesting functionality, probably good to have
them around

## Changelog
🆑
balance: Re-escalates terry powergaming by increasing the strength of
sec
/🆑
2023-08-16 16:39:10 +01:00
LemonInTheDark
11bc3ab67b Routine maintenance of Client/New (#77666)
## About The Pull Request

Just your every so often clearout of crummy shit

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/58055496/156f7272-4560-4018-bf1a-adc8bd98b5bd)

## Changelog
🆑
balance: De-escalates terry powergaming by reducing the strength of sec
/🆑
2023-08-16 13:05:16 +01:00
Bloop
ed8445a312 Adds sanity checking to prefs checks, fixing a bug that can cause emotes to stop displaying intermittently (#76946)
## About The Pull Request

This PR adds a bunch of sanity checking to the `prefs.chat_toggles` var
accesses.

Prefs can be null when client is creating/deleting and this causes a
runtime where you might not be able to use emotes.


![image](https://github.com/tgstation/tgstation/assets/13398309/d89649d4-19c7-439f-b080-332709196505)

EDIT: as per suggestion I stopped masking the issue and added stack
traces instead. And made them into helper procs to avoid code
duplication.

For some of these procs it is important that we are able to continue
running to get to the end. **A ghost having null prefs should not stop
everyone else from hearing/seeing the emote.**

So now they will put the stack trace and keep on trucking if that issue
occurs. This is the main 'point' of the PR, which has seemingly gotten
bogged down in the creation of the two helper procs--apologies.

See https://github.com/tgstation/tgstation/pull/70404 for essentially
the same issue but applied to chat messages. I have gone back and
replaced the duplicated code from that to use the new helper procs
instead.

## Why It's Good For The Game

Anything chat related is a bad place to runtime. Some messages can take
a while to type out and to have it not display is frustrating at worst,
possibly detrimental if you have to communicate something urgently.

## Changelog

🆑
fix: fixes a bug that can cause emotes to stop working if a client is
being created or deleted
/🆑
2023-08-14 22:30:35 +02:00
tattle
63c7e88156 Alert a Discord role when a new player joins (#77432)
## About Why It's Good For The Game The Pull Request
What it says on the tin. A requested feature for people who like to keep
an eye on swaths of new players. A config that is off by default, but a
Discord role ID can be added to have TGS ping that role.
Also sends alerts to Discord if a player with sketchy telemetry joins.

## Changelog
🆑 Tattle
admin: Pings an admin role on discord when a new player joins (when
enabled by config)
/🆑

---------

Co-authored-by: tattle <article.disaster@gmail.com>
2023-08-08 13:37:32 -04:00
Kyle Spier-Swenson
0fde2a7651 Update client click handling for 514 (#77316)
Hey! its 515 time, so i thought we should close up the last compability
change from 514 that slipped thru the cracks.

under 514 the LEFT/RIGHT/MIDDLE mouse button keys to the mouse param
list are set if they are pressed at all, while the `button` param says
which mouse button being clicked triggered that action.

More mouse code likely needs to be changed to account for this, but this
is the most critical path that cared about the distinction between which
buttons are being held and which button triggered the current mouse
action.

Fixes #76836 maybe?
2023-08-03 10:31:05 +12:00
Vekter
a8737f7d58 Removes redundant CID randomizer check (#76396)
## About The Pull Request
This check is redundant because 512 fixed the exploit it was designed to
check. Randomizers still exist, but this code doesn't apply to them
since they use a different method.

Someone else tried this before but got his shit slapped for it being his
first PR and there being a possibility he was removing it so he could
bypass it. I'm not banned and have no possible ulterior motives; I just
want to get rid of dead code.

## Why It's Good For The Game
I'd make an Old Yeller joke, but the code's already dead, so.

Fixes #43227

## Changelog

This is not a player-facing change.
2023-06-30 20:59:50 +01:00
LemonInTheDark
ae5a4f955d Pulls apart the vestiges of components still hanging onto signals (#75914)
## About The Pull Request

Signals were initially only usable with component listeners, which while
no longer the case has lead to outdated documentation, names, and a
similar location in code.

This pr pulls the two apart. Partially because mso thinks we should, but
also because they really aren't directly linked anymore, and having them
in this midstate just confuses people.

[Renames comp_lookup to listen_lookup, since that's what it
does](102b79694f)

[Moves signal procs over to their own
file](33d07d01fd)

[Renames the PREQDELETING and QDELETING comsigs to drop the parent bit
since they can hook to more then just comps
now](335ea4ad08)

[Does something similar to the attackby comsigs (PARENT ->
ATOM)](210e57051d)

[And finally passes over the examine
signals](65917658fb)

## Why It's Good For The Game

Code makes more sense, things are better teased apart, s just good imo

## Changelog
🆑
refactor: Pulled apart the last vestiges of names/docs directly linking
signals to components
/🆑
2023-06-09 06:14:31 +00:00
Mothblocks
ec438e19fb Mark client as QDELING (#75576)
Clients will now be marked QDELING while in the process of deleting.
Necessary for #75445
2023-05-21 21:19:28 -06:00
Yaroslav Nurkov
5a830abf1d Russian(and another) chat keybindings fix. (#75463)
## About The Pull Request

This PR solves the problem with entering a server with a different (from
English) layout and not being able to use chat binds.
so far, alas, you need to re-login with the English layout.
https://i.imgur.com/WjixRVv.mp4


## Why It's Good For The Game

Resolves an issue for servers based on this build.

## Changelog
🆑 Vishenka0704
fix: fixed different from english keyboard layout to use tgui chat
/🆑
2023-05-16 17:11:12 -06:00
Jordan Dominion
466db134b0 Makes chat helper procs async (#75414)
As they are and fixes some SHOULD_NOT_SLEEP hits

See #75232
2023-05-14 15:32:31 -04:00
Jordan Dominion
360ad68c1c Fix SHOULD_NOT_SLEEP hit in /client/Destroy() (#75241)
See #75232
2023-05-10 20:55:17 -07:00
san7890
912e843f53 Allows Export of your Preferences JSON File (#75014)
## About The Pull Request

Hey there,

This was spoken about in #70492 (specifically
https://github.com/tgstation/tgstation/pull/70492#issuecomment-1278069607),
and I have been waiting for this to be implemented for some time. It
never got implemented, so I decided to code it myself.

Basically, **if the server host doesn't disable it**, you are free to
export your JSONs as a player, right from the stat-panel. It's a pretty
JSON on 515 versions, too!

It's right here:


![image](https://user-images.githubusercontent.com/34697715/235251447-1c977718-51fd-4025-8d89-c60bffc379ec.png)

Here's what the prettified JSON looks like on 515.


![image](https://user-images.githubusercontent.com/34697715/235321061-4a217e26-c082-4bba-b54a-2c780defda0a.png)

There's a cooldown (default to 10 seconds) between exporting your
preferences.

#### Why is this config?

It's because in the past, a server host could always just file-share the
.sav or .json or whatever to the player, but they would have to do the
explicit option of actually bothering to make the files accessible to
the player. In that same line of logic, the server operator will have to
explicitly make the files accessible. This is mostly because I'm not
sure how good `ftp()` is at being a player function and wanted to have
some sort of cap/control somehow in case an exploit vector is detected
or it's just plain spammed by bots, so we'll just leave it up to the
direct providers of this data to elect if they wish to provide the data
or not.
## Why It's Good For The Game

Players don't have to log into Server A to remember what hairstyle they
loved using when they want to swap to Server B! That's amazing actually.
I always forget what ponytail my character has, and it'll be nice to
have the hairstyle in a readily accessible place (after I prettify the
JSON for myself).

It's also more convenient for server hosts to make player data like this
accessible if they really want to, too.

If we ever add an _import_ feature in the future (which would have to be
done with a LOT of care), this will also be useful. I wouldn't advise it
though having taken a precursory look at how much goes into it while
trying to ascertain the scope of this PR.
## Changelog
🆑
qol: The game now supports export of your preferences into a JSON file!
The verb (export-preferences) should now be available in the OOC tab of
your stat-panel if enabled by server operators.
server: Exporting player preferences is controlled by a configuration
option, 'FORBID_PREFERENCES_EXPORT'. If you do not wish to let clients
access the ftp() function to their own preferences file (probably for
bandwidth reasons?) you should uncomment this or add it to your config
somehow.
config: Server operators are also able to set the cooldown between
requests to download the JSON Preferences file via the
'SECONDS_COOLDOWN_FOR_PREFERENCES_EXPORT' config option.
/🆑
2023-05-02 08:22:44 -07:00
Kyle Spier-Swenson
7726c4880f Fix code not compiling on prod. (#74589)
(at)Mothblocks idea: make alt_tests a yml file and allow more generic alt
tests, like defines and shit. or we can put this on integration tests
and let windows build cover the normal/dev build case of preload_rsc = 1
2023-04-08 03:14:49 +00:00
Kyle Spier-Swenson
22ae592472 Increase first connect responsiveness by delaying vox sound preload (#74559)
These were getting sent too early and clogged up the queue of resources
to send the client, delaying chat load if the client had no byond rsc
cache and the cdn was not enabled.

Also this way if the cdn rsc download happens quick enough than these
calls can become noops. (if byond isn't smart enough to do that now, it
will be.)
2023-04-07 12:48:05 -06:00
san7890
8b827f32c9 Clients can't OOC until they have fully gone through New() (#74493)
People are able to send OOC messages before `client/New()` is able to
fully set itself up. Let's guard against this by re-using the variable
we set at the end of New() and blocking any usage of the OOC verb if
they aren't set up. I made it a define so we can use it in other spots
as well if the occasion should call for it.

Define included in this PR can be (and probably should be when someone
has time) replicated in other spots where we need it.
2023-04-05 11:23:15 +12:00
Kyle Spier-Swenson
c1474b3c45 [s]Disable byond debug links (#74373) 2023-03-30 13:34:59 -06:00
san7890
ccef887efe Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR
TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW
RATHER THAN AFTER THE FACT.

## About The Pull Request

Hey there,

This took a while to do, but here's the gist:

Python file now regexes every file in `/code` except for those that have
some valid reason to be tacking on more global defines. Some of those
reasons are simply just that I don't have the time right now (doing what
you see in this PR took a few hours) to refactor and parse what should
belong and what should be thrown out. For the time being though, this PR
will at least _halt_ people making the mistake of not `#undef`ing any
files they `#define` "locally", or within the scope of a file.

Most people forget to do this and this leads to a lot of mess later on
due to how many variables can be unmanaged on the global level. I've
made this mistake, you've made this mistake, it's a common thing. Let's
automatically check for it so it can be fixed no-stress.

Scenarios this PR corrects:

* Forgetting to undef a define but undeffing others.
* Not undeffing any defines in your file.
* Earmarking a define as a "file local" define, but not defining it.
* Having a define be a "file local" define, but having it be used
elsewhere.
* Having a "local" define not even be in the file that it only shows up
in.
* Having a completely unused define*

(* I kept some of these because they seemed important... Others were
junked.)
## Why It's Good For The Game

If you wanna use it across multiple files, no reason to not make it a
global define (maybe there's a few reasons but let's assume that this is
the 95% case).

Let me know if you don't like how I re-arranged some of the defines and
how you'd rather see it be implemented, and I'd be happy to do that.
This was mostly just "eh does it need it or not" sorta stuff.

I used a pretty cool way to detect if we should use the standardized
GitHub "error" output, you can see the results of that here
https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792
## Changelog
Nothing that really concerns players.

(I fixed up all this stuff using vscode, no regexes beyond what you see
in the python script. sorry downstreams)
2023-03-29 10:17:03 -07:00
Kyle Spier-Swenson
762f01dfe9 Fix lack of to_chat_immediate in client code that disconnects clients. (#73575)
these clients are about to be disconnected, they can't wait for the mc
to tick next
2023-02-21 21:10:53 +13:00
LemonInTheDark
dfeb4f4086 Adds a config option for warning clients about older builds (not just older versions) (#73549)
## About The Pull Request

MSO was being tsundere about this and it seemed useful, so here we go

## Changelog
🆑
config: Added a warning build config setting, you can now lightly
repremand but not block clients with older builds but fine major
versions
/🆑
2023-02-20 18:55:50 -07:00
scriptis
4e1fc078d7 literally just hook asay into tgui say (#73212)
## About The Pull Request

pressing f3 now opens asay in tgui say
## Why It's Good For The Game

![john willard gets
banned](https://user-images.githubusercontent.com/12202230/216750445-addb4f3f-0df4-47da-891d-4ef4820a10ab.png)

also fixes double-escaped special characters caused by #72407 and
finally gets rid of the gross regular tgui input popup
## Changelog
🆑
fix: asays are no longer double-escaped
admin: asay now uses tgui say
/🆑

---------

Co-authored-by: Scriptis <scriptis@duck.com>
2023-02-04 23:25:53 -07:00
Mothblocks
d67555a0b5 the inevitable Revert "Refactors admin verbs from giant ass lists into datums" in case stuff breaks (#73206)
Reverts tgstation/tgstation#72407
2023-02-05 11:44:38 +13:00
Zephyr
7f25d7f17b Refactors admin verbs from giant ass lists into datums (#72407)
## About The Pull Request

See title.
## Why It's Good For The Game

Makes it easier for people to add new admin buttons, and also removes
the giant ass ugly lists that are an affront to my eyes.

Yes you are still able to call them manually via the verb bar

![image](https://user-images.githubusercontent.com/12817816/210163285-2ecb4b59-67b4-47d2-b324-77048ce852fe.png)

![image](https://user-images.githubusercontent.com/12817816/210163288-5a0ec98c-9589-4cab-8a6b-1ab5151aa040.png)
## Changelog
🆑
refactor: Admin verbs are now datums with a dedicated panel handler
admin: Admin verbs now come with a handy description when you hover over
them!
/🆑

---------

Signed-off-by: GitHub <noreply@github.com>
2023-02-03 16:32:37 -08:00
Mothblocks
9d0cdfe909 Adds an Escape Menu (#72906) 2023-01-26 00:25:16 -08:00
Jeremiah
872e64fb05 Adds spaces around logical operators (#72603)
## About The Pull Request
Part of a prior PR that was closed (#72562). This version does not add
the check in CI.
## Why It's Good For The Game
The work is already done, so I figured why not.
## Changelog
N/A Nothing player facing

Co-authored-by: Jeremiah Snow <jlsnow301@pm.me>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-01-16 16:56:35 -08:00
AnturK
84f69359a0 More horrible 515 proc compatibility. (#71333)
So i left over some basic `/whatever/proc/format` uses in the original
PR this fixes it.

Notable exceptions to the rule:
- Paths in add_verb/remove_verb, we need full path instead of a name
there to access verb metadata so we can't use proc ref macros there.
- regex.Replace, found out that it does not accept call by name. Instead
i added new REGEX_REPLACE_HANDLER so we can at least try to mark these.

There's still leftover global procs that do not use GLOBAL_PROC_REF but
they functionally equivalent so that's for later.

I don't see any reasonable way to grep for this. But if you got any
ideas please share.
2022-11-22 07:55:43 +00:00
TiviPlus
b6ecf882ce Particle editor (#71110)
## About The Pull Request
Demo: https://streamable.com/wnj3mf

Features:
- Full support for most gradients/vectors/numbers/generators/transforms
( I might have forgotten some of the more esoteric ones)
- A "tutorial" section that explains the different rand/generation types
and how physics works with pictures
- Button for viewing what each var does
- Selecting a particle type to set immediately
- The generator types use defines now

Not included:
Color matrix support for color generators (I'm sorry but hell no)

Special thanks to @jlsnow301 for explaining js things to me

## Why It's Good For The Game

Making cool stuf

## Changelog
🆑
refactor: Added a particle editor to VV dropdown which can be used by
coders and admins to edit particle values on the fly easily.
/🆑

Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
2022-11-19 14:27:10 -08:00
AnturK
4d6a8bc537 515 Compatibility (#71161)
Makes the code compatible with 515.1594+

Few simple changes and one very painful one.
Let's start with the easy:
* puts call behind `LIBCALL` define, so call_ext is properly used in 515
* Adds `NAMEOF_STATIC(_,X)` macro for nameof in static definitions since
src is now invalid there.
* Fixes tgui and devserver. From 515 onward the tmp3333{procid} cache
directory is not appened to base path in browser controls so we don't
check for it in base js and put the dev server dummy window file in
actual directory not the byond root.
* Renames the few things that had /final/ in typepath to ultimate since
final is a new keyword

And the very painful change:
`.proc/whatever` format is no longer valid, so we're replacing it with
new nameof() function. All this wrapped in three new macros.
`PROC_REF(X)`,`TYPE_PROC_REF(TYPE,X)`,`GLOBAL_PROC_REF(X)`. Global is
not actually necessary but if we get nameof that does not allow globals
it would be nice validation.
This is pretty unwieldy but there's no real alternative.
If you notice anything weird in the commits let me know because majority
was done with regex replace.

@tgstation/commit-access Since the .proc/stuff is pretty big change.

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-11-15 03:50:11 +00:00
Thunder12345
762e9f06cf Refactors sound toggle prefs away from legacy toggles, introduces a new sound pref for jukeboxes (#71040)
## About The Pull Request

Migrates sound toggle prefs away from legacy toggles, and changes all
related preference checks to the modern form. Cleans up unnecessary
defines linked to the old prefs. Increments the minimum save file
version so a piece of old sound related code can be neatly removed. (The
minimum version hasn't changed in two years anyone who hasn't played in
at least that long probably doesn't even remember they had prefs saved)

Splits off jukebox music into its own preference distinct from
instruments. (This was actually the change that brought about this whole
PR the rest of the igration just made sense to do at the same time)

## Why It's Good For The Game

More granularity in sound preferences is good. It is quite reasonable
for players to want to hear normal volume and largely unobtrusive
instruments, without also being subjected to the aural torture of the
jukebox. As implementing this wothout creating an unwelcome extra legacy
toggle already required setting up a non-legacy sound toggle, it is most
reasonable to migrate the other sounds at the same time.

## Changelog
🆑
qol: Jukebox music can be controlled by a new seperate preference, and
is no longer linked to the instrument sound preference option.
refactor: Sound related toggle preferences have been migrated away from
the legacy system. Pre-existing preferences should be safely migrated
but players are advised to check.
/🆑
2022-11-07 08:45:40 -08:00
LemonInTheDark
6745d4fbee Ensures bunkering someone doesn't runtime due to a divide by 0 error (#71081)
## About The Pull Request
HAHHHHHHHHHHHHHHHH
2022-11-05 20:51:28 -07:00
Kylerace
940d96d5ad fixes _queue_verb() runtiming from /client/Click() thousands of times (#70647)
* fixes _queue_verb() runtiming from /client/Click() and adds info

* Update code/controllers/subsystem/verb_manager.dm

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-10-19 23:27:41 -04:00
Gamer025
2aaaf4692a Exclude statbrowser from seconds topic limiter (#70386)
* Exclude statbrowser from seconds topic limiter

* Update code/modules/client/client_procs.dm

Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>

Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
2022-10-10 05:45:25 +03:00