Commit graph

3775 commits

Author SHA1 Message Date
stacey
b8b86a42fd
Add space after comma so names look less clustered 2021-07-15 15:51:14 -04:00
stacey
2dc887266d
Add player count 2021-07-15 15:50:02 -04:00
stacey
b88d1f562f
Add player count support for MOTD 2021-07-15 15:48:27 -04:00
Lucas Nicodemus
9c748abda8 Minor: add h, this commit is worthless, do not read
Told you.
2021-06-19 01:08:55 -07:00
Lucas Nicodemus
eb97bdd259 Add helpful note to rest rate-limit error
The rate limiting error message used the term "tokens," which could be
easily misconstrued to refer to REST auth tokens, and not rate limit
leaky-bucket tokens. Since we don't expose the internals of the leaky
bucket to end-users, this error message is essentially just not good.
Without knowledge of a leaky bucket/GCRA, it really makes no sense.

Therefore, this changes the message to indicate that the "tokens" are
rate-limit tokens. It also adds a hint that there's a config setting
that can be changed to raise the limit, which further makes it more
understandable, and also provides a reasonable hint as to what setting
to change to alleviate this problem immediately. This makes it easier
for users to debug and less likely they have to read old docs/wait for help.
2021-06-19 01:04:00 -07:00
Lucas Nicodemus
f4c894ea22 Merge remote-tracking branch 'drunderscore/patch-1' into general-devel 2021-06-14 00:03:31 -07:00
James Puleo
98c1587e44
Print proper expected player ID when handling
spoofed LandGolfBallInCup.

(edited manually on GitHub, should be okay though)
2021-06-14 03:00:35 -04:00
Lucas Nicodemus
146ee41d9e Show world path in /worldinfo
This allows server operators to more easily locate their world paths,
particularly on Linux and macOS, where it isn't very obvious. To
determine where the actively loaded world is, simply run `/worldinfo`.
2021-06-13 23:49:53 -07:00
Lucas Nicodemus
a88c44e0db Remove old ConfigFile class
This was deprecated and replaced.
2021-06-13 13:20:43 -07:00
Lucas Nicodemus
4d46e58865 Prevent users from removing default guest group
The default guest group is critical and shouldn't be removed without
either TShock doing something like automatically recreating it if it
doesn't exist, or not having a huge problem if it doesn't exist.

I chose to take the easiest path, preventing users from removing it. In
theory the message gives enough context to imply "okay, go change the
group now."

This should be a relatively small edge case but I wanted to resolve it
while I was here.
2021-06-13 01:09:03 -07:00
Lucas Nicodemus
25a7e9e83a Fix warp send nullcheck
@punchready reported that there was an issue with the /warp send command
checking for position != (0,0). I tried to figure out what was going on
here, and I came up dry. I think this is vestigial from some other
database or file format storage. When @MarioE converted everything to
the new warp system, he preserved the check. The problem is that the
check seems to be based on the idea that a non-existent warp would
return the default constructor (which would contain Point.Zero).
Instead, a warp not found returns a null now.

Therefore, the proper thing to do, as implied by @punchready, is to
simply nullcheck this value instead.
2021-06-13 00:14:32 -07:00
Lucas Nicodemus
eba106a6da Add obvious deprecation warnings to comments
(In the old ConfigFile to prevent repeat incidents of
8cd6bf7d7b)
2021-06-13 00:04:45 -07:00
Lucas Nicodemus
8cd6bf7d7b Fix failure to apply default config changes
TShock.ConfigFile was deprecated and therefore changes applied in
previous commits were not applied until now.

See:

* f567486c47
* 39147355c1
* 597e403d50
2021-06-12 23:56:23 -07:00
Lucas Nicodemus
da163b80ac Allow operators to disable build permission notices
This commit allows server operators to disable build permission failure
notices. This is because some servers wish to have a "silent" operation
mode where the server doesn't send out these messages to users. This
makes sense, e.g., when the server is a "museum" and isn't intended to
be changed.
2021-06-12 23:53:17 -07:00
Lucas Nicodemus
f567486c47 Change default config for respawn timer to 10s
The default value for the respawn timer was 5 seconds, but this always
looked wrong because the default game respawn time is at least 10
seconds for classic characters. This can always be changed in the config
file, but looks significantly better when it matches the default imho.
2021-06-12 22:27:39 -07:00
Lucas Nicodemus
4100ecb64e Fix dead players being able to run /home
This commit fixes an issue where players could bypass the respawn timer
by using /home. Specifically, TShock rejects the command if the player
is dead.
2021-06-12 22:26:01 -07:00
Lucas Nicodemus
fd97c2268a Send success messages as Color.LightGreen
Basically Color.Green looks ugly and Color.LightGreen looks less ugly. I
could see changing the default to something like pure green, but I think
this might cause people to be like "yo why is this so bright."

Now arguably this should be configurable but I'm not going to
revolutionize the world by abandoning far more important work to allow
more artful messages. I just think that Color.Green is ugly enough that
I can't tolerate it.
2021-06-12 13:22:56 -07:00
Lucas Nicodemus
34da464bab Intercept console interrupt and handle nicely
Long ago in the early days of TShock someone asked why CTRL + C wasn't
handled and there was an explanation given along the lines of "something
something not supported on mono something something" or similar.
Attempts were made to try to handle console interrupts unsuccessfully
and the code was ripped out.

However, it's 2021, and we can now handle this signal and do the right
thing (which, ostensibly, is to save the world and shut down). Many
people like me reflexively hit CTRL + C because they want to shut down
the process. It's very infuriating that the current behavior results in
the server just dying and nothing being cleaned up properly.

Therefore, this commit changes the behavior to handle the interrupt,
save the world, and shut down nicely.

(If you still want to shutdown without saving the world, use off-nosave,
or idk, send SIGKILL).
2021-06-12 12:18:55 -07:00
Lucas Nicodemus
933c5f9e49 Fix typo in "Amethyst Gemtree"
🍬
2021-06-11 10:22:39 -07:00
Lucas Nicodemus
bf403a17ec Add /god alias for /godmode
Some of these commands really need more intuitive aliases. Therefore,
I've added another intuitive alias that matches other server mods.
2021-06-06 01:19:12 -07:00
Lucas Nicodemus
f811be6cf8 Add /slay alias for /kill
Like all of the other server mods I've used use /slay and not /kill and
it's really frustrating to type the wrong thing so I'm just going to add
an alias and hope nobody else minds.
2021-06-05 20:32:29 -07:00
Lucas Nicodemus
fb84ebc283 Remove "potential lag spike" warning when saving
It just seems silly to say "potential lag spike" when the world saves
because we have SSDs now, and quite frankly it's not hard to write a
file out.
2021-06-05 20:30:08 -07:00
Lucas Nicodemus
b72ed1542f Version tick: 4.5.4 2021-06-05 20:04:14 -07:00
Lucas Nicodemus
39e7de1d7c Merge branch 'h/door' into general-devel 2021-06-05 15:34:29 -07:00
Lucas Nicodemus
5b6e31677e Implement ISO8601 style dates for backup filenames
This partially implements ISO8601 + RFC3389 dates for backup filenames.
As noted in the changelog, this was a sponsor request, and also, it's
impossible to put the `:` literal in most files in most filesystems. So
as a result, this is technically not compliant with ISO8601 or RFC3389
but it is closer.

Also, wait, I don't even know because I don't have enough money to buy
ISO8601 so we'll just assume this is compliant. Job = done.
2021-06-01 23:23:49 -07:00
Lucas Nicodemus
89555beb73 Revert "Revert "Merge branch 'patch-28' into general-devel""
This reverts commit 258b21dddb.
2021-05-29 17:58:57 -07:00
Lucas Nicodemus
1a2281865d Remove now defunct comment 2021-05-28 23:55:27 -07:00
Lucas Nicodemus
580b6d7c61 Add OnDoorUse hook/event in GetDataHandlers 2021-05-28 23:53:29 -07:00
Lucas Nicodemus
be2b817abd Merge remote-tracking branch 'moist/patch-28' into general-devel 2021-05-28 20:24:51 -07:00
Lucas Nicodemus
258b21dddb Revert "Merge branch 'patch-28' into general-devel"
This reverts commit d2179e95ff, reversing
changes made to 58d7e26960.
2021-05-28 20:21:14 -07:00
Lucas Nicodemus
d2179e95ff Merge branch 'patch-28' into general-devel 2021-05-28 20:18:56 -07:00
stacey
a369a25084
Update TShockAPI/Bouncer.cs
Co-authored-by: Lucas Nicodemus <shank@shanked.me>
2021-05-28 23:12:39 -04:00
Lucas Nicodemus
707683a0f2 Fix whitespace changes that are confusing 2021-05-28 19:52:42 -07:00
Lucas Nicodemus
58d7e26960 Merge branch 'h/warn-logins' into general-devel 2021-05-28 19:49:37 -07:00
Lucas Nicodemus
c65c1ff448 Merge branch 'h/amf' into general-devel 2021-05-28 19:49:29 -07:00
Lucas Nicodemus
5e09f5133d Merge branch 'general-devel' into h/ips 2021-05-28 19:36:25 -07:00
Lucas Nicodemus
177648c8c3 Change Bouncer internal handlers to private set 2021-05-28 00:02:59 -07:00
Lucas Nicodemus
046d52ad2e Move emoji player index check into IllegalPerSe
This is the first commit in a pattern that I'd like to follow. The
concept is that we specifically create handlers for things that are
"illegal per se." That is, there are no possible situations (in the
current protocol) where a packet of this type is received from a client.
In this case, I moved the emoji handler out of the Handler just for
emoji, since it seemed like an obvious case.

The rule of thumb is simple: if something is illegal per se, there
should be no possible way in the vanilla client to achieve this result.
If a player sends this combination of packets they *must* be hacking.
Not that there is a 99.9% chance they're hacking, but that there is a
100% unambiguous chance that they're hacking.

Something is illegal per se if it can only be created by a hacked
client. If there's a crashing bug that a normal player can do with a
complex series of vanilla events, that is not illegal per se.

The goal of this namespace and class of handlers is to handle exactly
one type of protocol violation, and remove the packet accordingly. If it
is ever reported that the packet can be sent from a vanilla client, the
check must be removed as it is no longer a per se violation of the
protocol.
2021-05-27 23:59:43 -07:00
stacey
d78de5719e
Fix formatting 2021-05-27 18:51:27 -04:00
stacey
a5eeb0788a
Even better solution 2021-05-27 18:39:50 -04:00
stacey
6592a880bc
Improve on prev code
Thanks to everyone who helped on discord
2021-05-27 18:08:53 -04:00
stacey
98a93693da
Fix Torch God biome torch swap issue
Can confirm this fixes the issue but not sure if it opens any new exploits
2021-05-27 13:00:33 -04:00
stacey
09f75e0db9
Update OnNPCAddBuff to account for Frost armor set
This fixes false positive cheat detection when throwing rotten eggs at town NPCs while wearing Frost armor set. Also made the debug and kick messages more clear for future reference.
2021-05-26 19:31:46 -04:00
Lucas Nicodemus
dd972a7f31 Warn users about odd password conditions
TShock was originally designed to handle many things that Terraria did
not. Therefore, TShock always "took over" for the server password
prompt. We then added the ability to login via the password prompt if
you had an account, so that you could play on a server and login without
having to run /login in the chat window. Then, UUIDs were introduced,
and we added the ability to login via UUID.

This has created a cascading scenario where users are potentially
affected by many different things. We have always treated a user's
runtime intent as the most important: if a user sets something on the
console, it should be taken as the "most true" setting. In other words,
we believe that the most recent choice the user made is the valid one.
But for some of the config settings we have, we've made it opaque as to
how this decision making works. We also aren't clear what certain things
do by default.

Currently, if UUID login is enabled, a user will login "magically" and
bypass any password prompt. Even if this is disabled, though, users are,
by default, allowed to enter their passwords at the password prompt
instead of the server password. Both of these take priority over the
runtime setting.

The problem is that we haven't really made it clear if we should
override the runtime setting here. This is because the Terraria
interactive prompt asks for a server password, and one of the two
"bypass" settings is not a password setting at all. What do we respect?

I decided that the best approach is to just communicate really loudly
about these settings. If a runtime password is set, we'll warn users if
either of the bypass settings are "in play." If it's not set, we'll warn
users if the server password was set in config.json, just so they know
which password is being used.

If UUID logins are enabled we'll also warn users about that and the
security risks attached, no matter what. I don't know that we should
really have this feature, but we shouldn't get rid of it, imho.

The only thing I don't think we need to warn about is if login before
join is enabled. Login before join just acts as a way to speed up logins
for registered users. In an ideal world, users who shouldn't be able to
login should be banned. But I split the difference since we're warning
about UUID logins.

The only real downside to this change is that the PostInit hook gets
bigger. But dumping this stuff in another file/area/etc., seems dumb
since some of the logic exists here already. I think we can refactor
this later, but it's not my most pressing priority.

This whole change was inspired by the fact that @Onusai tried to lock
down their server but failed because of these settings enabled. We need
to be more transparent about logins, and this is a good first step.
2021-05-25 22:49:01 -07:00
Lucas Nicodemus
e73ce17130 Add fallback for finding players using tsi & tsn
This commit adds a fallback to address problems with FindByNameOrID
potentially returning ambiguous results. Now, in response to a multiple
match error, a player can specify tsi:[number] or tsn:[exact name] to
match a user ID or name exactly. This behaves analogous to the old
behavior of the search method.
2021-05-25 19:25:30 -07:00
Lucas Nicodemus
09fe254f17 Change TSPlayer.FindByNameOrID to keep searching
Currently, the TSPlayer FindbyNameOrID method aborts if it finds an
"exact match" based on this criteria:

1. If the player ID is on the server, it must be the thing we're looking
   for. Therefore, return that.

2. If the case sensitive "exact match" is on the server that isn't an
   ID, that must be what we're looking for. Therefore, return that.

3. Just yolo and downcase everything and return any number of matching
   players next.

This commit changes the behavior because some players have been joining
servers with ambiguous names, like `1`. In the current system, this
player is difficult to query because they're an "ID" and therefore an
exact match will be returned even if a player name exists that matches
the criteria.

This also alleviates the issue of a case exact match falling down the
same trap. It's ambiguous enough in all of these situations that an
admin should just be using a player ID instead.`
2021-05-25 18:39:56 -07:00
quake1337
5b9e1dc871 Add WorldInfo broadcast in /worldmode 2021-05-24 10:41:18 +02:00
Quinci135
5ac48019ab
Change happyFunTorchTime from true to false
This is set to true when the player obtains the torch god's favor item
2021-05-23 17:11:06 -07:00
Quinci135
5581bf5e45 Fix torchflags
UsingBiomeTorches: Whether or not the player has the torchgod biometorches ability enabled
HappyFunTorchTime: Whether or not the player has fought the torchgod before (for logic that checks for torchgod spawning)
unlockedBiomeTorches: Whether or not the player has the torchgod biome torches ability unlocked
2021-05-23 04:48:01 -07:00
Lucas Nicodemus
6856c867dd Use correct value to read usingBiomeTorches in GDH
This fixes a ridiculous typo in GetDataHandlers where we were setting
the UsingBiomeTorches flag based on having unlocked biome torches,
rather than actually being used. Thanks to @Arthri for the tip!
2021-05-23 03:21:56 -07:00