3,308 Commits over 944 Days - 0.15cph!
Drop connection if client isn't following protocol
Bail from RPC if the networkable doesn't have replication enabled
When calling server rpc directly, set rpc client to local
Add control rotation back, needed until we remove unreal player controller shite
Call server rpc directly if has authority, Call client rpc directly if has no authority, Ignore multicast rpc if has no authority.
Player.ControlledByLocalClient handled by us instead of unreal
Remove control rotation and location stuff from player
Give players a replicated player state property. Send client info last so that client can create a local client object from local player state.
Add very basic client side movement replication to test player
Use player state as player owner so that IsOwnedBy passes
Attach model to test player so I can see where people are
Removing testing replicated properties from BaseEntity
BasePlayer replicates by default
Possess player locally using a client RPC in player state
Destroy player on client leave
Add/remove player state from world connection list when player state entity initializes or shutsdown
Pass an optional reason to Gamemode.OnClientLeave. Handle ClosedByPeer and ProblemDetectedLocally disconnect reasons
Destroy player state after Gamemode.OnClientLeave. Add chat messages on client join/leave
Call Gamemode.ClientJoined after sending client info and world state so that gamemodes can't send an early RPC
Add scoreboard to NetTest
Destroy player state when client leaves
Cache local player controller so pawns can be possessed on client
Keep a seperate IConnection list for clients in authing stage so that player state entities etc aren't spawned until they're let into the game
Authed clients spawns a replicated player state entity. Multicast rpc and var replication only sends to authed client list
Make player state a public entity so it can be replicated properly
Remove EntityClass from SaveData, unused
Fix LinePreserve preprocessor error
Server sends connecting client info (client id and user id) so that local client can be created
Set client username as steam name
Set client authority if it was created on server
Add chatbox to NetTest so it can be tested through new networking
Server renames player name if it's in use, sends the name in client info message (only useful right now for testing multiple clients with same steamid)
Send client info for every client on server, not just the connecting client
Just destroy replicated entity with DestroyProper for now (forgot that Destroy is Authority only)
Server sends all clients (except for host) serialized entity data when a replicated entity is spawned
Deserialize entity creation message data on client, attempt to create and spawn
Bail instead of throwing exception on recv var for entity that doesn't exist yet (need to stop vars coming in before entity creation)
Enable new entity replication again, previous commit fixed the fuckup
Send destroy entity message
Destroy replicated entity on client when receiving destroy entity message
Add test entity that despawns after 5 sec to test entity destroy message
Load replicated entity properties and spawn after native initialization so that NetworkRef is valid
Serialize entity property with netid instead of uniqueid when sending over network
Entity spawn data no longer goes through unreal sockets, handled all in managed
Move game messages from ClientConnection to GameClient. Add World.IsListenServer
Bypass authority check on world cleanup
Ending game while there's a client connection will close the connection and wait for a disconnect event before returning to main menu
Create new list to hold entities on world cleanup, main ent list is invalidated when destroying an entity
Set client side entities netid to 0, seems to work fine
Remove replicate attribute on test entity field, need to make sure world state comes in before replicated vars before that can work
Fix Entity.Replicates always setting to true, whoops
Add bool to mark entities as required by engine so they don't get cleaned up (really these shouldn't even be put into the ent list) Add a bullshit long number onto networkid for client only entities so they don't conflict with replicated entities for now.
When creating replicated entities, create the managed entity class within the replicated scope, create the native class and spawn it outside the scope.
Game server ignores any message except steam ticket without the client being authed
Ignore socket disconnect events if the connection has invalid userdata (library is calling it twice on timeout, maybe a bug)
Refactor game server to identify clients by client id instead of steam id (multiple local clients share steam id, duh)
Skip BeginAuthSession for local clients sending ticket across socket, host process will have already been authed
Cache connection userdata before closing it so it doesn't get wiped
Skip steam auth for local clients for now (having issues with it)
Fix multiple steam auth for local steam id
Gamemode replicates by default. Init game menu system for remote clients because this wont be replicated.
Add generated code to skip RPC and call directly, check is always false for now
Entity replicated false by default, world entity true by default (just to keep it how it was before)
Log replicates bool in ent_list command
Fix Manager.ActorCreated bailing early for native spawned entities
Cleanup world and create replicated entities on world state message
Attempt to create entities from replicated world state inside a replicated entity creation scope
Add replicated mode in entity creation scope (we need to know if an entity is created via replication to set authority and netid)
Add create native function to entity that takes a netid that can only be used in replicated entity scope
Default entity authority to true (eventually this will be set to false for replicated entities) Call remote spawn if entity has no authority
World IsClient check using Global.IsDedicatedServer. World IsServer check using GameServer.Initialized
Server directly accepts client on client connect if server is running instead of sending steam ticket, bypasses sending of server info and world data. Allow main menu to create menu gamemode (IsServer is false in main menu)
Create relay socket if Global.RelaySockets is true
Allow multiple steam auth if steamid is same as server (for testing only)
Remove unreal player state usage
Start the game directly when starting game as listen server (no need to connect to server if we are the server)
Make sure reliable arg in rpc attribute is used in generated code
Add optional validate arg to rpc attribute
Try sending serialized entities as json to client after sending server info
Don't send replicated properties for non replicated entities
Allow server to disconnect clients. Add kick player test command.
Return to main menu when server disconnects a client
Assign entity netid from managed instead of native
Remove all replicated properties from managed component
Move NextEntityId to GameServer so it can reset on server shutdown (only server should be using this anyway)
Return 0 for next entity netid when server isn't initialized (server isn't running in main menu)
Attempt a world cleanup at the start of Manager.StartGame
Only remove entities from main entity list if they have a valid netid. Remove manual cleanup of current gamemode and menu system, assert instead to check world cleanup is doing its job.
Remove steam auth callback on game server shutdown. Ignore steam ticket messages from client if they've already been authed.
Stub out all access to unreal player controller and player state
Assign incremental client id