2,064 Commits over 944 Days - 0.09cph!
Bundle up entity transforms into a single message every tick instead of a message per entity
Move entity movement replication to BaseWorldEntity, BaseEntity is non visual so shouldn't need this. Remove scale from movement replication as scale changes happen less frequently.
Add entity movement update rate, defaults to 60, included in movement packet for interp
Use bitflags to pack entity movement packet with components of transform that changed from previous packet
Replicate entity relative transform if it has a parent
Save entity relative transform as properties so they can be used when first replicating the entity to client
Save entity parent netid directly instead of using properties (this is because public attachment functions are authority only)
Add SourceExport addon. Get SourceImport addon working again.
Fix NRE in ModelJsonConverter when model path is null or empty
Fix up shadows on dynamic lights on source maps
Skip entity spawn and destroy messages if there's no other client connected except for the host, saves an unnecessary entity serialize
Add incorrect protocol disconnect reason code
Add auth fail discconnect reason code
Only send entity parent netid if it changes, use attach flag if it changes to non zero, use detach flag otherwise
Send entity position and rotation if parent changes, just to make sure everything is synced
Don't write any movement data to packet if entity has no movement flags for the movement tick
SourceImport fixes to allow bsp conversion to our own format
Reflection based lump reader for new map format
Write map data to lumps
Write lumps to map file
Some Arcade gamemode fixups
Basic loader for new map format
Add lightmaps to map format
Save displacements as mesh in new map format
Add uint color to map vertex structure (displacement needs alpha to blend)
Save lightmap data and try loading it from new format
Create shadowmap from lightmap
Save the unencoded lightmap data, slightly longer to load but less data to save and keeps the format unrelated to unreal
Save ambient light samples to map format
Save bounds in map model structure. Load light volume from ambient light samples.
Gather vertices for convex collisions
Allow wheels to be removed by removing their prop, handles destroying of constraint
Try broadcasting entity transform each tick if ReplicateMovement is enabled
Broadcast entity attachment if it has a parent
Add entity relative scale
Get sandbox gamemode compiling again, remove NetTest gamemode
Fix toolgun click effect on listen server
Add OnChange callback back to replicated vars (only when a var is recvd)
Fix sandbox particle emitters not activating on spawn
Replicate movement for all sandbox entities
Remove attachment replication for now, needs to be designed better
Add material list property for static model entity so that spawned models replicate initial material overrides
Fix hitscan tool secondary fire not working when firing on client
Remove base entity parent property for now, stalls client networking for some reason
Only add model material path if it's valid
Fix balloon pop effect not playing on listen server
Call multicast rpc directly if we have authority
Don't send multicast net message or netvar message to host
Never send message to host when sending messages to all clients, should never need to do this
Close all connections when shutting down server so client doesn't have to wait until a timeout
Add disconnect reason 1004 for server shutdown
Disconnect from current server before joining a new one with connect command
Running connect command while connected just disconnects from current server for now to save some headache
Use Trace instead of Info to clean up some spam logging from networking
Add ViewAngles to IHasTools so physgun can use it for rotation
Fix particle emitter name not being replicated and activated
Fix model entity materials property not being generated when addons have their own properties
Damage entities with hitscan right click explosion
Custom collision responses for camera entity (ignore player)
Right click for tracking camera. Only allow one camera spawn per player.
Interp entity movement on remote entities
Enable movement replication for sandbox entities
Add optional collision bounds checking to human player
Fix human spawn offset and eye offset. Fix uncrouch detection.
Lerp view offset when crouching/uncrouching
Fix read/write of blacklist and whitelist json user data
Drop client if they fail handshake or auth
Clamp penetration adjustment. Use box collider instead of capsule collider, capsules suck when resolving penetration for some reason.
Disconnect and return to menu when cancelling on connecting screen
Update Facepunch.Steamworks to get reason code and reason string OnDisconnected
Always pass 0 reason code when closing connections, allows us to use customized debug reasons
Use reason code 1001 for kicked from server messages
Use reason code 1002 for ban messages
Allow gamemodes to validate users before their connection is accepted. Can be dropped if blacklisted or not on a whitelist
Use reason code 1003 for not whitelisted
Add Global.EnableWhitelist, if it's disabled, use blacklist. Implement whitelisting and blacklisting from json saved in User Data. This is the default implementation for BaseGamemode, other gamemodes are free to override it
Add gamemode callback for adding user to blacklist
Save blacklist entry to json file when added
Remove ban length from console command, isn't used yet
Bail out of Steam_OnAuthChange if response is not OK
Add IGamemode.ValidateUsername to allow gamemodes to validate and change username before it's assigned
Send net protocol version in handshake packet so we can reject out of date clients
Rename C2S_SteamTicket to C2S_Handshake now that the message contains desired username as well as the ticket data
Remove UnrealUtil, no longer needed
Ensure every class under UnrealEngine namespace is internal
Allow client to bypass steam auth if client with same steamid is already connected
Update Facepunch.Steamworks
Send username with the auth ticket to server
Hopefully fix server sending wrong entity netid to destroy
Don't call SteamClient.SteamId on server either
Don't call SteamClient.Name on server :/
fuck it, don't auth clients, see if that works
Try installing SteamUser events on server
comment out SteamNetworkingSockets.InstallEvents(true);
init steam client on dedicated
Revert "Update Facepunch.Steamworks"
This reverts commit 84c41430fb5b3d02b0aec082436df98ff971e331.
Update Facepunch.Steamworks
Ignore add block broadcast on server (so listen server doesn't add twice)
Add voxel block on server before broadcasting it
Fix incorrect client count in client info message
Don't wait until next frame to start server on dedicated, this is only needed when running listen server
don't bother waiting for assets and gamemode to load on dedicated server, this is just for loading screens
Create gamemode entity after starting game on dedicated server
Try calling SteamClient.Init on dedicated server (probably fixed in later Facepunch.Steamworks update though)
Refresh addons before starting game on dedicated server, hopefully fixes gamemodes not being found
Replicate entity model with replicate attribute instead of RPC
Remove functions to get assets from native, no longer used
Remove all unreal replication and interp code from base world entity and controllable entity
Remove remaining unreal networking code
Try to replicate static model entity's model import settings in managed instead of native
Fix human player to work with new networking, use human player for block builder gamemode
Add missing radius getter to sphere entity
Don't send destroy entity message for non replicated entity
Send destroy entity message after destroy events, gives entities chance to send any last messages
Add IsRegistered to BaseNetworkable, this allows generated rpc and netvar code to bail if entity hasn't spawned yet
Add naked version of citizen player model to cut down on load times when clothing isn't necessary
Add velocity and flags to server move RPC, allows human player to sync animation with movement velocity and movement state
Move InterpolationHelper to C#
Try to interp flying player movement
Lerp view angles properly
Move player movement replication and interpolation to BasePlayer. DefaultPlayer (basic flying player) uses client side movement replication by default.
Only log non zero netid
Zero out entity data offset if length is zero
Get block builder gamemode working again. Fix non background loaded textures not applying to material.
Only allow setting of Replicates on entity construction and before spawning
Fix movement replication for block builder player
Allow gamemodes to stall the loading screen
read/write voxel spawn data
Fix crash creating voxel map from serailized data
Serialize entity spawn data in world state as offset and length into binary blob
Allow client players to add blocks to voxel world
Don't load cubemaps in background, having issues with it
Replace networkable HasOwner with OwnerConnection, we care about the owning connection, not the direct entity owner
Also wait for assets loading in background before removing loading screen
await for huds to load before removing loading screen
Don't send netvar messages to host connection
Fix all gamemode compile errors after networking changes
Move AssetRef read/write into their own class instead of BinaryReaderWriterEx
Spawn menu system hud once and keep it around throughout the lifetime of game, show/hide when needed.
Only load menu system addon once at startup instead of every time going back to main menu, makes leaving game faster
async delay before starting server so that loading screen can show up straight away before any heavy loading is done
Call client rpc directly if the networkable is owned by local connection
Remove unreal replication for light entities
Make light properties replicated
Allow assets to be replicated with asset references
Fix NRE in AssetRef
Allow asset refs to have their own serialization depending on asset type
Add client.connection.status command
Handle client disconnect reason (only server timed out for now)
Add nameplates to NetTest
Add LocalClient class to deal with anything needing UPlayerController (a single player controller only exists on the local client now, not for every client on server)
BasePlayer has their own ViewAngles on the managed side but uses control rotation locally, this is so server can know player view angles without having a player controller
Orientate test player model with ViewRotation