diff --git a/redist/redist-client-publicized/Assembly-CSharp.dll b/redist/redist-client-publicized/Assembly-CSharp.dll
index c4fc6fdb..064649d1 100755
Binary files a/redist/redist-client-publicized/Assembly-CSharp.dll and b/redist/redist-client-publicized/Assembly-CSharp.dll differ
diff --git a/redist/redist-client-publicized/Assembly-CSharp.xml b/redist/redist-client-publicized/Assembly-CSharp.xml
index 28131ee0..77fa68c6 100755
--- a/redist/redist-client-publicized/Assembly-CSharp.xml
+++ b/redist/redist-client-publicized/Assembly-CSharp.xml
@@ -4,3463 +4,3344 @@
Assembly-CSharp
-
+
- Helper for drawing label outline/shadow so that we can easily change it.
+ After the key "limit" is loaded we stop reading.
-
+
- Helper for drawing label outline/shadow so that we can easily change it.
+ If the type name has been redirected this method will be called recursively until the most recent name is found and returned.
-
+
- If true, SizeOffset_X and SizeOffset_Y are used when image is available.
- Defaults to false.
+ Path to the folder which contains the Unity player executable.
-
+
- If useImageDimensions is on and image width exceeds this value, scale down
- respecting aspect ratio.
+ Legacy implementation of foliage storage, with one file per tile.
-
-
- If useImageDimensions is on and image height exceeds this value, scale down
- respecting aspect ratio.
-
+
+ Should angle limits and subtractive volumes be respected? Disabled when manually placing individually.
+ If true, trees do a sphere overlap to prevent placement inside objects.
-
+
- If true, NVGs work in third-person, not just first-person.
- Defaults to false.
+ Pick a point inside the bounds to test for foliage placement. The base implementation is completely random, but a blue noise implementation could be very nice.
-
+
- Type the annotated class was generated for.
+ Does this tile contain any placed foliage?
-
+
- Method the annotated method was generated for.
+ Settings configured when starting the bake.
-
+
- Exposes the same API as the older Block class used by existing netcode, but implemented using new bit reader/writer.
+ Implementation of tile data storage.
-
+
- Last realtime a request was sent.
- Used to rate-limit clientside.
+ Nelson 2025-04-22: instanced foliage rendering is a decent chunk of CPU time. In retrospect this seems like
+ an obvious optimization: Graphics.DrawMeshInstanced accepts up to 1023* instances per call. Each tile
+ groups instances in lists of up to 1023*, but often isn't that high. Now, we collect instances until we
+ hit the 1023* limit. This is particularly useful for sparse variants like colored flowers.
+ With a consistent camera transform ("/copycameratransform") on an upcoming map remaster I went from between
+ 0.72-0.8 ms on my PC to 0.55-0.6 ms!
+ *Nelson 2025-07-14: refer to NON_UNIFORM_SCALE_INSTANCES_PER_BATCH.
-
+
- Perform rate limiting and update timestamp.
+ 2022-04-26: drawTiles previously looped over a square [-N, +N] from the upper-left to the bottom-right,
+ and each tile checked radial distance. We can improve over this by pre-computing the radial offsets and
+ starting from the center to improve responsiveness. N is [1, 5]
- True if we can proceed with request.
-
+
+
- Do we think the local player is eligible to send request?
+ Nelson 2025-07-14: although Graphics.DrawMeshInstanced accepts 1023 instances, it will split them into max
+ batches of [1, 511, 511] if shader does not have: #pragma instancing_options assumeuniformscaling
+ So, we might as well do our own splitting of batches to avoid batches of 1.
-
-
- Exposed for Rocket transition to modules backwards compatibility.
-
+
+ Must be within [0, MAX_MATRICES_PER_BATCH] range.
-
+
- Find difficulty asset (if valid) for navigation bound index.
+ Version number associated with this particular system instance.
-
+
- Could potentially be reused generically.
+ Automatically placing foliage onto tiles in editor.
-
+
- When zombie falls outside the map it needs a replacement spawnpoint within the same navmesh area.
+ 2022-04-26: this used to be environment layer, but "scope focus foliage" can draw outside that render distance
+ so we now use the sky layer which is visible up to the far clip plane.
-
+
- Find replacement spawnpoint for a zombie and teleport it there.
+ If true, ResourceAsset's legacy random rotation and scale properties are used.
+ (As opposed to FoliageInfoAsset properties.)
+ Defaults to true for backwards compatibility.
-
+
- Kills night-only zombies at dawn.
+ If true, mesh is not loaded when clutter is turned off in graphics menu.
+ Defaults to false.
-
+
- Allows Unity events to call in airdrops.
+ Foliage to use during the Christmas event instead.
-
+
- Used by weather assets.
+ Foliage to use during the Halloween event instead.
-
+
- Distance inward from edge before intensity reaches 100%.
+ Get asset ref to replace this one for holiday, invalid to disable, or null if it should not be redirected.
-
-
- Alpha is 0.0 outside volume and 1.0 inside inner volume.
-
+
+ True if other IFoliageSurface methods can be called.
-
+
- Given a point in world space, find the closest point within the total volume in world space.
+ Replacement foliage storage with all tiles in a single file.
+
+ In the level editor all tiles are loaded into memory, whereas during gameplay the relevant tiles
+ are loaded as-needed by a worker thread.
-
+
- World space size of the box.
+ Entry point for worker thread loop.
-
+
- Half the world space size of the box.
+ Order is important because TileBecameRelevant is called from the closest tile outward.
-
+
- World space size of inner falloff box when falloffDistance is non-zero.
- For example a 24x12x6 box with a falloff of 4 has an inner box sized 16x4x0.
+ Offsets into blob for per-tile data.
-
+
- World space extents of inner falloff box when falloffDistance is non-zero.
+ Tiles save an index into this list rather than guid.
-
+
- Local space size of inner falloff box when falloffDistance is non-zero.
+ Offset from header data.
-
+
- Local space extents of inner falloff box when falloffDistance is non-zero.
+ Data-only FoliageInstanceList shared between threads.
-
+
- World space radius of the sphere.
+ Data-only FoliageTile shared between threads.
-
+
- Local space radius of the sphere.
+ Ready to be released to the worker thread during the next lock.
-
+
- World space radius of inner falloff sphere when falloffDistance is non-zero.
+ Mutex lock. Only used in the main thread Update loop and worker thread loop.
-
+
- Local space radius of inner falloff sphere when falloffDistance is non-zero.
+ SHARED BY BOTH THREADS!
+ Coordinates requested by main thread for worker thread to read.
+ This is a list because while main thread is busy the worker thread can continue reading.
-
+
- Useful for code which previously depended on creating the Unity collider to calculate bounding box.
+ SHARED BY BOTH THREADS!
+ Tiles read by worker thread ready to be copied into actual foliage tiles on main thread.
-
+
- Called in the level editor during registraion and when visibility is changed.
+ SHARED BY BOTH THREADS!
+ Main thread has finished using this tile data and it can be released back to the pool on the worker thread.
+ This is a list because main thread could have populated multiple foliage tiles while the worker thread was busy reading.
-
+
- Editor-only solid/opaque child mesh renderer object.
+ Lifecycle:
+ 1. Worker thread claims or allocates data.
+ 2. Worker thread passes data to main thread.
+ 3. Main thread copies data over to actual foliage tile.
+ 4. Main thread passes data back to worker thread.
+ 5. Worker thread releases data back to pool.
-
+
- If true during Awake the collider component will be added.
- Otherwise only in the level editor. Some volume types like water use the collider in gameplay,
- whereas most only need the collider for general-purpose selection in the level editor.
+ Responsible for reading and writing persistent foliage data.
-
+
- Camera does not rotate when the car rotates.
+ Called after creating instance for level, prior to any loading.
+ Not called when creating the auto-upgrade instance for editorSaveAllTiles.
-
+
- Camera rotates when the car rotates.
+ Called prior to destroying instance.
-
+
- If hit from the left view rolls right, if hit from the right view rolls left. This may reduce motion
- sickness for some players.
+ Called when tile wants to be drawn.
-
+
- Rotate on all axes according to damage direction. This may induce motion sickness.
+ Called when tile no longer wants to be drawn.
-
+
- Unfortunately the version which added hitmarker style saved but didn't actually load (sigh).
+ Called during Unity's Update loop.
-
+
- Nelson 2023-12-28: this option was causing players to crash in the 3.23.14.0 update. Hopefully
- it's resolved for the patch, but to be safe it will default to false.
+ Load known tiles during level load.
-
+
- Prior to 3.22.8.0 all scopes/optics had a base fov of 90 degrees.
+ Save tiles during level save.
-
+
- If false, call Start and Stop recording before and after push-to-talk key is pressed. This was the
- original default behavior, but causes a hitch for some players. As a workaround we can always keep
- the microphone rolling and only send data when the push-to-talk key is held. (public issue #4248)
+ Nelson 2024-11-11: Collider may have been destroyed by an unexpected mod script configuration (or perhaps
+ simply missing in the first place). Should fix/prevent public issue #4749.
-
+
- If true, group member name labels fade out when near the center of the screen.
- Defaults to true.
+ Called when we position, rotate or scale this transform.
-
-
- If true, hide identifiable details of other multiplayer clients like avatars, player names, number of
- players online, server name, etc. Live streamers may find this useful to help prevent stream sniping.
-
- Separated from the older "streamer mode" option.
-
-
-
-
- If true, don't share details like "editing map X" or "join" with Steam. Useful for anyone who might be
- targeted / followed into servers, or who has a project to keep secret.
-
- Separated from the older "streamer mode" option.
-
+
+ Identical to this object.
-
+
- Controls whether hitmarkers are animated outward (newer) or just a static image ("classic").
+ Save the state of all the fields and properties on this object to the current transaction group so that they can be checked for changes once the transaction has ended.
-
+
- Determines how camera follows vehicle in third-person view.
+ Open a new transaction group which stores multiple undo/redoable actions, for example this would be called before moving an object.
-
+
- Determines how camera follows aircraft vehicle in third-person view.
+ Close the pending transaction and finalize any change checks.
-
+
- [0, 1] Blend factor between black and flashbang's desired color.
+ Clear the undo/redo queues.
-
+
- [0, 1] Multiplier for shake from .
+ If false this transaction is ignored. If there were no changes at all in the group it's discarded.
-
+
- Controls whether camera is constrained to roll-only or all axes.
+ Called when history buffer is too long so this transaction is discarded.
-
+
- Multiplier for flinch away from damage source in .
+ Directly blend current value toward target value.
-
+
- [0, 1] Intensity of FOV boost while sprinting.
+ Only blend current value toward target value if current is greater than target.
-
+
- [0, 1] Intensity of first-person motion caused by walking.
+ Only blend current value toward target value if current is less than target.
-
+
- Invoked when custom UI colors are set.
+ If true, write to LevelHierarchy file.
+ False for externally managed objects like legacy lighting WaterVolume.
-
+
- Invoked when dark/light theme is set.
+ If true, editor tools can select and transform.
+ False for items like the object-owned culling volumes.
-
+
- Number of times the player has clicked "Proceed" in the online safety menu.
+ Hacked to check horizontal distance.
-
+
- If true, "don't show again" is checked in the online safety menu.
+ Volume doesn't override fog.
-
+
- Prevents menu from being shown twice without a restart.
+ Volume fog settings are the same at all times of day.
-
+
- Nelson 2025-02-24: Warning that this is invoked *before* the item is actually removed from the items list.
- (public issue #4894)
+ Volume fog settings vary throughout the day.
-
- checks whether a space contains any filled slots
-
-
- checks whether an item can be dragged and takes into account if the item overlaps its old self
-
-
+
- checks whether the spot currently used by the old item is big enough to fit the new item
+ Kept because lots of modders have been using this script in Unity,
+ so removing legacy effect id would break their content.
-
+
- Please use SearchContents instead! To perform an equivalent search:
- • Set ItemType to type.
- • Set IncludeEmpty to false.
- • Set IncludeMaxQuality to true.
+ If per-weather mask AND is non zero the weather will blend in.
-
+
- Please use SearchContents instead! To perform an equivalent search:
- • Set ItemType to type.
- • Set IncludeEmpty to false.
- • Set IncludeMaxQuality to true.
- • Set CaliberId to caliber.
- • Set IncludeUnspecifiedCaliber to allowZeroCaliber.
+ Kept for backwards compatibility with fog volumes created in Unity / by mods.
-
+
- Please use SearchContents instead! To perform an equivalent search:
- • Set AssetRef to id.
- • Set IncludeEmpty to findEmpty.
- • Set IncludeMaxQuality to findHealthy.
+ Distinguishes from zero falloff which may be useful deep in a cave.
-
+
- Please use SearchContents instead! To perform an equivalent search:
- • Set MaxResultsCount to 1.
- • Set AssetRef to id.
- • Set IncludeEmpty to false.
- • Set IncludeMaxQuality to true.
+ Higher priority volumes override lower priority volumes.
-
+
- Invoked after any player's experience value changes (not including loading).
+ When falloff is OFF, how long to fade in audio by time.
-
+
- Invoked after any player's reputation value changes (not including loading).
+ When falloff is OFF, how long to fade out audio by time.
-
+
- Ugly hack for the awful skills enums. Eventually skills should be replaced.
+ When falloff is OFF, how long to fade in audio by time.
-
+
- Set every level to max and replicate.
+ When falloff is OFF, how long to fade out audio by time.
-
+
- Serverside only.
- Called when skills weren't loaded (no save, or in arena mode), as well as when reseting skills after death.
+ When falloff is OFF, how long to fade in lighting by time.
-
+
- Set this item as the dragging preview.
+ When falloff is OFF, how long to fade out lighting by time.
-
+
- Standard shader mode changes are based on built-in StandardShaderGUI.cs
+ Used by lighting to get the currently active effect.
-
+
- Does shader name match any of the standard shaders?
- Standard, StandardSpecular and the Unturned "Decalable" variants all share nearly identical parameters.
+ Hold onto collider and gameobject separately because collider isn't necessarily attached to gameobject.
-
+
- Based on fixup routine in StandardShaderGUI SetMaterialKeywords.
+ Nelson 2024-06-10: Changed this from guid to string because Unity serialization doesn't support guids
+ and neither does the inspector. (e.g., couldn't duplicate reward volume without re-assigning guid)
-
+
- Conditionally fixup older standard materials.
+ If true, vehicles overlapping volume will check conditions and (if met) grant rewards to passengers.
- True if material was edited.
-
+
- Parses mb:X from input string and filters assets using X master bundle.
+ Devkit objects are now converted to regular objects and excluded from the file when re-saving.
-
+
- List of all loaded blueprints potentially craftable by player. Updated when assets are refreshed. This
- allows us to skip blueprints that will never be craftable (such as level-specific blueprints).
+ Kept because lots of modders have been using this script in Unity,
+ so removing legacy effect id would break their content.
-
+
- Recycled list of assets with blueprints.
+ For use with PoolablePool when no special construction is required.
-
+
- Subset of loadedBlueprints.
+ Called when this instance is getting claimed.
-
+
- Center column.
+ Called when this instance is returned to the pool.
-
+
- Used by inventory item context menu to override which blueprints are shown.
+ Equivalent to MonoBehaviour.Update
-
+
- Left-hand column.
+ Equivalent to MonoBehaviour.FixedUpdate
-
+
- Right-hand column.
+ Useful when caller is not a MonoBehaviour, or coroutine should not be owned by a component which might get
+ deactivated. For example attached effects destroy timer should happen regardless of parent deactivation.
-
+
- Returns true if all filtered blueprints are craftable. (hacked-in for item action menu)
+ Stop a coroutine started by InvokeAfterDelay.
-
+
- If asset mapping has changed, find all assets with blueprints and gather the ones that can ever be crafted
- on this level. (I.e., excluding ones that we shouldn't waste time considering.)
+ Number of items in underlying queue.
-
+
- Accessible for UseableHousingPlanner.
+ Pool of objects that implement the IPoolable interface.
+
+ Useful for types that do not need special construction,
+ and want notification when claimed and released.
-
+
- Get a blank status from the pool or construct a new one.
+ Not necessarily cheap to calculate - probably best to cache.
-
+
- Barricade asset's EBuild included in saves to fix state length problems. (public issue #3725)
+ Internal cubic meter volume.
-
+
- Exposed for Rocket transition to modules backwards compatibility.
+ Surface square meters area.
-
+
- Exposed for Rocket transition to modules backwards compatibility.
+ True is solid and false is empty.
-
+
- Writable list of vehicle regions. Public add/remove methods should not be necessary.
+ Marked true when level editor or legacy hole volumes modify hole data.
+ Defaults to false in which case holes do not need to be saved.
+
+ Initially this was not going to be marked by hole volumes because they can re-generate the holes, but saving
+ hole volume cuts is helpful when upgrading to remove hole volumes from a map.
-
+
- Remove barricade instance on server and client.
+ If true, SetHeightsDelayLOD was called without calling SyncHeightmap yet.
-
+
- Used by ownership change and damaged event to tell relevant clients the new health.
+ If true, SetHolesDelayLOD was called without calling SyncTexture yet.
-
+
- Legacy function for UseableBarricade.
+ Heightmap-only data used in level editor. Refer to Landscape.DisableHoleColliders for explanation.
-
+
- Common code between dropping barricade onto vehicle or into world.
+ Call this when done changing material references to grab their textures and pass them to the terrain renderer.
-
+
- Spawn a new barricade attached to a vehicle and replicate it.
+ Hacky workaround for height and material brushes in editor. As far as I can tell in Unity 2019 LTS there is no method to ignore
+ holes when raycasting against terrain (e.g. when painting holes), so we use a duplicate TerrainData without holes in the editor.
-
+
- Spawn a new barricade and replicate it.
+ Is point (on XZ plane) inside a masked-out pixel?
-
+
+ If the highest weight layer is ignoreLayer then the next highest will be returned.
+
+
+ If the highest weight layer is ignoreLayer then the next highest will be returned.
+
+
- Not an instance method because structure might not exist yet, in which case we cancel instantiation.
+ Appends heightmap vertices to points list.
-
+
- Destroy barricades whose pivots are within sphere.
+ Appends heightmap vertices to points list.
-
+
- Clean up before loading vehicles.
+ Call this after you're done adding new tiles.
-
+
- Register a new vehicle as a valid parent for barricades.
- Each train car is registered after the root of the train.
- Note: Nobody knows why these are called plants.
+ Call this to sync a new tile up with nearby tiles.
-
+
- Called before destroying a vehicle GameObject because storage needed to be ManualDestroyed.
+ Capturing ortho view of map, so we raise the terrain to max quality.
-
+
- Send all vehicle-mounted barricades to client.
- Called after sending vehicles so all plant indexes will be valid.
+ Finished capturing ortho view of map, so we restore the terrain to preferred quality.
-
+
- Original server-only version that does not replicate changes to clients.
+ Nelson 2025-03-10: I want to experiment whether this fixes a strange terrain hole painting bug (public issue
+ #4851) without potentially introducing crashes for other players. (Per an earlier, undated comment we'd
+ run into a SetHolesDelayLOD-related crash in 2019 LTS.)
-
+
- Only used by plugins. Replicates state change to clients.
+ If a heightmap coordinate is out of bounds the tile/heightamp coordinate will be adjusted so that it is in bounds again.
-
+
- Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting.
+ If a splatmap coordinate is out of bounds the tile/splatmap coordinate will be adjusted so that it is in bounds again.
-
+
- Maps prefab unique id to inactive list.
+ Called by loading after landscapes (and legacy conversion) have been loaded.
-
+
- Sending yaw only costs 1 bit (flag) plus yaw bits, so compared to the old 24-bit rotation we may as well
- make it high-precision. Quaternion mode uses 1+27 bits!
+ Sorts modules by dependencies.
-
+
- +0 = BarricadeDrop
- +1 = root transform
- +2 = Interactable (if exists)
+ Wraps module assembly and handles initialization.
-
+
- ID unique to this zombie table in the level. If this table is deleted the ID will not be recycled. Used to
- refer to zombie table from external files, e.g., NPC zombie kills condition.
+ True when config is enabled and dependencies are enabled.
-
+
- Nelson 2025-08-20: changing this to affect both sentries and safezones. Some modded safezones allow
- building but not weapons, so players were using charges to destroy houses. (public issue #5175)
+ Metadata.
-
+
- Not an actual Steam ID or BattlEye ID, instead this is used to map player references to and from BE.
+ Assembly files loaded.
-
+
- True for offline or listen server host.
+ Types in the assemblies of this module. Refer to this for types rather than the assemblies to avoid exception and garbage.
-
+
- Next time method is allowed to be called.
+ How far along the initialization to shutdown lifecycle this module is.
-
+
- Number of times client has tried to invoke this method while rate-limited.
+ Nicely formatted version, converted into .
-
+
- Get Steam item definition ID equipped for given vehicle.
+ Used for module dependencies.
- True if a skin was available.
-
+
- Build econ details struct from tags and dynamic_props.
- Note that details cannot be modified because it's a struct and has copies of the data.
+ Holds module configuration.
-
+
- Add a recent ping sample to the average ping window.
- Updates ping based on the average of several recent ping samples.
+ Whether to load assemblies.
- Most recent ping value.
-
-
- True if both players exist, are both members of groups, and are both members of the same group.
-
-
- True if both players exist, are both members of groups, and are both members of the same group.
-
+
- Get real IPv4 address of remote player NOT the relay server.
+ Directory containing Module file, set when loading.
- True if address was available, and not flagged as a relay server.
-
+
- See above, returns zero if failed.
+ Path to the Module file, set when loading.
-
+
- Get real address of remote player NOT a relay server.
+ Used for module dependencies.
- Null if address was unavailable.
-
+
- Get string representation of remote end point.
+ Nicely formatted version, converted into .
- Null if address was unavailable.
-
+
- Players can set a "nickname" which is only shown to the members in their group.
+ Used for module dependencies.
-
+
- Can be used by plugins to verify player is on a particular server.
-
- OnSteamAuthTicketForWebApiReceived will be invoked when the response is received.
- Note that the client doesn't send anything if the request to Steam fails, so plugins may wish to kick
- players if a certain amount of time passes. (e.g., if a cheat is canceling the request)
+ Modules that must be loaded before this module.
-
+
- Since this isn't accessible to plugins it isn't necessarily up-to-date. For example, when a player
- teleports the culledPlayers list isn't updated until the next PlayerManager sync. If this becomes
- publicly accessible in some way it should be kept in sync.
+ Relative file paths of .dlls to load.
-
+
- Component for the tactical laser attachment's red dot.
- Resizes itself per-camera to maintain a constant on-screen size.
+ Requested by Trojaner. LoadFile locks the file while in use which prevents OpenMod from updating itself.
-
+
- Used to tune the scale by distance so that far away laser is not quite as comically large.
+ ModuleHook looks for module entry/exit points, then calls when enabled and when disabled.
-
+
- This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius.
+ Register components of this module.
-
+
- Load {Language}.dat and/or English.dat from folder path.
+ Cleanup after this module.
-
+
- Note: as of 2025-04-23 this *can* be null. (E.g., audio-only effects.)
+ Runs before everything else to find and load modules.
-
+
- If set, use OneShotAudioParameters to play this audio.
+ Temporarily contains Unturned's code untils it's moved into modules.
-
+
- If true the music option is respected when this effect is used by ambiance volume.
+ Temporarily contains types.
-
+
- In multiplayer the effect will be spawned for players within this radius.
+ Should module assemblies be loaded?
-
+
- When loaded or spawned as a vehicle, creates a different vehicle instead.
- For example, Off_Roader_Orange has ID 4. When that ID is loaded/spawned the new combined Off_Roader vehicle is
- used instead. Can also optionally apply a paint color, allowing saves to be converted without losing colors.
+ Called once after all startup enabled modules are loaded. Not called when modules are initialized due to enabling/disabling.
-
+
- Redirectors are in the Vehicle category so that legacy vehicle IDs point at the redirector.
+ Called once after all modules are shutdown. Not called when modules are shutdown due to enabling/disabling.
-
+
- Vehicle to use when attempting to load or spawn this asset.
+ Find modules containing an assembly with the Both_Required role.
+ Modules to append to.
-
+
- If set, overrides the default random paint color when loading a vehicle from a save file.
- Used to preserve colors of vehicles in existing saves.
+ Find module using dependency name.
+
-
+
- If set, overrides the default random paint color when spawning a new vehicle.
- Optionally used to preserve colors of vehicles in spawn tables.
+ These are *.dll files discovered in the modules folder.
-
+
- Invoked prior to built-in death logic.
+ Should missing DLLs be logged?
+ Opt-in because RocketMod has its own handler.
-
+
- Event for plugins when player dies.
+ Should vanilla search for *.dll files?
+ Can be turned off in case it conflicts with third-party search mechanism.
-
+
- Invoked after player finishes respawning.
+ If set, search for .dll and .module files in this directory instead of in Unturned/Modules.
-
+
- Tracks this player as an aggressor if they were recently an aggressor or if they haven't been attacked recently.
+ Event for plugin frameworks (e.g., Rocket) to override AssemblyResolve handling.
- Ignores rules and just make aggressive.
- Whether to call markAggressive on group members.
-
-
- Should damage be dealt even while inside safezone?
-
+
- Set bleeding state and replicate to owner if changed.
+ Depending on the platform, assemblies are found in different directories.
+ Root folder for modules.
-
+
- Set legs broken state and replicate to owner if changed.
+ Search Modules directory for .dll files and save their AssemblyName to discoveredNameToPath.
-
+
- Add to or subtract from stamina level.
- Does not replicate the change.
+ Search Modules directory for .module files and load them.
-
+
- Add to or subtract from stamina level.
- Does not replicate the change.
+ Orders configs by dependency and removes those that are missing files.
-
+
- Called from the server to modify stamina.
+ Whether add can be called from the inspector.
-
+
- Add to or subtract from stamina level on the client and server.
+ Whether remove can be called from the inspector.
-
+
- Called from the server to induce a hallucination.
+ Called when the inspector adds an element.
-
+
- Add to or subtract from hallucination level on the client.
+ Called when the inspector removes an element.
-
+
- Add to or subtract from warmth level.
- Does not replicate the change.
+ Called when the inspector sets an element to a different value.
-
+
- Called from the server to modify warmth.
+ Whether add can be called from the inspector.
-
+
- Add to or subtract from warmth level on the client and server.
+ Whether remove can be called from the inspector.
-
+
- Add to or subtract from oxygen level.
- Does not replicate the change.
+ Water volume marked as being sea level.
-
+
+ Null if under old water level, otherwise the volume.
+
+
- Add to or subtract from health level.
- Replicates change to owner.
+ Find the water elevation underneath point, or above point if underwater.
-
+
- Add to or subtract from food level.
- Replicates change to owner.
+ All water tiles and the planar reflection component reference this material.
-
+
- Add to or subtract from water level.
- Replicates change to owner.
+ If true rain will be occluded below the surface on the Y axis.
-
+
- Add to or subtract from virus level.
- Replicates change to owner.
+ Flag for legacy sea level.
-
+
- Used by plugins to respawn the player bypassing timers. Issue #2701
+ Convert world-space point into region coordinates that may be out of bounds.
-
+
- Very similar to VehicleManager.sendExitVehicle. Please refer to that for comments.
+ Convert world-space position into a region coordinate that may be out-of-bounds.
-
+
- Used to refill all client stats like stamina
+ Returns true if coord is within legacy range.
-
+
- Used by UI. True when underwater or inside non-breathable oxygen volume.
+ Clamp position into the maximum bounds expected by the game, not necessarily the level bounds.
+ True if position was modified.
-
+
- This value is confusing because in the level editor it is the normalized radius, but in-game it is the radius.
+ Sanity check all returned elements have a gameObject.
-
+
- No longer used in vanilla. Kept in case plugins are using it.
+ Create software cursor visual element.
-
+
- No longer used in vanilla. Kept in case plugins are using it.
+ Create green label in the upper-left.
-
+
- No longer used in vanilla. Kept in case plugins are using it.
+ Create tooltip visual element.
-
+
- Actual internal implementation.
+ Update upper-left green text.
-
+
- World to local bounds only works well for axis-aligned icons.
+ Update software cursor visual element.
-
+
- Unity's Camera.orthographicSize is half the height of the viewing volume. Width is calculated from aspect ratio.
+ Find hovered element and update tooltip visibility/text.
-
+
- Fading in.
+ Container for SleekWindow element.
-
+
- Finished fading in.
+ Container for top-level visual elements.
-
+
- Fading out.
+ Element under the cursor on the previous frame.
-
+
- Finished fading out.
+ Duration in seconds the cursor has been over the element.
-
+
- Extensions to the built-in Input class.
+ Distance inward from edge before intensity reaches 100%.
-
+
- Wrapper for Input.GetKey, but returns false while typing in a uGUI text field.
+ Alpha is 0.0 outside volume and 1.0 inside inner volume.
-
+
- Wrapper for Input.GetKeyDown, but returns false while typing in a uGUI text field.
+ Given a point in world space, find the closest point within the total volume in world space.
-
+
- Wrapper for Input.GetKeyUp, but returns false while typing in a uGUI text field.
+ World space size of the box.
-
-
- Should be used anywhere that Input.GetKeyDown opens a UI.
-
- Each frame one input event can be consumed. This is a hack to prevent multiple UI-related key presses from
- interfering during the same frame. Only the first input event proceeds, while the others are ignored.
-
- True if caller should proceed, false otherwise.
-
-
+
- Get mouse position in viewport coordinates where zero is the bottom left and one is the top right.
+ Half the world space size of the box.
-
+
- If true, clients destroy Throwable prefab upon collision. Defaults to false.
- Optional to ensure backwards compatibility for unexpected setups.
+ World space size of inner falloff box when falloffDistance is non-zero.
+ For example a 24x12x6 box with a falloff of 4 has an inner box sized 16x4x0.
-
+
- Original type on the Russia map which requires a mask with filters.
+ World space extents of inner falloff box when falloffDistance is non-zero.
-
+
- Requires a mask with filters and full body suit.
+ Local space size of inner falloff box when falloffDistance is non-zero.
-
+
- Damage dealt to players while inside the volume if they *don't* have clothing matching the deadzone type.
- Could help prevent players from running in and out to grab a few items without dieing.
+ Local space extents of inner falloff box when falloffDistance is non-zero.
-
+
- Damage dealt to players while inside the volume if they *do* have clothing matching the deadzone type.
- For example, an area could be so dangerous that even with protection they take a constant 0.1 DPS.
+ World space radius of the sphere.
-
+
- Virus damage to players while inside the volume if they *don't* have clothing matching the deadzone type.
- Defaults to 6.25 to preserve behavior from before adding this property.
+ Local space radius of the sphere.
-
+
- Rate of depletion from gasmask filter's quality/durability.
- Defaults to 0.4 to preserve behavior from before adding this property.
+ World space radius of inner falloff sphere when falloffDistance is non-zero.
-
+
- This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius.
+ Local space radius of inner falloff sphere when falloffDistance is non-zero.
-
+
- Nelson 2024-06-10: Added this property after nodes were converted to volumes. i.e., only old levels from
- before this property were added still have nodes, so it's expected that they won't deal damage over time.
+ Useful for code which previously depended on creating the Unity collider to calculate bounding box.
-
+
- Same description as .
+ Called in the level editor during registraion and when visibility is changed.
-
+
- Same description as .
+ Editor-only solid/opaque child mesh renderer object.
-
+
- Same description as .
+ If true during Awake the collider component will be added.
+ Otherwise only in the level editor. Some volume types like water use the collider in gameplay,
+ whereas most only need the collider for general-purpose selection in the level editor.
-
+
- Get real IPv4 address of remote player NOT the relay server.
+ Sort servers by name A to Z.
- True if address was available, and not flagged as a relay server.
-
+
- See above, returns zero if failed.
+ Sort servers by name Z to A.
-
+
- When placing structures that snap to grid multiple requests can come
- in to the server at the same time, and checking overlaps against structures
- can be problematic, so as a backup we track pending build requests
- and cancel ones which conflict.
+ Persistent identifier for server. Relies on server assigning a Game Server Login Token (GSLT).
+ i.e., servers without GSLT cannot be bookmarked.
-
+
+
+ IP address or DNS name to use as-is, or a web address to perform GET request.
+ Servers not using Fake IP can specify just a DNS entry and a static query port.
+ Servers using Fake IP are assigned random ports at startup, but can implement a web API endpoint to return
+ the IP and port.
+
+ Nelson 2025-01-20: Making this optional now. The downside is we can't perform a Steam A2S query without
+ IP/port, but the upside is players can more easily join their non-port-forwarded servers.
+
+
+
- Register a location as having something built there soon.
+ Steam query port. Zero for servers using Fake IP.
- Unique handle to later finish the request.
-
+
- Is a location available to build at (i.e. no pending builds)?
+ Name updated from SteamServerAdvertisement.
- False if there are any outstanding build requests for given location.
-
+
- Notify that a previously registered build has been completed.
+ Short description updated from SteamServerAdvertisement.
- Unique handle.
-
+
- Nelson 2023-08-11: this probably should be rewritten a bit if used in the future
- because the error context currently assumes this is an item reward for consumables.
+ Small icon updated from SteamServerAdvertisement.
-
+
- Resolve table as items and grant random number to player.
+ Used by UI to track whether it's been added/removed.
-
+
- Resolve table as items and grant random number to player.
+ Allows player to save server advertisement to join again later. Semi-replacement for Steam's built-in favorites
+ and history lists because as of 2024-04-26 they don't seem to work properly with Fake IP.
-
+
+ details if advertisement is bookmarked.
+
+
- Enumerate random number of valid assetIDs.
+ Restore a removed bookmark.
-
+
- Converts Steam BBcode tokens into widgets displayable using Glazier UI.
+ Payload for the DamageTool.explode function.
+ Moved into struct because the amount of arguments to that function were insane, but now is not the time to completely refactor damage.
-
+
- If false, expect LineBreak tokens in input. (default false)
- If true, insert line breaks where appropriate.
- Steam's new visual editor doesn't emit newlines, instead inferring line breaks from paragraph blocks. To
- make life easier we will do the same for the main menu announcement feed.
+ Speed to launch players away from blast position.
-
+
- Vanilla maximum level.
+ This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius.
-
+
- If set, maximum skill level attainable through gameplay.
+ Please check CurrentlyAllowsBuilding.
+ Bypassed by LevelAsset's ShouldAllowBuildingInSafezonesInSingleplayer option.
-
+
- Multiplier for XP upgrade cost.
+ Tools like carjacks and tires can be used in safezone by admins for maintenance.
-
+
- Get maximum level, or maxUnlockableLevel if set.
+ ID unique to this zombie table in the level. If this table is deleted the ID will not be recycled. Used to
+ refer to zombie table from external files, e.g., NPC zombie kills condition.
-
-
-
+
- Implemented by components the player can talk with using DialogeAssets. (e.g., InteractableObjectNPC)
+ Visualizes reverb zone in-game.
-
+
- Used to test whether player is within range.
- Ideally, this should be removed in the future in favor of the server resetting speaker when out of range.
+ Temporary to unbind events because this class is static for now. (sigh)
-
+
- Get a net ID that can be used with GetDialogueTargetFromNetId to resolve IDialogueTarget in multiplayer.
+ If true and player has no shirt equipped, use fallback shirt as equipped shirt.
+ Used by oversize vest and zip-up vest so they are visible without a shirt equipped.
-
+
- Called on server to test whether object conditions are met.
+ Converts Steam BBcode tokens into widgets displayable using Glazier UI.
-
+
- Called on server to find the start of conversation dialogue asset.
+ If false, expect LineBreak tokens in input. (default false)
+ If true, insert line breaks where appropriate.
+ Steam's new visual editor doesn't emit newlines, instead inferring line breaks from paragraph blocks. To
+ make life easier we will do the same for the main menu announcement feed.
-
+
- Used in error messages.
+ Thanks to Glenn Fiedler for this RK4 implementation article:
+ https://gafferongames.com/post/integration_basics/
-
+
- Called on client to format in UI.
+ Higher values return to the target position faster.
-
+
- Helper wrapping Unturned's usage of AudioListener.volume, which is the master volume level.
- This makes it easier to track what controls the master volume and avoid bugs.
+ Higher values reduce bounciness and settle at the target position faster.
+ e.g. a value of zero will bounce back and forth for a long time (indefinitely?)
-
+
- Is audio muted because this is a dedicated server?
-
- While dedicated server should not even be processing audio code,
- older versions of Unity in particular have issues with headless audio.
+ Seamlessly teleports player to an equivalent position at the destination upon contact.
-
+
- Is audio muted because loading screen is visible?
+ Target position and rotation.
-
+
- Player's volume multiplier from the options menu.
+ Only used in the Unity editor for visualization.
-
+
- Player's unfocused volume multiplier from the options menu.
+ Steam currency codes seem to be ISO 4217, however the documentation (as of 2021-01-29) does not say so.
-
+
- Mute or un-mute audio depending whether camera is valid.
+ If overlay is disabled there is no point showing the in-game item store because the player will not be able
+ to checkout. We request listings regardless in order to show the "sale" label automatically.
-
+
- Synchronize AudioListener.volume with Unturned's parameters.
+ Initially these were structs so that they would be adjacent in memory and therefore faster to iterate lots of them,
+ but making them classes lets them reference each other which significantly simplifies finding adjactent housing parts.
-
-
- Note: new official code should be using per-method rate limit attribute.
- This is kept for backwards compatibility with plugins however.
-
- Timestamp for server-side rate limiting.
-
-
-
+
- Realtime this action was performed.
+ Item along positive direction.
+ Can be multiple on existing saves or if players found an exploit.
-
+
- Realtime since performedRealtime.
+ Item along negative direction.
+ Can be multiple on existing saves or if players found an exploit.
-
+
- if(myRateLimit.throttle(1.0))
- return; // less than 1s passed
+ Item between floors.
+ Can be multiple on existing saves or if players found an exploit.
-
+
- Exposed for Rocket transition to modules backwards compatibility.
+ Is there a wall in this slot, and is it full height (not rampart)?
-
+
+
+ This check prevents placing roof onto the upper edge of a rampart because ramparts
+ create an edge at full wall height even though they are short.
+
+ Ideally in the future wall height will become configurable and remove
+ the need for this check.
+
+ See public issue #3590.
+
+
+
- List of all interactable items. Originally only used to clamp their distance from the drop point to ensure
- clients can always pick them up, but now used to find items within a radius for nearby menu as well.
+ Position at the base of the pillar.
-
+
- Kept for plugin backwards compatibility.
- This one is problematic because on the client physics can move items between regions.
+ Yaw if placing pillar at this vertex.
-
+
- Find physically simulated items within radius.
+ Pillar or post currently occupying this slot.
+ Can be multiple on existing saves or if players found an exploit.
-
+
- Despawn any old items in the current despawn region.
+ Can be zero if pillar is floating, or up to six in the center of a triangular circle.
- True if the region had items to search through.
-
+
- Attempt to respawn an item in the current respawn region.
+ Is there a pillar in this slot, and is it full height (not post)?
- True if an item was succesfully respawned.
-
+
- Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting.
+ Floors must be placed touching the terrain, or a fake-terrain object like a grassy cliff model.
-
+
- Instantiate at least this many items per frame even if we exceed our time budget.
+ Pillars can be partly underground or inside a designated allowed underground area. Otherwise,
+ if the very top of the pillar is underground placement is blocked. (public issue #4250)
-
+
- Sort servers by name A to Z.
+ Side length of square and triangular floor/roof.
+ Walls can be slightly less, but we treat them as if they are the full length.
-
+
- Sort servers by name Z to A.
+ Vertical distance from edge center to wall pivot.
-
+
- Persistent identifier for server. Relies on server assigning a Game Server Login Token (GSLT).
- i.e., servers without GSLT cannot be bookmarked.
+ Vertical distance from edge center to rampart pivot.
-
-
- IP address or DNS name to use as-is, or a web address to perform GET request.
- Servers not using Fake IP can specify just a DNS entry and a static query port.
- Servers using Fake IP are assigned random ports at startup, but can implement a web API endpoint to return
- the IP and port.
-
- Nelson 2025-01-20: Making this optional now. The downside is we can't perform a Steam A2S query without
- IP/port, but the upside is players can more easily join their non-port-forwarded servers.
-
-
-
+
- Steam query port. Zero for servers using Fake IP.
+ If position is nearly equal within this threshold then edges/vertices will connect.
-
+
- Name updated from SteamServerAdvertisement.
+ Maximum distance from player's viewpoint to allow placement.
-
+
- Short description updated from SteamServerAdvertisement.
+ How far to search for empty slot best match.
-
+
- Small icon updated from SteamServerAdvertisement.
+ Cosine of the angle between ray direction and direction toward slot must be greater than this.
-
+
- Used by UI to track whether it's been added/removed.
+ When validating item placement expand physics overlap this much.
+ Useful to ensure slightly-touching overlaps (e.g. pillar touching the pillar above) are handled properly.
-
+
- Allows player to save server advertisement to join again later. Semi-replacement for Steam's built-in favorites
- and history lists because as of 2024-04-26 they don't seem to work properly with Fake IP.
+ Ensure players, vehicles, zombies, animals, etc are not within this distance of pending placement.
-
- details if advertisement is bookmarked.
-
-
+
- Restore a removed bookmark.
+ Distance from triangle pivot to apex of triangle.
-
+
- Static functions for creating monitor instance on server.
+ Radius of circle within triangle edges.
-
+
- Entry point called by dedicated server after loading level.
+ Distance from triangle pivot to center of triangle.
-
+
- Create vanilla update monitor that watches for changes to workshop level file and any other mods.
+ Small threshold to allow placing even with existing barricades on the floor.
-
+
- Helper to get updated timestamp from workshop items loaded by DedicatedUGC.
+ House overlap is approximately the same size as the housing item's collider(s), and is intended to check whether
+ any pre-existing barricades or structural items are in the way. For example whether a wall cannot be placed because
+ there is a storage crate in the way, or if a foundation is blocked by another slightly rotated foundation.
-
+
- Helper to create monitored item for use with default DedicatedWorkshopUpdateMonitor implementation.
+ Character overlap is slightly larger than the house overlap, and checks whether any players, vehicles, animals, zombies, etc
+ are nearby. This is necessary because when house and characters were combined in a single physics query it was possible to
+ stand *just* close enough to step into the collider as it was spawned.
-
+
- For use with default DedicatedWorkshopUpdateMonitor implementation.
+ Called when a housing item is spawned or after moving an existing item.
-
+
- Get index within bounds assuming list is not empty.
+ Called before a housing item is destroyed or before moving a housing item.
-
+
- Add a new item using its default constructor.
+ Search grid for existing vertex at approximately equal position.
+ Considers adjacent grid cells if near cell boundary to avoid issues with floating point inaccuracy.
-
+