6,045 Commits over 1,614 Days - 0.16cph!
merge from cache_entity_links -> main
Re-add the "Restoring X/100,000 links" for cases where the cache links aren't used
Pass `serverStartup` parameter into RestoringLoadedEntityLinks() so we don't call RCON.Update() when pasting with copypaste
- probably harmless but it bugged me
merge from cache_ocean_path -> main
Optimize server startup time by caching the ocean patrol path on disk (158s -> 138s)
- same idea as server occlusion grid being saved
- can increase version number to regenerate next restart
- convar `regenerate_ocean_path` will cause it to regenerate it next startup too
merge from main -> cache_entity_links
merge from optimize_duplicate_player_check -> main
merge from optimize_enforce_limits -> main
merge from fix_steam_setkey_crash -> main
Reduce number of unique keys set to prolong time until limit is hit
- round entities to nearest 1000
- round FPS to nearest whole number (and clamp to 512)
- round RAM to nearest 100MB
- round GC count to 2 significant figures (1-9,10-90,100-900,etc)
- round uptime to nearest 15m interval instead of every 30s
- increases time before limit is hit from 7d -> 365d+
Prevent server from crashing if too many keys are set
- stop setting new keys after 50k unique values have been set (it can still assign to previous values)
- prevents server from getting enough unique values to cause the crash
Optimize server startup time by 72s (230s -> 158s) by fetching the spawnables only once instead of doing it for each of the 100 spawn populations
Optimize server startup time by 24s (254s -> 230s) by using HashSet to check for duplicate player models
Add global const for "entity_links" version so we can invalidate all entity links when needed
Cache entity links across server restarts
- if a prefab's sockets change since it was saved it will relink sockets
- works for copy paste (so we can see how things were linked on a remote server)
merge from softcore_tc_limit/map_icons -> main
merge from optimize_spawn_distribution_simple -> main
merge from main -> softcore_tc_limit/map_icons
Fix TCs being sent to you when on tutorial island
Fix TCs on tutorial island being sent to you (if the island isn't instantly cleaned up)
Fix other map views (MLRS, vending, etc) showing TCs on it
Fix TC label on map able to get a delete button if a network update happens when the map is open and the sleeping bag buttons shuffle
Don't build quadtree for spawn distributions that feed in a zero length array
Reimplement the tile based version of spawn distributions without the additional optimizations on top
- still saves a large amount of memory (700MB vs 780MB before)
Fix tool cupboards still showing on the map if the replicated convar for max TCs is disabled at runtime
update softcore_tc_limit/map_icons
merge from main -> softcore_tc_limit
merge from optimize_world_server_clear/maps -> main
- only the server clearing WorldSerialization maps part, not the later NativeArray changes
Refactor world.maps.Clear() -> ClearMaps()
Show TCs on the map
- only enabled when the TC limit convar is enabled
- combines TCs with sleeping bags into clusters just like bags
- can toggle TC visibility on the map with a new button just like toggling bags
- TC map icons are slightly larger than sleeping bag icons
merge from sentry_crash_timestamp -> main
Include crash timestamp when uploading to sentry
- sentry parses from the minidump but this includes it in the JSON body too
- crashes happen in past then are uploaded on next startup so we want to know the difference
Update the rest of the code to work with the new NativeArrays for mapdata
Add support to TerrainMap to return a NativeArray
Switch WorldSerialization to use NativeArray
- make sure it frees the MapData explicitly as normally the GC is collecting the managed arrays
Switch the MapData protobuf from managed -> NativeArray<byte>
Add support for NativeArray<byte> in protobuf codegen
- instead of byte[]
Fix the server not clearing unused World Serialization maps
- saves about 175MB on 4500 map
Reduce memory usage of the server's SpawnDistributions by 750MB (780MB -> 40MB) and make it 3x faster to sample (2.1 us -> 0.7 us)
- store in tiles of 16x16 values
- 85% of the tiles are all zeros (fun fact)
- tiles that are all the same value store as negative tile index so it can avoid looking up the tile (mainly all zeros)
- deduplicate the remaining tiles (saves a little more)
- palette packing on top for tiles that have mixed values (2 - 4 bits / value)
- reduces server startup time from 4s -> 2.5s
Set TC items to use the display type of "TC limit" (it's how you configure them to show TC limit when held)
Add convar to softcore gamemode prefab
- it's `max_tool_cupboards` so could technically be set on any server (but intended only for softcore)