1,239 Commits over 1,341 Days - 0.04cph!
Component id + prune those for refresh as well
Serialize id properly
Initial commit
Component id + prune those for refresh as well
Serialize id properly
OnRefresh
Fix refresh for bones
OnDestroyInternal should be internal
Game Object Network Mode Selection https://files.facepunch.com/conna/1b0711b1/sbox-dev_G97N4pdA3q.png (#1495)
Fixes local interpolation jitter
Game Object Network Mode Selection https://files.facepunch.com/conna/1b0711b1/sbox-dev_G97N4pdA3q.png
ComponentFlags.NotNetworked. When a component has this flag, it won't be serialized in the scene snapshot or with a networked object when sent to other clients
Don't EditLog if we're not in the Editor. EditLog separate from BreakFromPrefab because we don't wanna do that just because we're spawning a networked object in a running scene.
Interpolation Fixes w/ Ownership Change (#1494)
🤞
This doesn't need to be internal anymore, was leftover from testing
Only interp here if we're a proxy?
Test comment something out
Initial commit to fix interp issues and ownership change
Finally fixes Facepunch/sbox-issues#4716 - reloading Map Instance when recompiled in Hammer
Add support for expression bodied methods for CodeGen. Fixes Facepunch/sbox-issues#5025
Add test for expression bodied CodeGen method
When joing via new instance, Project.Current is null - this can break <style> because it can't get relative path of current file. Fix that by just using absolute path in that case.
Remove unnecessary assert
Host can always drop ownership of a networked object
Host can always network destroy a networked object
wasted 2 days on this, works-ish but absolutely horrific, stashing anyway
Fixed [Sync] vars on private properties in base classes not being registered. What a strange one! Fixes Facepunch/sbox-issues#4916
Determine fate of network objects when owner disconnects (#1463)
* Can specify what happens to a network object when owner disconnects - don't love the naming
* Unused usings
* Some cleanup
* DisconnectAction -> NetworkOrphaned. Same terms everywhere else. Add NetworkOrphaned.Random - randomly assign owner when owner disconnects - route this through the host though
DisconnectAction -> NetworkOrphaned. Same terms everywhere else. Add NetworkOrphaned.Random - randomly assign owner when owner disconnects - route this through the host though
Might not have an active scene
Testing something but its shit, stash it though
Can specify what happens to a network object when owner disconnects - don't love the naming
Fixed Sync vars on derived component types not working
Host Sync Vars (#1462)
* NetworkTable.Entry.HasControl test. Separate sending network table changes from main update. Host or Owner can send table changes (only send entries they _control_)
* When using WriteAll always write all regardless of control. Make it so unless YOU control a Sync property you can't physically change its value
* Revert that for now - let people change Sync var value locally as it was before, we can try to find a better way to prevent this later. Complication comes from INetworkCustom
* Remove redundant call
* Let''s have each entry define if it has changes now that each one can be potentially controlled by different clients. Make sure we clear changed flag on entry when reading it. NetworkTable.HasChanges will now return true if any entry we have control over is dirty
* Clarify comment
* Let's call it HostSync
* Prevent actual setting of Sync property, modification of NetList, or NetDictionary if you don't have control over it. Non-owner, non-host can't change the values locally, they _must_ be what the synchronized value is
* We can always set the property if network not initialized
* Default HasControl to true for NetList/NetDictionary in-case not set
Default HasControl to true for NetList/NetDictionary in-case not set
Let's call it HostSync
Prevent actual setting of Sync property, modification of NetList, or NetDictionary if you don't have control over it. Non-owner, non-host can't change the values locally, they _must_ be what the synchronized value is
We can always set the property if network not initialized
Let''s have each entry define if it has changes now that each one can be potentially controlled by different clients. Make sure we clear changed flag on entry when reading it. NetworkTable.HasChanges will now return true if any entry we have control over is dirty
Revert that for now - let people change Sync var value locally as it was before, we can try to find a better way to prevent this later. Complication comes from INetworkCustom
When using WriteAll always write all regardless of control. Make it so unless YOU control a Sync property you can't physically change its value
NetworkTable.Entry.HasControl test. Separate sending network table changes from main update. Host or Owner can send table changes (only send entries they _control_)
Network Authority / Permissions (#1457)
* Can a connection create objects?
* Send network destroy even if DestroyImmediate is called
* Ownership authority flags
* Let GameObject have [Sync] too (test)
* Reorder enum, add [Expose]
* Change up logic for can create objects - only check if we have a source
* Default CanCreateObjects to true for now (this is current behavior)
* Initial implementatior for ownership authority
* Use NetworkAccessor for changing ownership authority. (Temp? Depending on review) don't use TL for set prop for Sync Vars
* Initial implementation of Rpc authority
* Remove a test log
* CodeGen static array for attributes on a CodeGenerator method/prop now marked as [SkipHotload] and readonly, so they do update when changed
* Make it CanSpawnObjects
* CanSpawnObjects settable only by the host
* Some renaming. Set OwnerTransfer direct on GameObject instead of method on NetworkAccessor
* Make sure CanSpawnObjects is synchronized to clients when set from host via ConnectionInfo
* Default CanSpawnObjects to true for now
* When OwnerTransfer is Request, make actual requests to the host for Drop/Assign/Take ownership and if host approves, then host will send the messages to everyone to take that action. Each message will then validate if was received from host
* Remove this for now, sus is later
* CanSpawnObjects is always true for the host. Early out in NetworkSpawn if local connection can't spawn objects - why bother trying at all?
* NetworkAccessor.SetOwnerTransfer method
* Documentation fixes
* Rename Rpc.HasAuthority to Rpc.HasPermission for consistency
* Owner can always drop ownership
* Allow owner transfer changing from current owner
Allow owner transfer changing from current owner
Owner can always drop ownership
Rename Rpc.HasAuthority to Rpc.HasPermission for consistency
NetworkAccessor.SetOwnerTransfer method
CanSpawnObjects is always true for the host. Early out in NetworkSpawn if local connection can't spawn objects - why bother trying at all?