159 Commits over 426 Days - 0.02cph!
Update: Enable AnalyticsV2 by default
Staging servers ran this for a couple days now and this'll switch over clients as well.
Tests: none, trivial change
Merge: from analytics_v2_expose_telem
- Can view AnalyticsV2 stats via analytics.stats, analytics.tablestats and analytics.uploaderstats
Tests: used above to check stats in editor
Merge: from voice_when_invis_fixes
- Voice chat is now heard by nearby invisible players and spectators
Tests: tested voice replication between 2 players, when invis and when spectating. invis case also tested disconnect-reconnect while invis.
Update: minor ServerProfiler function filtering adjustment
- built from b90a83e5
Was annotating everything from SubGrid, instead of ignoring everything
Tests: unit tests
Merge: from baseplayer_serverupdateparallel
- Optimizes ServerOcclusion by reordering work and reducing number of pairs considered
- Optimizes parallel snapshot send out by reducing Pool contention
- General optims via reduced profiler instrumentation (new ServerProfiler.Core binaries)
Tests: 2p session on craggy with teleporting around and various occlusion scenarios (invis, dead, normal occluded, in view)
Merge: from spectating_disconnect_nre_fix
- Bugfix for server NRE when spectating player disconnects
Tests: 2p on Craggy, disconnected while spectating - no more NRE
Merge: from basepalyer_netgroup_interit_fix
- Fixes cargoships(and other global entities) putting players into global network group which stops replication with "outside" world
Tests: 2p session on Craggy, spawned a cargo ship and threw items, killed other player, tried spectating
Merge: from analytics_queue_rewrite
- Bugfix for missing session-start event from Client, invalid session-end event from Client, malformed json aggregation
- Added support to edit upload intervals (tied to existing same server vars)
- Adjusted uploaders for some tables to avoid trying to send to our backend
Tests: unit tests + manual testing on Craggy (S+C mode) and Bootstrap (C only)
Merge: from analytics_save
- Adds a "save" event tracking when server creates a save
Tests: triggered save in editor with logging
Buildfix: add missing CLIENT guards
Tests: build all configs locally
Merge: from analytics_queue_rewrite
- New analytics uploading backend, disabled by default (analytics.usev2)
- New debug vars - analytics.log and analytics.dryrun
Tests: unit tests, used both old and new analytics backends and monitored logs
Merge: from baseplayer_vis_nre
- Simplified how debug.invis works
- Reimplemented how global.spectate and spectateid work - spectator no longer parents to the spectated player
- Tightened existing debug logs around mystery baseplayer NRE.
This eliminates a source of potential NREs related to players spectating others, but doesn't outright forbid them
Tests: 2p sesions on Craggy, one player spectates other - killed scientist with AK(hs audio replicated), helicopter fly around, motorbike ride around, noclipped outside of usual network range and back, cycled invis, left the server and returned - no issues. Tried debug camera.
Merge: from baseplayer_vis_nre
- fixed false positive logging, better logs
Tests: built standalone and connected to staging server - no extra errors on connect
Buildfix: add missing namespace using
Tests: none, trivial change
Merge: from analytics_track_menu_times
- Client analytics now aggregates frametimes, lag spikes and gc events into InGame, MainMenu, Inventory, Crafting, Contacts and Map groups
- Skip sending lag spikes and gc counts if there were none during performance logging tick
Tests: observerd client_perf analytics ticks in editor with debug code
Merge: from server_occlusion_gen_reorder_narrowphase
- Bugfix for ServerOcclusion potentially crashing during generation
Tests: generated custom map that had a consistent crash and a default 4.5k procgen editor world
Merge: from baseplayer_vis_nre
- Potential(low chance) bugfix for NRE on spectate end
- Breadcrumbs in case it's not fixed
Tests: editor and standalone build spectating loop
Bugfix(editor): LoadMapFile - don't NRE when no scene is loaded and Server Occlusio Debug is open
Tests: used in editor
Merge: from server_occlusion_poppin
- Bugfix: fixes false-negative occlusion queries at the top of the hills
- Bugfix: fixes false-positive occlusion queries while looking through a hill
- Optim: sped up occlusion cache generation by 65%+ (4.5k from 134s -> 50s, can be faster with sufficient RAM)
- Editor: extended LoadMapFile with Server Occlusion debug tools
Tests: generated reported bug case and visualized and debug traced. Generated 6k, 4.5k, 2k and Craggy to confirm generation doesn't crash.
Merge: from baseplayer_serverupdateparallel
- Bugfix/Update: don't use parallel snapshot sending in UsePlayerUpdateJobs 1 (it's a level 2 feature)
Tests: used both modes in Craggy, confirmed things are working
Merge: from baseplayer_serverupdateparallel
- Bugfix for frequently disabling UsePlayerUpdateJobs leading to player cache desync
Tests: wrote a unit test that confirms the bug and confirms the fix
Merge: from baseplayer_serverupdateparallel
- Bugfix: PlayerCache can no longer desync when disabling UsePlayerUpdateJobs
- Optim: removed couple extra allocs in UsePlayerUpdateJobs 2
Tests: ran unit tests + bunch of disable-enable of UsePlayerUpdateJobs in local session
Merge: from sleepignbag_assign_to_friend_bug
- Bugfixes for sleeping bag friend assignation, making private and "make bed" action not replicating to the new owner fully
- Added sleepingbag.assigntoplayer <bag entity id> and clearfromplayer <bag entity id> server vars for testing
Tests: spawned sleeping bag and bed and used above functionaility while assigning/clearing from self - was visible on map when expected.
Merge: from steamworks_posix_fix
- Bugfix for mods not beign able to work with Steamworks.Linux.dll - we go back to shipping Posix.dll
Tests: Built server standalone for Windows and Linux from Windows
Merge: from baseplayer_serverupdateparallel
- Optim: reducing allocs for UsePlayerUpdateJobs 2 codepath as much as possible(I think)
Tests: a bunch of 2p session on Craggy with UsePlayerUpdateJobs 2 and various interactions(occlusion, shooting, connect-disconnect)
Merge: from baseplayer_serverupdateparallel
- Bugfix for slow metabolism and slow hostile timer accumulation on drawn weapon
Tests: compared healing rates of large medkit between UsePlayerUpdateJobs 0 and 2
Merge from baseplayer_serverupdateparallel
- Optim: reduce GC allocs by 60% when creating tasks for UsePlayerUpdateJobs 2
- Optim: skip occlusion queries for pairs of same players (affects all modes)
Tests: 2p tests on Craggy + 2k procgen with UsePlayerUpdateJobs 0/1/2 (covered spawning, sleeping, killing and occlusion kicking in)
Merge: from benchmark_demo_clean
- Clean: removal of dead functionality for demo benchmarks (not supporting it)
Tests: compiled in editor
Merge: from baseplayer_serverupdateparallel
- Bugfix for UsePlayerUpdateJobs 1/2 - fix another reason why player could be swimming when parented
Tests: loaded up the map, went to the excavator - no more swimming with UsePlayerUpdateJobs 2
Merge: from baseplayer_serverupdateparallel
- Bugfix: UsePlayerUpdateJobs 1/2 - players no longer randomly start swimming when parented to entities
Tests: loaded map from AU Prem 1 and went on to excavator - no longer swimming
Merge: from baseplayer_serverupdateparallel
- Fixes NRE when UsePlayerUpdateJobs 1/2 is enabled
Tests: unit tests
Merge: from steamfriends_pooling_leak
- Bugfix for a pool leak of SteamFriends with open friend list or party management
Tests: observed steam friends list in game + created a party of me, SteamFriends pool stayed constant.
Merge: from texttable_allocs
- Update: TextTable now can be directly pooled and supports using-dispose pattern
- Bugfix: no more NRE on inspecting text table in debugger/evaluating twice
Tests: unit tests + executed a bunch of console commands multiple times
Merge: from shoretexture_editor_cache
- editor-optim: generates a cache for shore texture buffers
Tests: ran craggy twice
▉▍▅█▇▍▆▌: ▋▆▉█▇ ▋▊▌▌▄▉ ▍▋▄▋▍
- ▍▇▆▌█▇ █▊▋▌▊.▍▉ ▋▌▍▆ ▄▅▋▆▆.▄▇
- ▅▅▉▊▌█▌▉▆ ▆█▍▋▇.█▇ ▌▌▋█ ▅▋▆▄▆▉▊▋▍▄▊
▋▆▍▋▆: ▌▋▌▆▍ ▅▋▆▇▌ ▆▍▊▋▌▇ █▊▆▇▌ ██▆▌▅▊
Merge: from baseplayer_serverupdateparallel
- Bugfix for not replicating npcs when UsePlayerUpdateJobs 2 is set
- Bugfix for potential NRE for rare kick reasons when UsePlayerUpdateJobs 1 or 2 is set
Tests: 2p session on Craggy with NPCs and bots and UsePlayerUpdateJobs 2
Merge: from baseplayer_serverupdateparallel
- Bugfix for IndexOutOfRange when updating player state cache
Tests: none
Merge: from baseplayer_serverupdateparallel
- Next phase of parallel workflow, can be activated with UsePlayerUpdateJobs 2
- Optim: above mode now uses tasks to send entity snapshots/destroy messages where possible
- Optim: above mode uses parallel Burst jobs for server occlusion
- Optim: above mode reduced number of occlusion checks we run, more aggressive caching of results
- Contains Network++
Tests: build tests of all modes in editor + standalone server build + unit tests + 2p session on Craggy
▉▅▉▇▇: █▍▉▍ ▌▌▅▇▌▆▇▅▇▌▆_▄▉▊▉▅
- ▍▌▆▇▅▋: ▍▋▋▋▄▅▋▇▆▌█▅▌▉▉▉▍▅█ ▅ ▍█▍ ▆▍▉▄ ▆█▊▊▆▌▄▍█▊ ▅▅▅█▄
▉▇▊█▋: ▄▉▇▍▅ ▌▍▌█ ▌▉▋▉ ▅▉▍▉▅▆▆▌▉▅▍▌▍▇▋▍▌▉▉ ▉, ▋▄ ▊▄▋▉▇▌▅ ▉▊ ▅ ▇▉▍▌▅▍ ▅█ ▅▍█▇█▄▅▉
Merge: from benchmarking_update
- Log results after single scene run
- Fix extra timers in results
- Fix scene load exception for no longer existing effects benchmark
Tests: ran benchmarks in editor
Merge: from camerarenderer_leak
- Fixes memory leaks related to Rust+'s camera renderer and Nexus mugshot savings
Tests: print_arraypool when connected to turret - before ProtocolParser 16KB set would grow, now stays constant
Merge: from benchmarking_update
- Cleanup of obsolete EffectsBenchmark
- Editor-only DemoBuildingsViewer supports user modification of scene, scene export and import into scene
- Bugfix for infinite load loop in benchmarking flow
Tests: used the DemoBuildingsViewer to modify and export couple bases, built standalone client to run BaseRaidBench
Merge: from autoturret_optim
- Fix server NRE during turret initialization for ones without RCEyes bone set
Tests: spawned sentry.scientist.static(no RCEyes) and autoturret_deployed(with) - no NREs and still can control and shoot from autoturret_deployed
Merge: from autoturret_optim
- switch timing variables from float to double
Tests: editor builds C+S + confirmed deployed turret scans & detects, shoots, reacts to flank shots
Merge: from pooledlist_fixes
- Bugfix for invalid pooling of PooledList-subclassed types (like Eqs.PooledScoreList)
Tests: unit tests + print_memory PooledList tracking in editor with Wolf2
Merge: from autoturret_optim
- Bugfix for turret not reacting to player in front when powering up (caused by me)
- Bugfix for turret not identifying new target if it snuck from behind then walked in front (likely me as well)
Tests: standing in front, sneak in from behind then to front, sneak damage, flying from far, depower-power turret - turret finds a target & shoots
Merge: from autoturret_optim
- Fix to auto turret not responding to shots outside of firing arc
- Fix to turret not reacting to shots if it got depowered then powered up again
- Fix to turret snapping to hostiles outside of it's default firing arc when powering up
Tests: shot it, ran around and powered it up and down using infiniteiopower in various combinations
Merge: from autoturret_optim
- Speeds up AutoTurret::ServerTick by not updating nested transform hierarchy (gun_yaw and gun_pitch)
Tests: deauthed gun turret shooting me from different positions/angles
Merge: from growablegenes_allocs
- clean of 1 line
Tests: none, trivial change
Merge: from growablegenes_alloc
- reduces(removes?) junk allocs from growables
Tests: editor builds + alloc unit test