4,777 Commits over 1,371 Days - 0.15cph!
Some tidy up, improvements to algo
Multiplayer/networking project settings. Add option to change Destroy Lobby When Host Leaves and Auto Switch To Best Host. Defaults can be set in Project Settings but can be overriden via Lobby Config.
Some cleanup - store current peer score
Fix sequence contains no elements
Periodically check if we're the best host candidate based on score - change owner if needed. When we are made the host, but we're still connecting, try to find another host candidate instead - if we can't find one then we can mark the lobby as toxic.
Don't include self when trying to find best candidate in some situations. When SteamLobbySocket is disposed (we left or disconnected), try to find another candidate then also.
Remove debug stuff and improve host candidate scoring based on average ping and connection quality to other peers
Set same tags for dedicated servers as lobbies for consistency. Fixed case when connection doesn't close properly.
Instead of the host crashing and disconnecting when a connecting user tries to send handshake messages with the wrong state, log it to console and kick them with a debug reason
Try to create lobby socket - if it errors and returns null, back out of creating the lobby
Make sure we clear removed and changed lists when resetting a string table
Make sure we disconnect properly if failing to create a Steam Lobby
AcceptConnection and Kick Support (#1698)
* Added INetworkListener.AcceptConnection( Connection, ref string reason ) and Connection.Kick( string reason )
* Added the kick command (can only be used by the host.)
Added the kick command (can only be used by the host.)
Added INetworkListener.AcceptConnection( Connection, ref string reason ) and Connection.Kick( string reason )
Lobby Config / Friends Only Lobbies (#1696)
* Can optionally pass LobbyConfig to CreateLobby. Right now only contains LobbyPrivacy. Add LobbyPrivacy.FriendsOnly.
* Separate overload as not to mess with any existing game packages
* Make old CreateLobby method obsolete. Add LobbyConfig.MaxPlayers (defaults to package config.) Add LobbyConfig.Name (defaults to hostname for Dedicated Servers, or the owner's Steam Name for P2P)
* Fix lobby config max players
On Dedicated Server you can pass a path to a .sbproj with +game to load a local project. Hotloading works as usual for connected clients.
Fix lobby config max players
Can optionally pass LobbyConfig to CreateLobby. Right now only contains LobbyPrivacy. Add LobbyPrivacy.FriendsOnly.
Separate overload as not to mess with any existing game packages
Make old CreateLobby method obsolete. Add LobbyConfig.MaxPlayers (defaults to package config.) Add LobbyConfig.Name (defaults to hostname for Dedicated Servers, or the owner's Steam Name for P2P)
Keep the accumulator. Fix the issue properly.
Revert to old fixed update logic. It appears the root issue was synchronized server time causing more fixed updates than it should due to Time.Now changing. This resolves the issue I was trying to solve initially, and also fixes Facepunch/sbox-issues#6906
Make old CreateLobby method obsolete. Add LobbyConfig.MaxPlayers (defaults to package config.) Add LobbyConfig.Name (defaults to hostname for Dedicated Servers, or the owner's Steam Name for P2P)
Separate overload as not to mess with any existing game packages
Can optionally pass LobbyConfig to CreateLobby. Right now only contains LobbyPrivacy. Add LobbyPrivacy.FriendsOnly.
Resolve Fixed Update Issues
Resolves issue where Fixed Update would be called more times than it should be. Fixes issues such as in Marble Racer where if you had 500fps you'd move much faster than other players.
Add a comment r.e. timedelta and timescaling so we dont get confused later
Use this to avoid confusion
Some docs, clamp accumulator to maxSteps, use time.delta
Use RealTime.Delta its clamped
Add unit test to test FixedUpdate class
Update documentation for methods in INetworkListener to indicate that they're only called for the host.
Add net_fakelag ConVar. It's working for both Steam Networking Sockets and TCP / local instance. Can also be changed in the editor like this https://files.facepunch.com/conna/1b1211b1/sbox-dev_jpOfxVrwEr.mp4
Also commit this important file
Some changes to time sync. Seems to fix Facepunch/sbox-issues#6865 locally. Needs re-test.
Use AppIsDedicatedServer() to determine if should print warning log in texturebase. Don't run Panel.TickInternal if we're a dedicated server - makes no sense for Panels to even exist.
Make dedicated server console window title s&box Dedicated Server
We can omit this warning too if we're a dedicated server
Add +hostname support for dedicated servers. For now, just so we have a way of seeing them, bundle dedicated servers in with other lobbies when querying lobbies so they show in the lobby list for a game.
Dedicated Server Querying and Session Authentication (#1690)
* Authentication and encryption can now be enabled (by default)
* Session authentication is added for authentication tickets - this is what makes the player count go up on a server or down when they leave
* Dedicated servers use a Fake IP and can be connected to either by their Fake IP or by their associated Steam Id
* Dedicated servers can be queried from the master server using the GameSocketShare mode and so can now be fetched in-game for displaying in some UI later (Steam Server Browser does not display them due to using Fake IP)
* Added Rich Presence support for players who are connected to a dedicated server (and other players can join the game)
* Fixed some issues with headless mode such as when things were attempting to use ISteamFriends or some texture methods
* Stale connections are properly disposed of and cleaned up within a network system where in some cases before they were not
* Ensure that we disconnect from the network system when closing the game/app, this makes sure that the Steam Game Server is properly shut down
* Fixed / implemented Steam Game Server callbacks
* Moved Steam Network Sockets configuration to C# and set them in the right place now
* Ensure that we disallow a player to connect to a dedicated server if there are no player slots remaining
Fix another issue with steam friends not being installed
Some extra fixes for that
TextRendering.GetOrCreateTexture, if we're headless, return Texture.Invalid
Steam Rich Present Join Game support for dedicated server by fake IP or steam id depending on connection type
Update servers list, fix NREs from things tryna access ISteamFriends when they're a dedicated server and that interface isnt loaded