diff --git a/redist/redist-client-preview-publicized/Assembly-CSharp.dll b/redist/redist-client-preview-publicized/Assembly-CSharp.dll index 3e598e59..993b8ea2 100644 Binary files a/redist/redist-client-preview-publicized/Assembly-CSharp.dll and b/redist/redist-client-preview-publicized/Assembly-CSharp.dll differ diff --git a/redist/redist-client-preview-publicized/Assembly-CSharp.xml b/redist/redist-client-preview-publicized/Assembly-CSharp.xml old mode 100644 new mode 100755 index 7cd0ced4..3d8f4bea --- a/redist/redist-client-preview-publicized/Assembly-CSharp.xml +++ b/redist/redist-client-preview-publicized/Assembly-CSharp.xml @@ -1,19959 +1,19978 @@ - - - - Assembly-CSharp - - - - - Helper for drawing label outline/shadow so that we can easily change it. - - - - - Helper for drawing label outline/shadow so that we can easily change it. - - - - - If true, SizeOffset_X and SizeOffset_Y are used when image is available. - Defaults to false. - - - - - If useImageDimensions is on and image width exceeds this value, scale down - respecting aspect ratio. - - - - - If useImageDimensions is on and image height exceeds this value, scale down - respecting aspect ratio. - - - - - If true, NVGs work in third-person, not just first-person. - Defaults to false. - - - - - Type the annotated class was generated for. - - - - - Method the annotated method was generated for. - - - - - Exposes the same API as the older Block class used by existing netcode, but implemented using new bit reader/writer. - - - - - Last realtime a request was sent. - Used to rate-limit clientside. - - - - - Perform rate limiting and update timestamp. - - True if we can proceed with request. - - - - Do we think the local player is eligible to send request? - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Find difficulty asset (if valid) for navigation bound index. - - - - - Could potentially be reused generically. - - - - - When zombie falls outside the map it needs a replacement spawnpoint within the same navmesh area. - - - - - Find replacement spawnpoint for a zombie and teleport it there. - - - - - Kills night-only zombies at dawn. - - - - - Allows Unity events to call in airdrops. - - - - - Used by weather assets. - - - - - Distance inward from edge before intensity reaches 100%. - - - - - Alpha is 0.0 outside volume and 1.0 inside inner volume. - - - - - World space size of the box. - - - - - Half the world space size of the box. - - - - - 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. - - - - - World space extents of inner falloff box when falloffDistance is non-zero. - - - - - Local space size of inner falloff box when falloffDistance is non-zero. - - - - - Local space extents of inner falloff box when falloffDistance is non-zero. - - - - - World space radius of the sphere. - - - - - Local space radius of the sphere. - - - - - World space radius of inner falloff sphere when falloffDistance is non-zero. - - - - - Local space radius of inner falloff sphere when falloffDistance is non-zero. - - - - - Useful for code which previously depended on creating the Unity collider to calculate bounding box. - - - - - Called in the level editor during registraion and when visibility is changed. - - - - - Editor-only solid/opaque child mesh renderer object. - - - - - 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. - - - - - Camera does not rotate when the car rotates. - - - - - Camera rotates when the car rotates. - - - - - If hit from the left view rolls right, if hit from the right view rolls left. This may reduce motion - sickness for some players. - - - - - Rotate on all axes according to damage direction. This may induce motion sickness. - - - - - Unfortunately the version which added hitmarker style saved but didn't actually load (sigh). - - - - - 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. - - - - - Prior to 3.22.8.0 all scopes/optics had a base fov of 90 degrees. - - - - - 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) - - - - - If true, group member name labels fade out when near the center of the screen. - Defaults to true. - - - - - 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. - - - - - Controls whether hitmarkers are animated outward (newer) or just a static image ("classic"). - - - - - Determines how camera follows vehicle in third-person view. - - - - - Determines how camera follows aircraft vehicle in third-person view. - - - - - [0, 1] Blend factor between black and flashbang's desired color. - - - - - [0, 1] Multiplier for shake from . - - - - - Controls whether camera is constrained to roll-only or all axes. - - - - - Multiplier for flinch away from damage source in . - - - - - [0, 1] Intensity of FOV boost while sprinting. - - - - - [0, 1] Intensity of first-person motion caused by walking. - - - - - Invoked when custom UI colors are set. - - - - - Invoked when dark/light theme is set. - - - - - Number of times the player has clicked "Proceed" in the online safety menu. - - - - - If true, "don't show again" is checked in the online safety menu. - - - - - Prevents menu from being shown twice without a restart. - - - - - Nelson 2025-02-24: Warning that this is invoked *before* the item is actually removed from the items list. - (public issue #4894) - - - - 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 - - - - - Please use SearchContents instead! To perform an equivalent search: - • Set ItemType to type. - • Set IncludeEmpty to false. - • Set IncludeMaxQuality to true. - - - - - 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. - - - - - Please use SearchContents instead! To perform an equivalent search: - • Set AssetRef to id. - • Set IncludeEmpty to findEmpty. - • Set IncludeMaxQuality to findHealthy. - - - - - 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. - - - - - Invoked after any player's experience value changes (not including loading). - - - - - Invoked after any player's reputation value changes (not including loading). - - - - - Ugly hack for the awful skills enums. Eventually skills should be replaced. - - - - - Set every level to max and replicate. - - - - - Serverside only. - Called when skills weren't loaded (no save, or in arena mode), as well as when reseting skills after death. - - - - - Set this item as the dragging preview. - - - - - Standard shader mode changes are based on built-in StandardShaderGUI.cs - - - - - Does shader name match any of the standard shaders? - Standard, StandardSpecular and the Unturned "Decalable" variants all share nearly identical parameters. - - - - - Based on fixup routine in StandardShaderGUI SetMaterialKeywords. - - - - - Conditionally fixup older standard materials. - - True if material was edited. - - - - Parses mb:X from input string and filters assets using X master bundle. - - - - - 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). - - - - - Recycled list of assets with blueprints. - - - - - Subset of loadedBlueprints. - - - - - Center column. - - - - - Used by inventory item context menu to override which blueprints are shown. - - - - - Left-hand column. - - - - - Right-hand column. - - - - - Returns true if all filtered blueprints are craftable. (hacked-in for item action menu) - - - - - 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.) - - - - - Accessible for UseableHousingPlanner. - - - - - Get a blank status from the pool or construct a new one. - - - - - Barricade asset's EBuild included in saves to fix state length problems. (public issue #3725) - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Writable list of vehicle regions. Public add/remove methods should not be necessary. - - - - - Remove barricade instance on server and client. - - - - - Used by ownership change and damaged event to tell relevant clients the new health. - - - - - Legacy function for UseableBarricade. - - - - - Common code between dropping barricade onto vehicle or into world. - - - - - Spawn a new barricade attached to a vehicle and replicate it. - - - - - Spawn a new barricade and replicate it. - - - - - Not an instance method because structure might not exist yet, in which case we cancel instantiation. - - - - - Destroy barricades whose pivots are within sphere. - - - - - Clean up before loading vehicles. - - - - - 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. - - - - - Called before destroying a vehicle GameObject because storage needed to be ManualDestroyed. - - - - - Send all vehicle-mounted barricades to client. - Called after sending vehicles so all plant indexes will be valid. - - - - - Original server-only version that does not replicate changes to clients. - - - - - Only used by plugins. Replicates state change to clients. - - - - - Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting. - - - - - Maps prefab unique id to inactive list. - - - - - 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! - - - - - +0 = BarricadeDrop - +1 = root transform - +2 = Interactable (if exists) - - - - - 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. - - - - - Not an actual Steam ID or BattlEye ID, instead this is used to map player references to and from BE. - - - - - True for offline or listen server host. - - - - - Next time method is allowed to be called. - - - - - Number of times client has tried to invoke this method while rate-limited. - - - - - Get Steam item definition ID equipped for given vehicle. - - 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. - - - - - Add a recent ping sample to the average ping window. - Updates ping based on the average of several recent ping samples. - - 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. - - True if address was available, and not flagged as a relay server. - - - - See above, returns zero if failed. - - - - - Get real address of remote player NOT a relay server. - - Null if address was unavailable. - - - - Get string representation of remote end point. - - Null if address was unavailable. - - - - Players can set a "nickname" which is only shown to the members in their group. - - - - - 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) - - - - - Component for the tactical laser attachment's red dot. - Resizes itself per-camera to maintain a constant on-screen size. - - - - - Used to tune the scale by distance so that far away laser is not quite as comically large. - - - - - This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius. - - - - - Load {Language}.dat and/or English.dat from folder path. - - - - - Note: as of 2025-04-23 this *can* be null. (E.g., audio-only effects.) - - - - - If set, use OneShotAudioParameters to play this audio. - - - - - If true the music option is respected when this effect is used by ambiance volume. - - - - - In multiplayer the effect will be spawned for players within this radius. - - - - - 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. - - - - - Redirectors are in the Vehicle category so that legacy vehicle IDs point at the redirector. - - - - - Vehicle to use when attempting to load or spawn this asset. - - - - - 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. - - - - - If set, overrides the default random paint color when spawning a new vehicle. - Optionally used to preserve colors of vehicles in spawn tables. - - - - - Invoked prior to built-in death logic. - - - - - Event for plugins when player dies. - - - - - Invoked after player finishes respawning. - - - - - Tracks this player as an aggressor if they were recently an aggressor or if they haven't been attacked recently. - - 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. - - - - - Set legs broken state and replicate to owner if changed. - - - - - Add to or subtract from stamina level. - Does not replicate the change. - - - - - Add to or subtract from stamina level. - Does not replicate the change. - - - - - Called from the server to modify stamina. - - - - - Add to or subtract from stamina level on the client and server. - - - - - Called from the server to induce a hallucination. - - - - - Add to or subtract from hallucination level on the client. - - - - - Add to or subtract from warmth level. - Does not replicate the change. - - - - - Called from the server to modify warmth. - - - - - Add to or subtract from warmth level on the client and server. - - - - - Add to or subtract from oxygen level. - Does not replicate the change. - - - - - Add to or subtract from health level. - Replicates change to owner. - - - - - Add to or subtract from food level. - Replicates change to owner. - - - - - Add to or subtract from water level. - Replicates change to owner. - - - - - Add to or subtract from virus level. - Replicates change to owner. - - - - - Used by plugins to respawn the player bypassing timers. Issue #2701 - - - - - Used to refill all client stats like stamina - - - - - Used by UI. True when underwater or inside non-breathable oxygen volume. - - - - - This value is confusing because in the level editor it is the normalized radius, but in-game it is the radius. - - - - - No longer used in vanilla. Kept in case plugins are using it. - - - - - No longer used in vanilla. Kept in case plugins are using it. - - - - - No longer used in vanilla. Kept in case plugins are using it. - - - - - Actual internal implementation. - - - - - World to local bounds only works well for axis-aligned icons. - - - - - Unity's Camera.orthographicSize is half the height of the viewing volume. Width is calculated from aspect ratio. - - - - - Fading in. - - - - - Finished fading in. - - - - - Fading out. - - - - - Finished fading out. - - - - - Extensions to the built-in Input class. - - - - - Wrapper for Input.GetKey, but returns false while typing in a uGUI text field. - - - - - Wrapper for Input.GetKeyDown, but returns false while typing in a uGUI text field. - - - - - Wrapper for Input.GetKeyUp, but returns false while typing in a uGUI text field. - - - - - 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. - - - - - Original type on the Russia map which requires a mask with filters. - - - - - Requires a mask with filters and full body suit. - - - - - 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. - - - - - 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. - - - - - 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. - - - - - Rate of depletion from gasmask filter's quality/durability. - Defaults to 0.4 to preserve behavior from before adding this property. - - - - - This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius. - - - - - 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. - - - - - Same description as . - - - - - Same description as . - - - - - Same description as . - - - - - Get real IPv4 address of remote player NOT the relay server. - - True if address was available, and not flagged as a relay server. - - - - See above, returns zero if failed. - - - - - 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. - - - - - Register a location as having something built there soon. - - Unique handle to later finish the request. - - - - Is a location available to build at (i.e. no pending builds)? - - False if there are any outstanding build requests for given location. - - - - Notify that a previously registered build has been completed. - - 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. - - - - - Resolve table as items and grant random number to player. - - - - - Resolve table as items and grant random number to player. - - - - - Enumerate random number of valid assetIDs. - - - - - Converts Steam BBcode tokens into widgets displayable using Glazier UI. - - - - - 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. - - - - - Vanilla maximum level. - - - - - If set, maximum skill level attainable through gameplay. - - - - - Multiplier for XP upgrade cost. - - - - - Get maximum level, or maxUnlockableLevel if set. - - - - - - - Implemented by components the player can talk with using DialogeAssets. (e.g., InteractableObjectNPC) - - - - - 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. - - - - - Get a net ID that can be used with GetDialogueTargetFromNetId to resolve IDialogueTarget in multiplayer. - - - - - Called on server to test whether object conditions are met. - - - - - Called on server to find the start of conversation dialogue asset. - - - - - Used in error messages. - - - - - Called on client to format in UI. - - - - - 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. - - - - - 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. - - - - - Is audio muted because loading screen is visible? - - - - - Player's volume multiplier from the options menu. - - - - - Player's unfocused volume multiplier from the options menu. - - - - - Mute or un-mute audio depending whether camera is valid. - - - - - Synchronize AudioListener.volume with Unturned's parameters. - - - - - 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. - - - - - Realtime since performedRealtime. - - - - - if(myRateLimit.throttle(1.0)) - return; // less than 1s passed - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - 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. - - - - - Kept for plugin backwards compatibility. - This one is problematic because on the client physics can move items between regions. - - - - - Find physically simulated items within radius. - - - - - Despawn any old items in the current despawn region. - - True if the region had items to search through. - - - - Attempt to respawn an item in the current respawn region. - - True if an item was succesfully respawned. - - - - Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting. - - - - - Instantiate at least this many items per frame even if we exceed our time budget. - - - - - Sort servers by name A to Z. - - - - - Sort servers by name Z to A. - - - - - 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. - - - - - Steam query port. Zero for servers using Fake IP. - - - - - Name updated from SteamServerAdvertisement. - - - - - Short description updated from SteamServerAdvertisement. - - - - - Small icon updated from SteamServerAdvertisement. - - - - - Used by UI to track whether it's been added/removed. - - - - - 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. - - - - Restore a removed bookmark. - - - - - Static functions for creating monitor instance on server. - - - - - Entry point called by dedicated server after loading level. - - - - - Create vanilla update monitor that watches for changes to workshop level file and any other mods. - - - - - Helper to get updated timestamp from workshop items loaded by DedicatedUGC. - - - - - Helper to create monitored item for use with default DedicatedWorkshopUpdateMonitor implementation. - - - - - For use with default DedicatedWorkshopUpdateMonitor implementation. - - - - - Get index within bounds assuming list is not empty. - - - - - Add a new item using its default constructor. - - - - - Apply shader name redirects until a final name is found, - and then load shader for compatible version of Unity. - - - - - Apply shader name redirects until a final name is found. - Used to fix renamed shaders loaded from old asset bundles. - - - - - Names of older shaders mapped to their renamed counterparts. - Used to fix shaders loaded from old asset bundles. - - - - - Delete all savedata folders for player's characters. - - - - - Number of Attack_# animations. - - - - - Number of Eat_# animations. - - - - - Number of Glance_# animations. - - - - - Number of Startle_# animations. - - - - - Maximum distance on the XZ plane. - - - - - Maximum distance on the XZ plane when attacking vehicles. - - - - - Maximum distance on the Y axis. - - - - - Minimum seconds between attacks. - - - - - Temporary until something better makes sense? For Spyjack. - - - - - If true, animal won't start moving until startle animation finishes. - - - - - Allows mappers to bulk replace assets by listing pairs in a text file. - https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/2275 - - - - - If a redirector for oldGuid exists, returns target asset. Otherwise null. - - - - - Component in the root Menu scene. - Additively loads decoration levels without modifying main scene. - - - - - Prevents static member from being initialized during MonoBehaviour construction. (Unity warning) - - - - - Nelson 2024-02-06: when looking into resolving public issue #3703 I figured since there is a common behavior - between InteractableObjectQuest, InteractableObjectNote, and InteractableObjectDropper (in that they all - request the server to do X we may as well support a "mod hook" that works with all three. - - - - - Controls where attachments looks for ADS alignment transform. - - - - - Look for aim alignment transform relative to sight model. - Defaults to Model_0/Aim. - - - - - Look for aim alignment transform relative to equipable prefab. - Requires setting AimAlignment_Path. - - - - - Factor e.g. 2 is a 2x multiplier. - Prior to 2022-04-11 this was the target field of view. (90/fov) - - - - - Zoom factor used in third-person view. - - - - - Whether main camera field of view should zoom without scope camera / scope overlay. - - - - - If true, scale scope overly by 1 texel to keep "middle" pixel centered. - - - - - Controls where to find AimAlignmentTransformPath. - - - - - If set, find this transform relative to AimAlignmentTransformOwner. - - - - - Position offset relative to Aim transform or transform specified by aimAlignmentTransformPath. - - - - - [0, 1] local distance from center to start of line. - - - - - [0, 1] local width of horizontal line. - - - - - Whether line/number are on left or right side of the center line. - - - - - If true, text label for distance is visible. - - - - - Optional component on Turret_# GameObject for modding UnityEvents. - - - - - Optional collider matching the player capsule to prevent short vehicles (e.g. bikes) from clipping into walls. - - - - - Displays a single random item. Placed under the other main menu buttons. - - - - - Hide existing icon until refresh. - Experimented with doing this for every refresh, but it looks bad in particular for hotbar. - - - - - Name of the asset bundle. - - core.content - - - - Path within the asset bundle. - - - - - Used to test whether player can fit in a space. - Includes terrain because tested capsule could be slightly underground, and clip to prevent exploits at sky limit. - - - - - Used for third-person camera in vehicle. - Does not include resource layer because attached barricades are put on that layer. - Barricades layer itself is included to prevent looking inside player bases. - - - - - Used to test whether player can enter a vehicle. - Does not include resource layer because attached barricades are put on that layer. - - - - - 2023-02-02: adding more layers since splatter can be attached to them now. - parent should only be set if that system also calls ClearAttachments, otherwise attachedEffects will leak memory. - - - - - Layer mask for CharacterController overlap test. - - - - - Layer mask for CharacterController overlap test while inside landscape hole volume. - - - - - Lightning strike raycasts from sky to ground using this layer mask. - - - - - Invoked when component is enabled and when the game object is activated. - - - - - Invoked when component is disabled and when the game object is deactivated. - Note that if the component or game object spawn deactivated this will not be immediately invoked. - - - - - Allows Unity events to print messages to the log file for debugging. - - - - - Text to use when PrintInfo is invoked. - - - - - Every time the inventory changes this number is incremented. - While a little messy, the idea is to prevent inventory checks from happening every frame. - - - - - Should be called every time something changes in the inventory. - - - - - Helper to prevent checking the inventory every frame for systems that don't use events. - - - - - Did owner call askInventory yet? - Prevents duplicate tell_X RPCs from being sent to owner prior to initial sync. - Ideally should be cleaned up with netcode refactor. (Client should not need to ask server for initial state.) - - - - - Intended as nearly a drop-in replacement for . - - - - - Intended as nearly a drop-in replacement for . - - - - - Intended as nearly a drop-in replacement for . - - - - - Intended as nearly a drop-in replacement for . - - - - - Intended as nearly a drop-in replacement for . - - - - - Intended as nearly a drop-in replacement for . - This variant wraps FindFirstItemByAsset and manages the results list for you. - Only use result if true is returned, otherwise it's invalid. - - - - - Intended as nearly a drop-in replacement for . - This variant wraps FindFirstItemByAsset and manages the results list for you. - - - - - Helper for tryAddItemAuto. - - - - - Given an item coordinate (page, x, y) could a new item take the place of an old (existing) item without - overlapping other item(s) space? Always true for equipment slots (page less than SLOTS). - For example if oldSize is (1, 2) rot 0, and newSize is (2, 1) rot 1, then they can swap. - - - - - Swap coordinates of two existing items. - Rotation is provided to handle differently shaped items e.g. a 1x2 item with a 2x1 item. - - - - - Swap coordinates of two existing items. - Rotation is provided to handle differently shaped items e.g. a 1x2 item with a 2x1 item. - - - - - Called from player movement to close storage that has moved away. - - - - - Serverside open a storage crate and notify client. - - - - - Serverside grant access to car trunk storage and notify client. - - - - - Serverside revoke trunk access and notify client. - - - - - Called on both client and server, as well as by storage itself when destroyed. - - - - - Please use SearchContents instead! To perform an equivalent search: - • Set IncludeEquipmentSlots to false. - • Set IncludeActiveStorageContainer to false. - • Set ItemType to type. - • Set IncludeEmpty to false. - • Set IncludeMaxQuality to true. - OR use the nearly drop-in replacement FindItemsByType. - - - - - Please use SearchContents instead! To perform an equivalent search: - • Set IncludeEquipmentSlots to false. - • Set IncludeActiveStorageContainer to false. - • Set ItemType to type. - • Set IncludeEmpty to false. - • Set IncludeMaxQuality to true. - • Set AnyCaliberIds to calibers. - • Set IncludeUnspecifiedCaliber to allowZeroCaliber. - OR use the nearly drop-in replacement FindAttachmentsByCaliber. - - - - - Please use SearchContents instead! To perform an equivalent search: - • Set IncludeEquipmentSlots to false. - • Set IncludeActiveStorageContainer to false. - • Set ItemType to type. - • Set IncludeEmpty to false. - • Set IncludeMaxQuality to true. - • Set CaliberId to caliber. - • Set IncludeUnspecifiedCaliber to allowZeroCaliber. - OR use the nearly drop-in replacement FindAttachmentsByCaliber. - - - - - Please use SearchContents instead! To perform an equivalent search: - • Set IncludeEquipmentSlots to false. - • Set IncludeActiveStorageContainer to false. - • Set AssetRef to id. - • Set IncludeEmpty to findEmpty. - • Set IncludeMaxQuality to findHealthy. - OR use the nearly drop-in replacement FindItemsByAsset. - - - - - Please use SearchContents instead! To perform an equivalent search: - • Set IncludeEquipmentSlots to true. - • Set IncludeActiveStorageContainer to true. - • Set MaxResultsCount to 1. - • Set AssetRef to id. - • Set IncludeEmpty to false. - • Set IncludeMaxQuality to true. - OR use the nearly drop-in replacements FindFirstItemByAsset or HasItemByAsset. - - - - - Filter for whether the Permanent Gold Upgrade DLC is required to join a server. - - - - - All servers pass the filter. - - - - - Only non-gold servers pass the filter. - - - - - Only gold servers pass the filter. - - - - - Can be added to any GameObject to listen for the Event NPC reward type. - - - - - *_ID configured in NPC rewards list. - - - - - If true the event will only be invoked in offline mode and on the server. - - - - - Invoked when NPC global event matching EventId is processed. - - - - - Invoked when timer expires. - - - - - Number of seconds to use when SetDefaultTimer is invoked. - - - - - Should timer loop when SetDefaultTimer is invoked? - - - - - Stop pending timer from triggering. - - - - - Handle to stop the coroutine. - - - - - Horizontal distance before road begins tapering off into the terrain. - - - - - Size along the "up" axis. - - - - - Distance along the terrain surface normal to move each road vertex. - - - - - Multiplier for how far along the road before texture repeats. - - - - - Defaults to None, in which case the backwards-compatible chart classification is used. - - - - - Physics material to assign to road colliders. - Replaces the "concrete" toggle in the older editor. - - - - - Can be added to Vehicle Turret_# GameObject to receive events. - - - - - Invoked when turret gun is fired. - - - - - Invoked when turret gun begins reload sequence. - - - - - Invoked when turret gun begins hammer sequence. - - - - - Invoked when turret gun begins aiming. - - - - - Invoked when turret gun ends aiming. - - - - - Invoked when turret gun controlled by a local player begins aiming. - - - - - Invoked when turret gun controlled by a local player ends aiming. - - - - - Invoked when turret gun controlled by a local player begins inspecting attachments. - - - - - Invoked when turret gun controlled by a local player ends inspecting attachments. - - - - - Invoked when any player enters the seat. - - - - - Invoked when any player exits the seat. - - - - - Invoked when a locally controlled player enters the seat. - - - - - Invoked when a locally controlled player exits the seat. - - - - - Nelson 2025-06-19: using server-provided connection details is useful because - it can find its public IP (e.g., joining by LAN and sharing WAN IP), and/or - its fake IP (again when joining by LAN). - - - - - Is client UTC time within this time range? - - - - - Is server UTC time within this time range? - - - - - Adds custom data to base physics material asset. - For example how a vanilla material should respond to custom laser guns. - - - - - Number of players inside the navmesh when the beacon was placed. - Clamped to 1 if ShouldScaleWithNumberOfParticipants is false. - - - - - Crossover from Dying Light. Only spawns during night. Explodes into fire at dawn. - - - - - Crossover from Dying Light. Only spawns during night. Explodes into fire at dawn. - - - - - Elver endgame boss with reduced bullet damage and wind zombie stomping attacks. - - - - - Kuwait final boss with increased rock throwing, damage players inside vehicle (turrets), and flashbangs. - - - - - Buak boss types have a red-eyed flashbang effect. - - - - - Is this one of the Dying Light volatile zombies? Only spawns during night. Explodes into fire at dawn. - - - - - Does this have the BOSS_* prefix? - - - - - Same as FindChildRecursive, but skip specific child. - - - - - Editor-only helper to read all text/dialogue. - - - - - Version before named version constants were introduced. (2023-11-07) - - - - - Delegate not reset when level reset. - - - - - Delegate not reset when level reset. - - - - - Delegate not reset when level reset. - - - - - Delegate not reset when level reset. - - - - - Number of in-game days this world has run. - Incremented each time night ends. - Saved between sessions. - - - - - Weather has not been decided yet. Level might not have any enabled. - - - - - Weather has been forecast. Timer counts down until activation. - - - - - Weather is now active. Timer counts down until deactivation. - - - - - Weather is active. Will not deactivate naturally. - Prevents loaded perpetual weather from deactivating. - - - - - Determines which weather can naturally be scheduled in this level. - Includes default rain and snow for older levels. - - - - - Seconds until weather activates. - - - - - Seconds until weather deactivates. - - - - - Forecast or active weather. - - - - - Set weather active and disable scheduling. - - - - True if given weather has config. - - - - Cancel scheduled weather and re-evaluate on next update. - - - - - Cancel active weather and prevent next weather from being scheduled. - - - - - Get weather override for the currently loaded level. - Warning: this is kept for backwards compatibility, whereas newer maps will set LevelAsset.perpetualWeather. - - - - - Assign schedulableWeathers array according to level asset or legacy lighting settings. - - - - True if perpetual weather was enabled, false otherwise. - - - - Used by dawn and dusk skins which pull per-level lighting colors. - - - - - Note: unfortunately it appears the stupid skin system always instantiated materials, but never destroys - them... will need to clean this up, but it will be tricky because the game does not hold a reference to them. - - - - - If true, sets the Magazine attachment hook inactive while this skin is applied. (guns only) - - Nelson 2025-03-10: Adding this to address mismatched Ace bullets with certain skins. (public issue #4923) - It should be fine for vanilla guns because there shouldn't be assumptions about Magazine enable/disable, - but modded guns may have different expectations (particularly with GunAttachmentEventHook). - - - - - Used by melee skins to override impact sound. - - - - - Restricts which items can be crafted. - - - - - Restrict blueprints that consume these items. - - - - - Restrict blueprints that generate these items. - - - - - If false, blueprints on vanilla/core/built-in items are not allowed. Defaults to true. - - - - - If null, use index instead. - - - - - Restrict specific blueprints. - - - - - Thanks to Glenn Fiedler for this RK4 implementation article: - https://gafferongames.com/post/integration_basics/ - - - - - Higher values return to the target position faster. - - - - - 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?) - - - - - Absolute path to project directory, e.g. C:/U3 - - - - - Overrides breathability for example in a deep cave with no oxygen, or near a deep sea plant that provides oxygen. - - - - - Find highest alpha breathable volume overlapping position. - - - - - Find highest alpha non-breathable volume overlapping position. - - - - - Unlike format, this returns null if key doesn't exist. - - - - - This overload supports legacy Reward_# format. - - - - - This overload doesn't support legacy Reward_# format. - - - - - 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. - - - - - Speed to launch players away from blast position. - - - - - Can be added to any GameObject to receive weather events: - - Day/Night - - Full Moon - - Rain - - Snow - - - - - Invoked when night changes to day. - - - - - Invoked when day changes to night. - - - - - Invoked when a zombie full-moon event starts. - - - - - Invoked when a zombie full-moon event finishes. - - - - - Invoked when rain starts to fall. - - - - - Invoked when rain finishes falling. - - - - - Invoked when snow starts to fall. - - - - - Invoked when snow finishes falling. - - - - - Registers renderers with DynamicWaterTransparentSort manager. - - - - - In vanilla this field is ONLY used for the per-character saves on servers. - If that changes check that it does not affect the savedata options. - - - - - 20-byte SHA1 salted hashes of client's hardware ID(s). - Providing multiple HWIDs makes it more difficult to bypass HWID bans because spoofing a single component - only changes one of the bans. For example spoofing the MAC address will not spoof the Windows GUID. - - Randomized if system did not support hwid, or perhaps player is cheating. - Should not be called on the client side, but just in case there is a default zeroed array. - - - - - Ignore requests to kick me in debug mode. :) - Steam ID may not have been authenticated yet here which may seem like a security risk, but fortunately that - would get caught when Steam auth ticket response is received. - - - - - Array of 20-byte SHA1 hashes. - - - - - Not using rate limit attribute because this is potentially called for hundreds of structures at once, - and only admins will actually be allowed to apply the transform. - - - - - See BarricadeRegion.FindBarricadeByRootFast comment. - - - - - For code which does not know whether transform exists and/or even is part of a house. - See BarricadeRegion.FindBarricadeByRootFast comment. - - - - - Steam APIs returned uint32 IPv4 addresses in the past, so Unturned code depends on them in some places. - Ideally these uses should be updated for IPv6 support going forward. - For the meantime this method converts from the new format to the old format for backwards compatibility. - - - - - Assets cannot be loaded from Resources during static initialization, so this reference defers the load until - the first time user tries to use it. - - - - - Material on Model_0, the low-speed actual blade. - - - - - Renderer on Model_1. - - - - - Material on Model_1, the high-speed blurred outline. - - - - - transform's localRotation when the vehicle was instantiated. - - - - - Rigidbody component on the root game object. - - - - - If true, set sharedMaterial. If false, set material. - - - - - Calculated speed of this track. Used by some wheels. - - - - - Temporary array for use with physics queries. - - - - - Temporary list for gathering materials. - - - - - Precursor to Net ID. Should eventually become obsolete. - - - - - Asset ID. Essentially obsolete at this point. - - - - - Used to restore vehicle materials when changing skin. - - - - - Only used by trains. Constrains the train to this path. - - - - - Unfortunately old netcode sends train position as a Vector3 using the X channel, but new code only supports - [-4096, 4096) so we pack the train position into all three channels. Eventually this should be cleaned up. - - - - - Nelson 2024-06-24: When first implementing batteries there was only the vanilla battery item, and it was - fine to delete it when the charge reached zero. This may not be desirable, however, so zero now represents - no battery item is present, and one represents the battery is completely drained but still there. - - - - - Is this vehicle inside a safezone? - - - - - Duration in seconds since this vehicle entered a safezone, - or -1 if it's not in a safezone. - - - - - Should askDamage requests currently be ignored because we are inside a safezone? - - - - - Nelson 2024-06-24: This property is confusing, especially with isEnginePowered, but essentially represents - starting the engine ignition when a player enters the driver's seat. If true, there's a driver, there was - sufficient battery to start (or battery not required), and the engine wasn't underwater. - - - - - Doesn't imply the vehicle *uses* batteries, only that it contains a battery item with some charge left. - - - - - Doesn't imply the vehicle *uses* batteries, only that it contains a (potentially uncharged) battery item. - - - - - Nelson 2024-11-13: Adding this primarily to indicate whether a vehicle was spawned by the level versus - placed by a player or bought from a vendor. This way if the number of "naturally"-spawned vehicles is below - a certain threshold the level can spawn more. (e.g., a server where players have hoarded a bunch of - vendor-purchased vehicles and no default vehicles are left for new players.) - - Only available on the server. - Defaults to true for old saves to prevent suddenly spawning a bunch more vehicles. - - - - - Whether the player can shoot their equipped turret. - - - - - Do any of the passenger seats have a player? - - - - - When the server saves it doesn't include any cleared vehicles. - - - - - If true, the vehicle will be destroyed at the end of the frame. Set before OnPreDestroyVehicle. - Used to reject requests to enter the vehicle on the same frame it's being destroyed. - - - - - Magnitude of rigidbody velocity, replicated by current simulation owner. - - - - - Rigidbody velocity along forward axis, replicated by current simulation owner. - - - - - Replicated by current simulation owner. Target velocity used, e.g., for helicopter engine speed. - - - - - [0, 1] If forward velocity is greater than zero, get normalized by target forward speed. If less than zero, - get normalized by target reverse speed. Result is always positive. - - - - - Animated toward ReplicatedForwardVelocity. - - - - - Animated toward ReplicatedVelocityInput. - - - - - [-1.0, 1.0] Available on both client and server. - - - - - Animated towards replicated steering angle. Used for steering wheel and front steering column. - Non-simulating wheels (e.g., car driven by remote client) use this as steering angle multiplied by their - per-wheel . - - - - - Front steering column of bicycles and motorcycles. - - - - - If true, server should replicate latest state to clients. - - - - - Used by several engine modes to represent an interpolated velocity target according to input. - - - - - Set from inputTargetVelocity then multiplied by any factors which shouldn't affect the player's "target" - speed ike boatTraction. - - - - - Vehicles with buoyancy interpolate this value according to whether it's in the water, and multiply - boat-related forces by it. - - - - - Rigidbody on the Vehicle prefab. - (not called "rigidbody" because as of 2024-02-28 the deprecated "rigidbody" property still exists) - - - - - Primarily for backwards compatibility with plugins. Previously, multiple "updates" could be queued per - vehicle and sent to clients. This list was public, unfortunately, so plugins may rely on submitting vehicle - updates. After making it obsolete each vehicle can only be flagged as needing a replication update, and - this is reset after each server replication update. - - - - - Is player currently allowed to repair this vehicle? - - - - - Give battery item to player and set battery charge to zero. - - - - - Nelson 2024-06-24: Previously, this wouldn't give an item to the player if the quality was zero. Now it - trusts the caller to validate we have a battery item to give, and respects . - - - - - Can a tire item be used with this vehicle? - - - - - Find the index of the wheel collider that contains this position. - - - - - Find the index of the wheel collider closest to this position, or -1 if not near any. - - - - - Called during simulate at fixed rate. - - - - - Is a given player allowed access to this vehicle? - - - - - If true, sentry ignores this vehicle early in target scanning. - Friendly if locked by owner/group of sentry, or driven by owner/group of sentry. - - - - - Average vehicle-space position of wheel bases. - - - - - Turn taillights on/off depending on state. - - - - - This check should really not be necessary, but somehow it is a recurring issue that servers get slowed down - by something going wrong and the vehicle exploding a billion times leaving items everywhere. - - - - - VehicleManager expects this to only find the seat, not add the player, - because it does a LoS check. - - - - - Call on the server to empty the vehicle of passengers. - - - - - Kicks them out even if there isn't a good spot. Used when killing the occupant. - - True if player is seated, false otherwise. - - - - Can a safe exit point currently be found? - - Called when considering to add a new passenger to prevent players from entering - a vehicle that they wouldn't be able to exit properly. - - - - - Could a player capsule fit in a given exit position? - - - - True if anything was hit. - - - - Raycast along a given direction, penetrating through barricades attached to THIS vehicle. - Returns point at the end of the ray if unblocked, or a safe (radius) distance away from hit. - - - - - Fallback if there are absolutely no good exit points. - Sets point and angle with a normal player spawnpoint. - - Once vehicle is completely surrounded there is no nice way to pick an exit point. Finding - a point upwards is abused to teleport upward into bases, finding an empty capsule nearby is - abused to teleport through walls, so if we're sure there isn't a nice exit point we can - fallback to teleporting them to a safe spawnpoint. - - - - True if we can safely exit. - - - - Initially use tryGetExit to find a safe exit, but if one isn't available then fallback to getExitSpawnPoint. - - - - - Dedicated server simulate driving input. - - - - - -1 is reverse. - 0 is neutral. - +1 is index 0 in gear ratios list. - - - - - Engine RPM replicated by current simulation owner. - - - - - Animated toward ReplicatedEngineRpm. - - - - - Called when engine RPM exceeds threshold and there are more gears available. - Purpose is to skip gear numbers that don't bring engine RPM within threshold (if possible). - - - - - Called when engine RPM is below threshold and there are more lower gears available. - Purpose is to skip gear numbers that don't bring engine RPM within threshold (if possible). - - - - - Client simulate driving input. - - - - - Nelson 2025-05-05: ran into a bug where our manual OnUpdate is called before Unity calls Start! - - - - - Nelson 2025-05-02: keeping the previous comment from 2020-11-26 here. At first I wondered if 24 vehicles - wasn't enough to properly test, but even with a higher vehicle count it can seemingly be *slower* to - call Update manually. That said, calling Update manually does give us the option to time-slice vehicle - updates. On the client and singleplayer we now update vehicles outside render distance at a lower - frequency which saves ~0.1 ms per frame on my PC. - - 2020-11-26 experimented with dispatching all vehicle updates from C# in VehicleManager because they make up - a significant portion of the MonoBehaviour Update, but the savings on my PC with 24 vehicles on PEI was - minor. Not worth the potential troubles. - - - - - Nelson 2025-04-22: it hopefully goes without saying the bicycle pedals are janky as heck, I'm just separating - out the Update method to make profiling it easier. - - - - - Nelson 2025-04-22: this should ideally be moved into FixedUpdate, incorrect to run in Update. - - - - - Nelson 2025-04-22: this should ideally be moved into FixedUpdate, incorrect to run in Update. - - - - - Update whether this vehicle is inside a safezone. - If a certain option is enabled, unlock after time threshold is passed. - - - - - Can be called without calling init. - - - - - Called after initializing vehicle. - - - - - Makes the collision detection system ignore all collisions between this vehicle and the given colliders. - Used to prevent vehicle from colliding with attached items. - - - - - Used to disable collision between skycrane and held vehicle. - - - - - Transform used for exit physics queries. - - - - - Find collider with the largest volume to use for exit physics queries. - - - - - Set material on DepthMask child renderer responsible for hiding water when interior of vehicle is submerged. - - - - - Skin material does not always need to be destroyed, so this is only valid if it should be destroyed. - - - - - Materials that should be destroyed when this vehicle is destroyed. - - - - - Handles to unregister from DynamicWaterTransparentSort. - - - - - Materials to set _PaintColor on. - - - - - Materials to move UVs in sync with wheels. - - - - - Time.time decayTimer was last updated. - - - - - Seconds since vehicle was interacted with. - - - - - Fractional damage counter. - - - - - transform.position used to test whether vehicle is moving. - - - - - Text from *.dat localization file. - - - - - Older *.content asset bundle reference. - - - - - Newer *.masterbundle reference. - - - - - Optional URL to open in web browser. - - - - - Whether audio source should loop. - - - - - Append suffix to name, or if name contains a '.' insert it before. - - - - - Vendor asset that owns this buy/sell record. - - - - - If not null, replaces item/vehicle description. - - - - - Allows Unity events to startle nearby animals and zombies. - - - - - Transform to spawn the alert at. - If unset, this game object's transform will be used instead. - - - - - If true, find the nearest player within ScanForPlayersRadius, and use the player's position as the alert - origin. - - - - - If UseScanForPlayers is enabled and this is true, an alert is broadcast even if no nearby player was found. - Otherwise, alert is ignored if no nearby player was found. - - - - - Used in a test scene to quickly test whether pooled components are cleaned up. - - - - - Invoked after any player's stance changes (not including loading). - - - - - Stance to fit available space when loading in. - - - - Distance zombies can detect this player within. - - - - Older, cached version of areEyesUnderwater. - - - - - Return false if there are any external restrictions (e.g. reloading, handcuffed) preventing climbing. - - - - - Test whether bottom of controller is currently inside a water volume. - - - - - Test whether viewpoint is currently inside a water volume. - - - - - Test whether body is currently inside a water volume. - Enters the swimming stance while true. - - - - - Draw debug capsule matching the player size. - - - - - Draw standing-height debug capsule matching the player size. - - - - - Is there enough height for our capsule at a position? - - - - - Could a standing player capsule fit at the given position? - - - - - Could a crouching player capsule fit at the given position? - - - - - Could a prone player capsule fit at the given position? - - - - - Could a standing player capsule teleport to the given position? - - - - - Is there any compatible stance that can fit at position? - - - - - Using our capsule's current height would there be enough space at a given position? - - - - - Does capsule have appropriate clearance for a pending height change? - - - - - Replicate stance to clients. - - - - - Regular interact ray still hits the ladder, but we only allow climbing within a smaller range to make its - teleport less powerful. - - - - - Ladder forward ray is 0.75m, so we move slightly less than that away from the ladder. - - - - - Export JSON report of Unturned's assets for economy usage. - - - - - If true, contains child transform named Effect for mythical attachment. - - - - - Attachment item IDs that get skinned specially. - - - - - Is there a fallback material for attachments that respects their main metallic areas? - - - - - Is there a fallback material without any special features? - - - - - Is there a replacement mesh? - - - - - Dawn and dusk skins pull per-lighting colors. - - - - - Pool lists to avoid loopback re-using an existing list. - Callers do not need to manually return lists because they are reset before each frame. - - - - - Exit button only needs to wait for timer in certain conditions. - - - - - Does the item being placed count as a "trap" for the purposes of vehicle placement restrictions? - - - - - Should placement ghost material change be done recursively? - e.g. Sentry has a deep hierarchy of meshes. - - - - - Given path to a workshop map, try to find its /Bundles folder. - - - - - Given path to a workshop map, try to find its /Content folder. - - - - - Maps on the workshop are a root folder named after the published file id, containing - the map folder itself with the level name. In order to load the map's bundles and content - properly we need to find the nested Bundles and Content folders. - - - - - 2023-02-28: note order is important because BarricadeManager saves as a byte! - - - - - Invoked after tellGesture is called with the new gesture. - - - - - Empty transform created at the world origin. - The first-person Viewmodel transform is re-parented to this. - - - - - Child of the first-person skull transform. - - - - - Camera near world origin masking the first-person arms and weapon. - - - - - Used by gun to hide viewmodel arms while aiming 2D scope, and by chainsaw to shake the viewmodel. - - - - - Used to hide viewmodel arms while using a vehicle turret gun. - - - - - Offsets main camera and aim rotation while aiming with a scoped gun. - - - - - Animated toward viewmodelSwayMultiplier. - - - - - Small number (0.1) while aiming, 1 while not aiming. - Reduces viewmodel animation while aiming to make 3D sights more usable. - - - - - Animated toward viewmodelOffsetPreferenceMultiplier. - - - - - 0 while aiming, 1 while not aiming. - Players can customize the 3D position of the viewmodel on screen, but this needs - to be blended out while aiming down sights otherwise it would not line up with - the center of the screen. - - - - - If true, use the scope aim fov instead of non-scope fov. - Useful for players with high (e.g. 160) fov to be able to use scopes. - - - - - Animated toward viewmodelCameraLocalPositionOffset, recoil, and bayonet offsets. - - - - - Abruptly offset when gun is fired, then animated back toward zero. - - - - - Abruptly offset when gun is fired, then animated back toward zero. - x = pitch, y = yaw, z = roll - - - - - Abruptly offset when bayonet is used, then animated back toward zero. - - - - - Animated while player is moving. - - - - - Blended from multiple viewmodel parameters and then applied to viewmodelCameraTransform. - - - - - Smoothing adds some initial blend-in which felt nicer for explosion rumble. - - - - - Meshes are disabled until clothing is received. - - - - - Target viewmodelCameraLocalPosition except while driving. - - - - - Animated while playing is moving. - x = pitch, y = roll - - - - - Offset when player lands. - - - - - Used to measure change in pitch between frames. - - - - - Used to measure change in yaw between frames. - - - - - Animated according to change in pitch/yaw input between frames so that gun rolls slightly while turning. - - - - - Animated according to change in item position between frames so that animations have more inertia. - - - - - Degrees per meter of item distance travelled. - Pitch is driven by vertical displacement, yaw and roll are driven by horizontal. - x = pitch, y = yaw, z = roll - - - - - In third-person this delays leaning in case player only wanted - to switch camera side without leaning. - - - - If true, include current animation speed modifier. - - - - At this point camera is already being shook, we just add some of the same shake to viewmodel for secondary motion. - - - - - Called by clothing to make mesh renderers visible. - - - - - Event for server plugins to monitor whether player is in-inventory. - - - - - Rate limit is relatively high because this RPC handles open/close inventory notification. - - - - - Nelson 2024-03-20: Adding this method because (at the time of writing) first and third-person renderers - and skeletons are activated/enabled in InitializePlayer, onPerspectiveUpdated, and onLifeUpdated, and I - want them to be consistent with the addition of the new NPC Cutscene Mode option. - - - - - 2023-01-18: Viewmodel camera position was originally set during Update (and still is for compatibility), - but for aiming alignment that uses the previous frame's animation position, so we also modify during - LateUpdate to use this frame's animation position. - - - - - Factor e.g. 2 is a 2x multiplier. - Prior to 2022-04-11 this was the target field of view. (90/fov) - - - - - [0, 1] percentage whether a shot decreases ammo count. Defaults to 100%. - For example, 0.25 means 25% of shots will use a bullet, while the remaining 75% will be free. - - - - - [0, 1] percentage whether a shot decreases quality. Defaults to 100%. - Combined with the gun's chance of decreasing quality. - - - - - Players/zombies within this range are treated as potential targets while scanning. - - - - - Will not lose current target within this range. Prevents target from popping in and out of range. - - - - - If true, this sentry can attack players. Defaults to true. - - - - - If true, this sentry can attack zombies. Defaults to true. - - - - - If true, this sentry can attack animals. Defaults to true. - - - - - If true, this sentry can attack vehicles. Defaults to true. - - - - - If the file already exists when writing we will move it to this path. (public issue #4636) - - - - - If false this barricade cannot take damage. - - - - - Modded barricades can disable pooling if they have custom incompatible logic. - - - - - Defaults to false, except for explosive charges which bypass claims. - Requested by Renaxon for collectible barricades that raiders can steal without destroying. - - - - - Defaults to false, except for explosive charges which bypass claims. - If true the item can be placed inside player clip volumes. (out of bounds) - - - - - Should door colliders remain active while animation is playing? - Enabled by modders trying to make stuff like elevators. - - - - - Optional alternative barricade prefab specifically for the client preview spawned. - - - - - By default, vehicles with "hooks" (such as the Skycrane) cannot pick up vehicles with barricades attached. - If all barricades on the vehicle set this to true then the vehicle *can* be picked up. Defaults to false. - - - - - Vehicle to place. - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Legacy ID of vehicle to place. - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the - vehicle spawner requires to properly set paint color. - - - - - Can be added to any GameObject with a Trigger to receive events. - Ensure that Layer will detect player overlaps. Trap is a good candidate. - - - - - Invoked when a player enters the trigger. - Called before OnFirstPlayerEnter. - - - - - Invoked when a player exits the trigger. - Called before OnAllPlayersExit. - - - - - Invoked when first player enters the trigger, and not again until all players have left. - Called after OnPlayerEnter. - - - - - Invoked when last player exits the trigger. - Called after OnPlayerExit. - - - - - Nelson 2024-12-16: This menu and ESteamUGCType are far from ideal, but I'm just trying to hack in a new tag for - server browser curation assets before the update. :P - - - - - Nelson 2025-02-20: Hacking this in to address duplicate buttons when onPublishedAdded is called for a second - page of published files. (public issue #4882) - - - - - Allows Unity events to spawn items. - - - - - Called when the player clicks the cosmetic, visual or skin toggle buttons. - - - - - Invoked after any player's shirt values change (not including loading). - - - - - Invoked after any player's shirt values change (not including loading). - - - - - Invoked after any player's hat values change (not including loading). - - - - - Invoked after any player's backpack values change (not including loading). - - - - - Invoked after any player's backpack values change (not including loading). - - - - - Invoked after any player's backpack values change (not including loading). - - - - - Invoked after any player's glasses values change (not including loading). - - - - - Null if not bookmarked. - - - - - DNS entry to use if adding a bookmark for this server. - - - - - Adjusts width and spacing of buttons along the bottom of the screen. - Favorite and bookmark buttons can be hidden depending whether the necessary server details are set. - - - - - Sort items with lowest "amount" to front of list. - - - - - Sort items with highest "amount" to front of list. - - - - - Sort items with lowest quality% to front of list. - - - - - Sort items with highest quality% to front of list. - - - - - Sum up number of items found, ignoring amount. - Default except as described in TotalAmount comment. - - - - - Sum up "amount" of each item. Optionally counting zero as one (ShouldCountEmptyAsOne). - Default for legacy "ammo type" blueprints and FillTargetItem operation. - - - - - Note: if calling ItemRef.Get() please use FindItemAsset instead to avoid redundant asset lookups. - - - - - If true, items with an "amount" of zero are included in eligible supplies as amount 1. - In practice (as of 2025-03-03), items with zero amount are empty containers such as magazines. - - - - - Determines how totalAmount of each input is calculated. - - - - - If true, items with an "amount" of zero are included in eligible supplies. - Otherwise, they are ignored (default). - - - - - If true, items with an "amount" >= their MaxAmount are ignored. Otherwise, they are eligible (default). - - - - - If true, items with quality of 100% are eligible (default). Otherwise, they are ignored. - - - - - Controls which items are used first. For example, whether to use the lowest quality items first. - - - - - If true, delete input item. Defaults to true. - Replaces the "tool" blueprint option. - - - - - Does this blueprint input require the specified item? - - - - - Controls whether vehicle allows barricades to be attached to it. - - - - - Vehicle does not override placement. This means, by default, that barricades can be placed on the vehicle - unless the barricade sets Allow_Placement_On_Vehicle to false. (e.g., beds and sentry guns) Note that - gameplay config Bypass_Buildable_Mobility, if true, takes priority. - - - - - Vehicle allows any barricade to be placed on it, regardless of the barricade's Allow_Placement_On_Vehicle - setting. The legacy option for this was the Supports_Mobile_Buildables flag. Vanilla trains originally - used this option, but it was exploited to move beds into tunnel walls. - - - - - Vehicle prevents any barricade from being placed on it. Note that gameplay config Bypass_Buildable_Mobility, - if true, takes priority. - - - - - Scene hierarchy path relative to vehicle root. - - - - - Index in renderer's materials array. - - - - - If true, apply to every item in renderer's materials array. - - - - - Controls how vehicle's default paint color (if applicable) is chosen. - - - - - Not configured. - - - - - Pick from the DefaultPaintColors list. - - - - - Pick a random HSV using VehicleRandomPaintColorConfiguration. - - - - - Wheel does not affect steering. - - - - - Set steering angle according to and . - - - - - Increase or decrease motor torque to rotate vehicle in-place. (Tanks) - - - - - For , indicates how a positive motor torque (forward) rotates - the vehicle. - - - - - Wheels on the left side are Clockwise and wheels on the right side are Counter-Clockwise. - - - - - Positive motor torque on this wheel rotates the vehicle clockwise. - - - - - Positive motor torque on this wheel rotates the vehicle counter-clockwise. - - - - - Controls whether wheel creates particle kickup effects for the ground surface material underneath. - - - - - Turn off motion effects. Default for wheels not using collider pose. - - - - - Enable motion effects. Default for wheels using collider pose. - - - - - Enable motion effects, but turn them off while moving backward. - - - - - Enable motion effects, but turn them off while moving forward. - - - - - [0, 1] color will have zero saturation if random value is less than this. For example, 0.2 means 20% of - vehicles will be grayscale. - - - - - If true, this configuration was created by . - Otherwise, this configuration was loaded from the vehicle asset file. - - - - - Transform path relative to Vehicle prefab with WheelCollider component. - - - - - If true, WheelCollider's motorTorque is set according to accelerator input. - - - - - Transform path relative to Vehicle prefab. Animated to match WheelCollider state. - - - - - If true, model is animated according to steering input. - Only kept for backwards compatibility. Prior to wheel configurations, only certain WheelColliders actually - received steering input, while multiple models would appear to steer. For example, the APC's front 4 wheels - appeared to rotate but only the front 2 actually affected physics. - - - - - If true, model ignores isModelSteered and instead uses WheelCollider.GetWorldPose when simulating or the - replicated state from the server when not simulating. Defaults to false. - - - - - If greater than zero, visual-only wheels (without a collider) like the extra wheels of the Snowmobile use - this radius to calculate their rolling speed. - - - - - If set, visual-only wheels without a collider (like the back wheels of the snowmobile) can copy RPM from - a wheel that does have a collider. Requires modelRadius to also be set. - - - - - If set, wheel model uses this crawler track's speed (average RPM of wheels). Prevents wheel model from - spinning out of sync with overall track. - - - - - Target steering angle is multiplied by this value. For example, can be set to a negative number for - rear-wheel steering. Defaults to 1. - - - - - Vertical offset of model from simulated suspension position. - - - - - How quickly to interpolate model toward suspension position in meters per second. - If negative, position teleports immediately. - - - - - Nelson 2024-12-06: Initially implemented as a minimum and maximum percentage of normalized forward velocity, - but think this is more practical. I can't think of why we would use values other than -1, 0, +1 for that, - and if we did we'd probably want some tuning for the angle particles are emitted at. - - - - - If true, wheel should fly off when vehicle explodes. Defaults to true. - Used to simplify destroying vehicles with crawler tracks. - - - - - Default. - - - - - Set pitch and volume of a single clip according to engine RPM. - - - - - Offsets a crawler track's material UV offset in sync with wheels rolling. - - - - - Scene hierarchy path relative to vehicle root. - - - - - Index in renderer's materials array. - - - - - Indices of wheels to copy RPM from. - - - - - How far to travel to offset UV 1x. (1/x) - - You can calculate RepeatDistance by selecting an edge parallel to the crawler track and dividing the UV - distance by the physical 3D distance. For example, if the UV length is 2 and the 3D length is 1.5 m then - the texture repeats 1.33 UV/m. - - - - - UV mainTextureOffset per distance traveled. - - - - - Please refer to: - - - - - Please refer to: - - - - - Supports redirects by VehicleRedirectorAsset. - - "Shared Skins" were implemented when there were several asset variants of each vehicle. For example, - Off_Roader_Orange, Off_Roader_Purple, Off_Roader_Green, etc. Each vehicle had their "shared skin" set to - the same ID, and the skin asset had its target ID set to the shared ID. This isn't as necessary after - merging vanilla vehicle variants, but some mods may rely on it, and it needed GUID support now that the - target vehicle might not have a legacy ID. - - - - - Prevents calling getOrLoad redundantly if asset does not exist. - - - - - Clip.prefab - - - - - Vehicle.prefab - - - - - Nelson 2024-02-28: Prior to the VehicleWheelConfiguration class, most of the wheel configuration was - inferred during InteractableVehicle initialization from the children of the "Tires" and "Wheels" transforms. - Confusingly, "Tires" only contains WheelColliders and "Wheels" only contains the visual models. Rather than - keeping the old behavior in InteractableVehicle alongside the newer more configurable one, we match the old - behavior here to generate an equivalent configuration. - - Note that must be initialized before this is called (by loading model). - - - - - Maximum (negative) velocity to aim for while accelerating backward. - - - - - Maximum speed to aim for while accelerating backward. - - - - - Maximum velocity to aim for while accelerating forward. - - - - - Maximum speed to aim for while accelerating forward. - - - - - Steering angle range at zero speed. - - - - - Steering angle range at target maximum speed (for the current forward/backward direction). - - - - - Steering angle rotation change in degrees per second. - - - - - Added or subtracted from wheel motor torque in mode. - - - - - When a wheel is in mode and a steering input is applied the - stiffness is multiplied by this factor. This allows the vehicle - to rotate in-place with a lower steering torque, which helps prevent the vehicle from going out of control - while turning and accelerating. - - - - - Multiplier for and - while at target maximum speed (for the current forward/backward direction). - - - - - Torque on Z axis applied according to steering input for bikes and motorcycles. - - - - - If true, leaning force is multiplied by normalized speed to the power of steeringLeaningForceSpeedExponent. - Defaults to false. - - - - - Refer to steeringLeaningForceShouldScaleWithSpeed. - - - - - If true, explosion will damage nearby entities and kill passengers. - - - - - Only used if ShouldExplosionBurnMaterials. Optional. Allows specifying which renderers to burn. - - - - - When true the bicycle animation is used and extra speed is stamina powered. - Bad way to implement it. - - - - - Can this vehicle ever spawn with a charged battery? - Uses game mode battery stats when true, or overrides by preventing battery spawn when false. - - - - - Battery charge when first spawning in is multiplied by this [0, 1] number. - - - - - Battery decrease per second. - - - - - Battery increase per second. - - - - - Battery item given to the player when a specific battery hasn't been manually - installed yet. Defaults to the vanilla car battery (098b13be34a7411db7736b7f866ada69). - - - - - Fuel decrease per second. - - - - - Client sends physics simulation results to server. If upward (+Y) speed exceeds this, mark the move invalid. - - - - - Client sends physics simulation results to server. If downward (-Y) speed exceeds this, mark the move invalid. - - - - - If distance between client-submitted hit position and vehicle pivot point is too high the hit will be - marked invalid. This multiplies the distance threshold, useful for very fast vehicles. - - - - - Vertical first-person view translation. - - - - - Vertical first-person view translation. - - - - - Base damage to players when traveling at 1 m/s. Defaults to 10. - - - - - Base damage to zombies when traveling at 1 m/s. Defaults to 15. - - - - - Base damage to animals when traveling at 1 m/s. Defaults to 15. - - - - - Base damage to objects when traveling at 1 m/s. Defaults to 30. - - - - - Base damage to trees when traveling at 1 m/s. Defaults to 85. - - - - - If speed multiplied by is less than this, no damage is applied. - Defaults to 3. - - - - - Multiplier for damage from crashing into things. - Not applicable if is false. - Defaults to 1. - - - - - To non-explosions. - - - - - Mega zombie rocks, zombies, animals. - - - - - Crashing into stuff. - - - - - Can this vehicle be repaired by a seated player? - - - - - Can mobile barricades e.g. bed or sentry guns be placed on this vehicle? - - - - - Should capsule colliders be added to seat transforms? - Useful to prevent bikes from leaning into walls. - - - - - Can players lock the vehicle to their clan/group? - True by default, but mods want to be able to disable. - - - - - Can players steal the battery? - - - - - Spawn table to drop items from on death. - - - - - Minimum number of items to drop on death. - - - - - Maximum number of items to drop on death. - - - - - Item ID of compatible tire. - - - - - If greater than zero, torque is applied on the local Z axis multiplied by this factor. - Note that is critical for damping this force. - - - - - Exponent on the [0, 1] factor representing how aligned the vehicle is with the ground up vector. - - - - - If greater than zero, an acceleration is applied to angular velocity on Z axis toward zero. - - - - - Indices of wheels using replicated collider pose (if any). - Null if not configured or no wheels using this feature. - Allows client and server to replicate only the suspension value without other context. - - - - - Indices of wheels with motor torque applied (if any). - Used for engine RPM calculation. - - - - - If this and UsesEngineRpmAndGears are true, HUD will show RPM and gear number. - - - - - When engine RPM dips below this value shift to the next lower gear if available. - - - - - When engine RPM exceeds this value shift to the next higher gear if available. - - - - - How long after changing gears before throttle is engaged again. - - - - - How long between changing gears to allow another automatic gear change. - - - - - Minimum engine RPM. - - - - - Maximum engine RPM. - - - - - How quickly RPM can increase in RPM/s. - e.g., 1000 will take 2 seconds to go from 2000 to 4000 RPM. - - - - - How quickly RPM can decrease in RPM/s. - e.g., 1000 will take 2 seconds to go from 4000 to 2000 RPM. - - - - - Maximum torque (multiplied by output of torque curve). - - - - - Was a center of mass specified in the .dat? - - - - - If hasCenterOfMassOverride, use this value. - - - - - Multiplier for otherwise not-yet-configurable plane/heli/boat forces. - Nelson 2024-03-06: Required for increasing mass of vehicles without significantly messing with behavior. - - - - - If set, override the wheel collider mass with this value. - - - - - Null if vehicle doesn't support paint color. - - - - - List of transforms to register with DynamicWaterTransparentSort. - - - - - Null if vehicle doesn't support paint color. - - - - - Null if isn't . - - - - - Pick a random paint color according to . Null if unsupported or not configured. - - - - - If true, Vehicle Paint items can be used on this vehicle. - Always false if is false. - - Certain vehicles may support paint colors without also being paintable by players. For example, the creator - of a vehicle may want to use color variants without also allowing players to make it bright pink. - - - - - Returns reverseGearRatio for negative gears, actual value for valid gear number, otherwise zero. - Exposed for plugin use. - - - - - Get number of reverse gear ratios. - Exposed for plugin use. - - - - - Get number of forward gear ratios. - Exposed for plugin use. - - - - - Number of tire visuals to rotate with steering wheel. - - - - - If true then level should convert old terrain. - - - - - If true, splatmap conversion should use weights as-is. - - - - - Material guids converted by legacy asset bundle hash or texture names. - - - - - Hash of Trees.dat, or zeroed if any assets were missing locally. - Should only be used if level is configured to, as many mod maps are typically missing assets. - - - - - Nelson 2025-06-10: replacement for _trees. Enables trees outside the "insane" level bounds. - - - - - Append all trees in the level to results list. - - - - - Game does not currently have a way to resave level's Config.json file, so instead we save a text file - indicating that the terrain auto conversion was performed. If there was a bug with auto conversion then - all of the old files are still present and can be re-converted. - - - - - Stagger regional visibility across multiple frames. - - - - - Caches uint16 ID to ID redirects. - - - - - Manages lifetime and attachment of a mythical effect. Added by . - Was called `MythicLocker` with a paired `MythicLockee` prior to 2024-06-11. - - - - - https://steamcommunity.com/dev/managegameservers - - - - - IP address, DNS name, or a web address (to perform GET request) to advertise. - - Servers not using Fake IP can specify just a DNS entry. This way if server's IP changes clients can rejoin. - For example, if you own the "example.com" domain you could add an A record "myunturnedserver" pointing at - your game server IP and set that record here "myunturnedserver.example.com". - - Servers using Fake IP are assigned random ports at startup, but can implement a web API endpoint to return - the IP and port. Clients perform a GET request if this string starts with http:// or https://. The returned - text can be an IP address or DNS name with optional query port override. (e.g., "127.0.0.1:27015") - - - - - If true, the server lobby warns that in-game ping may be higher than shown. BUT it's shown in the default - UI color rather than the "bad" color when flagged by moderation. - - - - - If ready-to-connect messages are received more than twice from the same client in less than this many - seconds they will be kicked. - - - - - If bad packets (that *may* be legitimate) are received more than threshold times within this many seconds - of each other, reject the calling connection. - - - - - If more than this many bad packets (that *may* be legitimate) are received within window seconds of each - other, reject the calling connection. - - - - - If a rate-limited method is called this many times within cooldown window the client will be kicked. - For example a value of 1 means the client will be kicked the first time they call the method off-cooldown. (not recommended) - - - - - Only applicable when Fake IP is off. When a client is connecting, if their connection would push the number - of simultaneous connections from the same IP address past this number, they are prevented from joining. - - May be useful to prevent against fake join requests coming from a single source IP. (public issue #5001) - - Defaults to a high value because some regions will have many more clients with the same IPv4 address than - others. For example, due to Carrier-grade NAT (CGNAT). - - - - - Whether rejections for Max_Clients_With_Same_IP_Address should log to command output. Useful for checking - if the limit is appropriate. - - - - - Ordinarily the server should be receiving multiple input packets per second from a client. If more than this - amount of time passes between input packets we flag the client as potentially using a lag switch, and modify - their stats (e.g. reduce player damage) for a corresponding duration. - Minimum value is PlayerInput.MIN_FAKE_LAG_THRESHOLD_SECONDS. - - - - - Whether fake lag detection should log to command output. False positives are relatively likely when client - framerate hitches (e.g. loading dense region), so this is best used for tuning threshold rather than bans. - - - - - PvP damage multiplier while under fake lag penalty. - - - - - Should we kick players after detecting spammed calls to askInput? - - - - - Should we kick players if they do not submit inputs for a long time? - - - - - Should the server automatically shutdown at a configured time? - - - - - When the server should shutdown if Enable_Scheduled_Shutdown is true. - - - - - Broadcast "shutting down for scheduled maintenance" warnings at these intervals. - - - - - Should the server automatically shutdown when a new version is detected? - - - - - Unfortunately the server does not have a way to automatically determine the current beta branch. - - - - - Broadcast "shutting down for update" warnings at these intervals. - - - - - Should vanilla text chat messages always use rich text? - Servers with plugins may want to enable because IMGUI does not fade out rich text. - Kept because plugins might be setting this directly, but it no longer does anything. - - - - - Should the EconInfo.json hash be checked by the server? - - - - - If true, opt-in to SteamNetworkingSockets "FakeIP" system. - https://partner.steamgames.com/doc/api/ISteamNetworkingSockets#1 - - - - - If greater than zero, vehicles with XZ position outside this threshold are saved in the center of the map. - By default, vehicles outside ±40 km are teleported into the map. - Intended to help with physics issues caused by vehicles far out in space. (public issue #4465) - - - - - Limit max queue timeout duration so that if server encounters an error or doesn't - process the request the client can timeout locally. - - - - - Longer than server timeout so that ideally more context is logged on the server - rather than just "client disconnected." - - - - - Original option for disabling item quality. Defaults to true. If false, items spawn at 100% quality and - their quality doesn't decrease. For backwards compatibility, the newer per-item-type durability options - are ignored if this is off. - - - - - Food-specific replacement for . Defaults to false. If true, food spawns at 100% quality. - - - - - Water-specific replacement for . Defaults to false. If true, water spawns at 100% quality. - - - - - Clothing-specific replacement for . Defaults to false. If true, clothing spawns at 100% quality. - - - - - Weapon-specific replacement for . Defaults to false. If true, weapons spawns at 100% quality. - - - - - Fallback used when spawning an item that doesn't fit into one of the other quality/durability settings. - Defaults to false. If true, items spawn at 100% quality. - - - - - Clothing-specific replacement for . Defaults to true. If false, clothing quality - doesn't decrease when damaged. - - - - - Melee and gun replacement for . Defaults to true. If false, weapons quality - doesn't decrease when used. - - - - - Seconds vehicle can be neglected before it begins taking damage. - - - - - After vehicle has been neglected for more than Decay_Time seconds it will begin taking this much damage per second. - - - - - Vehicles are considered "natural" if they were spawned by the level as opposed to players or vendors. - If less than this many natural vehicles exist in the level, more will be spawned. The minimum of this or - Max_Instances is used. (i.e., if this value is higher than max instances the max instances value is used - instead.) - - - - - Minimum seconds between boss zombie spawns for players doing quests. - Players were abusing the spawns to farm boss tier loot. - - - - - Weapon damage multiplier against body, arms, legs. Useful for headshot-only mode. - - - - - Should players be allowed to build on their vehicles? - - - - - Should players be allowed to build traps (e.g. barbed wire) on their vehicles? - - - - - Furthest away from colliders a player can build an item onto their vehicle. - - - - - Furthest away from colliders a player can build a trap (e.g. barbed wire) onto their vehicle. - - - - - [0, 1] percentage of skill levels to retain after death. - - - - - [0, 1] percentage of skill levels to retain after death. - - - - - Number of skill levels to remove after death. - - - - - Number of skill levels to remove after death. - - - - - [0, 1] percentage of experience points to retain after death. - - - - - [0, 1] percentage of experience points to retain after death. - - - - - Should each character slot have separate savedata? - - - - - If true, players will be kicked if their skin color is too similar to one of the level's terrain colors. - - - - - Each per-level custom weather frequency is multiplied by this value. - - - - - Each per-level custom weather duration is multiplied by this value. - - - - - Should ServerTextChatMessenger be allowed to broadcast? - - - - - Should ServerTextChatMessenger be allowed to execute commands? - - - - - Should ClientTextChatMessenger be allowed to broadcast? - - - - - Should ClientTextChatMessenger be allowed to execute commands? - - - - - Should group connections be shown on player list? - - - - - If true, allow automatically creating an in-game group for members of your Steam lobby. - Requires Allow_Dynamic_Groups to be enabled as well. - - - - - Is friendly-fire allowed? - - - - - Are sentry guns and beds allowed on vehicles? - - - - - Should holiday (Halloween and Christmas) content like NPC outfits and decorations be loaded? - - - - - Can "freeform" barricades be placed in the world? - Defaults to true. - - - - - Can "freeform" barricades be placed on vehicles? - Defaults to true. - - - - - If true, aim flinches away from center when damaged. - Defaults to true. - - - - - If true, camera will shake near explosions. Can also be toned down client-side in Options menu. - Defaults to true. - - - - - If true, crafting blueprints can require nearby workstations. Defaults to true. - If false, only the backwards-compatibility "Heat Source" vanilla crafting tag can be required. This - functions identically to the cooking-skill-also-requires-heat behavior from before. - - - - - If true, client-side options like damage flinch, explosion camera shake, viewmodel bob are ignored. - Defaults to false. - - - - - If true, hide viewmodel while aiming a dual-render scope and show a 2D overlay instead. - - Nelson 2025-07-04: adding this option for backwards compatibility with modded scopes that have a small - enough dual-render surface to zoom-*out* when aiming in. - - Defaults to false. - - - - - Scales velocity added to players by explosion knock-back. - - - - - Scales midair input change in player direction. - - - - - Scales midair decrease in speed while faster than max walk speed. - - - - - Scales magnitude of recoil while using first-person perspective. - - - - - Scales magnitude of recoil while aiming in first-person perspective. - - - - - Scales magnitude of recoil inversely with zoom level while aiming in first-person perspective. - - - - - Scales magnitude of recoil while using third-person perspective. - - - - - Scales magnitude of bullet inaccuracy while using third-person perspective. - - - - - [0, 1] Scales how much the first-person move up and down while jumping/landing. - - - - - [0, 1] Scales how much the first-person arms move while ADS. - - - - - Center mythical effect hook horizontally, but maintain vertical placement. - Lots of hats/masks/glasses have off-center effects intentionally, but community - feedback suggests centering to make effects like circling atoms look better. - - - - - Set mesh of all character mesh renderers. - Tries to match renderer index to mesh LOD index. - - - - - Set material of all character mesh renderers. - - - - - Hack for previewing the "aura" cosmetic items. - - - - - If true, this character is for capturing clothing icons. - - - - - Planar reflection component updates its culling distance and culling mask when this is incremented. - - - - - Overrides in-game UI scale setting. - - - - - Distance to use terrain shaders before fallback to a baked texture. - - - - - Higher error reduces vertex density as distance increases. - - - - - Added for players who want to see if they can get better performance with a ridiculously low max draw distance. - - - - - Multiplier for far clip plane distance. - Clamped within [0, 1] range to prevent editing config files for an advantage. - - - - - Multiplier for draw distance. - Clamped within [0, 1] range to prevent editing config files for an advantage. - - - - - Multiplier for draw distance of optional super-low LOD models. - Clamped within [0, 1] range to prevent editing config files for an advantage. - - - - - Vehicles outside this distance are not rendered. - - - - - Called after loading graphics settings from disk so that their values can be adjusted. - - - - - If default resolution is zero, try falling back to a higher one. - Used when restoring defaults and validating loaded settings. - - - - - If true, make the game look as nice as possible. - Note: certain limits are imposed except in singleplayer to prevent this from being exploited. - - - - If true, include current animation speed modifier. - - - True if an animation was found and started playing. - - - - Velocity is directly set to input velocity. - - - - - Velocity is affected by acceleration and deceleration. - - - - - Properties common to asset and extensions. For example both can specify sounds. - - - - - Invokes an event a configured number of times. - - - - - If true the event will only be invoked in offline mode and on the server. - - - - - Invoked multiple times. - - - - - Sanity check all returned elements have a gameObject. - - - - - Create software cursor visual element. - - - - - Create green label in the upper-left. - - - - - Create tooltip visual element. - - - - - Update upper-left green text. - - - - - Update software cursor visual element. - - - - - Find hovered element and update tooltip visibility/text. - - - - - Container for SleekWindow element. - - - - - Container for top-level visual elements. - - - - - Element under the cursor on the previous frame. - - - - - Duration in seconds the cursor has been over the element. - - - - - EconInfo.json hash does not match. - - - - - Master bundle hashes do not match. - - - - - Workshop usage advertised on server list does not match during connect. - - - - - Used by client transport to show a custom localized message. - - - - - Server has not received an auth session response from Steam yet. - - - - - Server has not received an economy response from Steam yet. - - - - - Server has not received a groups response from Steam yet. - - - - - Player nickname exceeds limit. - - - - - Player nickname contains invalid characters. - - - - - Player nickname should not be a number. - - - - - Server did not respond to EServerMessage.Authenticate - - - - - Player resources folders don't match. - - - - - The network identity in the ticket does not match the server authenticating the ticket. - This can happen if server's Steam ID has changed from what the client thinks it is. - For example, joining a stale entry in the server list. (public issue #4101) - - - - - Level name advertised on server list does not match during connect. - - - - - VAC status advertised on server list does not match during connect. - - - - - BattlEye status advertised on server list does not match during connect. - - - - - Max players advertised on server list does not match during connect. - - - - - Camera mode advertised on server list does not match during connect. - - - - - Combat mode advertised on server list does not match during connect. - - - - - Player's skin color is too similar to one of . - - - - - Steam ID reported by net transport doesn't match client's reported Steam ID. - This was exploited to fill the server queue with fake players. - - - - - Received too many connection requests from player in a short window. - - - - - Received too many invalid messages from connection in a short window. - - - - - Same as CUSTOM, but shows the "verify game files" prompt. - - - - - Server limits how many clients are joining from the same IP address. - (public issue #5001) - - - - - Does this label fade out as the chat message gets older? - - - - - Chat message values to show. - - - - - Invoked after state is first loaded, synced from server when entering relevancy, or reset. - - - - - Invoked after interaction changes state. - - - - - Number of event hooks monitoring or controlling this. - Used to allow client to control remote objects on server. - - - - - Remove items that do not match search text. - - - - - Note SetListing also calls RefreshInCart. - - - - - Cannot be created until store data is available. - - - - - Toggle button to open/close advanced filters panel. - - - - - On/off checkbox for including already-owned items in filter. - - - - - Container for advanced options. - - - - - Displays the current page number. - - - - - Only visible when cart is not empty. - - - - - [0, pageCount) - - - - - If true, listings should be re-filtered when opening the menu. - - - - - Collections of multiple items. - - - - - Discounted items. - - - - - Items marked as new in the Status.json file. - - - - - Items marked as featured in the Status.json file. - - - - - Implemented by "root" component of each entity type that can provide crafting tags to nearby players. - This allows overlap with a barricade attached to a vehicle to find the barricade from barricade collider and - vehicle from vehicle collider rather than using transform root. Any mod hook extensions to crafting tags will - be sibling components or descendants of this component. - - - - - Asset providing tags. For example, a barricade item. - - - - - True if GetAvailableTags can ever add any tags. - Used to skip unnecessary line-of-sight tests against (for example) ordinary structures and the like. - - - - - All tags added by this crafting tag provider. - - - - - Rewards to grant when quest is removed without completing. - Not granted when player finishes quest. - - - - - Configuration for DedicatedUGC. - - - - - Published workshop file IDs to download. - - - - - Published workshop file IDs whose children (dependencies) should be skipped. - Useful if workshop author lists dependencies as a way of advertising. - - - - - Controls SetAllowCachedResponse. Disabled when set to zero. - Balance between item change frequency and allowing cached results when query fails. - - - - - Number of total times to try re-submitting failed workshop queries before aborting. - - - - - Should items already installed be loaded? - - - - - Should used items be monitored for updates? - - - - - Seconds to wait before shutting down after an update is detected. - - - - - Message broadcasted when shutdown timer begins. - - - - - Message sent to players when shutdown timer completes. - - - - - Get instance if loaded, but do not load. - - - - - Get instance, or load if not yet loaded. - - - - - Should only be used by . - For example: "Condition_##" where ## is an index. - - - - - Nelson 2025-03-11: not *super* happy about having this in here. Needed for UI_Requirements. - - - - - Nelson 2025-03-11: not *super* happy about having this in here. Needed for UI_Requirements. - - - - - If set, only show this condition in the UI when conditions with these indices are met. - For example don't show "arrest the criminal (name)" until "investigate crime" is completed. - - - - - Is this condition influenced by a given quest flag? - Used by level objects to determine if local player's flag change may affect visibility. - - - - - Replacement for isAssociatedWithFlag to fix quest conditions and somewhat improve perf. - - - - - Intended to replace filling data from constructor. - - - - - Intended to replace filling data from constructor. Legacy is for backwards compatibility with Condition_#_Key - format, whereas V2 uses the list and dictionary features. - - - - - Can be added to gun item game objects (including children) to receive events. - - - - - Which attachment type to monitor. - - - - - Optional. If set, only consider item matching this GUID. I.e., slot is considered empty if attached item - has a different asset GUID. - - - - - If true, AssetGuidFilter passes when item in slot *doesn't* match GUID. - - - - - Invoked both when: - 1. Gun is first equipped and an item is already present in the slot. - 2. An item is added to the slot. - - - - - Invoked both when: - 1. Gun is first equipped and the slot is empty. - 2. An item is removed from the slot. - - - - - Controls whether events are invoked when asset in slot changes. - - - - - Nelson 2025-02-04: Gun attachment slots are currently hard-coded, but if that changes this could be updated - with a "custom" option. - - - - - If emptiness of slot doesn't change (attachment replaced), do nothing. - - - - - In addition to regular Attached and Detached events, if the item asset in the slot changes invoke - Detached then Attached. - - - - - State doesn't affect AI collision. - - - - - AI collision is blocked when object state is ON. - - - - - AI collision is blocked when object state is OFF. - - - - - Controls how rubble affects Nav game object. - - - - - Default. Destruction of rubble sections does not affect whether Nav game object is active or not. - - - - - AI collision is blocked when any sections are alive. Once all sections are dead AI collision is unblocked. - - - - - The game uses Process.Start to open web links when the Steam overlay is unavailable, which could be exploited - to e.g. download and execute files. To prevent this we only allow valid http or https urls. - - If true, prefix with https:// if neither http:// or https:// is specified. - - - - This version just doesn't return the parsed URL. - - - - - Resolve spawn table asset if set, otherwise find asset by legacy in-editor ID configuration. - Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the - vehicle spawner requires to properly set paint color. - - - - - Used when spawn table asset is not assigned. Pick a random legacy ID using in-editor list of spawns. - - - - - Multiplier for how quickly deadzones deplete a gasmask's filter quality. - e.g., 2 is faster (2x) and 0.5 is slower. - - - - - Hack for previewing the "aura" cosmetic items. - - - - - Was redirected to HolidayUtil but kept for plugin backwards compatibility. - Refer to HolidayUtil for explanation of this weird situation. - - - - - Was redirected to HolidayUtil but kept for plugin backwards compatibility. - Refer to HolidayUtil for explanation of this weird situation. - - - - - The base transform does not rotate, instead a child transform is created with the pivot in the center. - - - - - To work around a uGUI bug we always a sign a texture, even if desiredTexture is null. - - - - - Broadcasts after dedicated server name changes. - Command IO interface binds to this rather than having a title-specific method. - - - - - Should the default console I/O handler be created? - Plugins can disable on the command line when overriding handler. - - - - - Should the legacy blocking (game thread) console be created? - - - - - Log white information. - - - - - Log yellow warning. - - - - - Log red error. - - - - - Print white message to console. - - - - - Print yellow message to console. - - - - - Print red message to console. - - - - - Cannot use UnturnedLog here because it may recursively call CommandWindow if another exception is thrown. - - - - - Called during Unity Update loop. - - - - - Called during OnApplicationQuit. - - - - - Helper for plugins that want to replace the default without the shouldCreateDefaultConsole flag. - - - - - If true, the player can press Interact [F] when there are no responses - and the "next" dialogue will be opened. - - - - - Each dialogue message is separated into multiple pages. - - - - - Current page localized text with name_npc and name_char formatted in. - - - - - Seconds elapsed while viewing current page not including pause timer. - Used to gradually show the message text. - - - - - Seconds to wait before resuming pageAnimationTime counting. - - - - - Appends chars from pageFormattedText according to pageAnimationTime. - - - - - Rich text formatting tags to close those opened by visible text in animatedTextBuilder. - For example, if animatedTextBuilder includes an opening color=#, this includes the closing color markup. - Required depending on Glazier used. - - - - - Number of chars of pageFormattedText currently visible. - - - - - Added to animation visible chars to skip time on markup. - - - - - Seconds elapsed since responses started becoming visible. - Used to gradually enable responses rather than all at once. - - - - - Animated toward total number of responses to make them gradually visible. - - - - - If true, animation is finished and there is another page to show when Interact [F] is pressed. - - - - - If true, text on current page is in the process of gradually appearing. - - - - - Used by quest UI to return to current dialogue. - - - - - Update timers and UI for current page index. - - - - - Called when the player presses Interact [F] in dialogue screen. - - - - - Show complete text for the current page and make responses visible. - Called if dialogue animation is disabled, and when the player presses Interact [F] during animation. - - - - - Use "Interact" token from translation file. - - - - - If true, description should only be populated with contents from prior to the auto-layout UI changes. - - - - - BuildDescription implementations can use this to concatenate longer strings. - - - - - Which parent to use when attaching an equipped/useable item to the player. - - - - - Helper for plugins that want item prefabs server-side. - e.g. Allows item icons to be captured on dedicated server. - - - - - Item name wrapped in color rich text tags according to rarity. - - - - - Hack for Kuwait aura icons. - - - - - Useable subclass. - - - - - Can this useable be equipped by players? - True for most items, but allows modders to create sentry-only weapons. - - - - - Can this useable be equipped while underwater? - - - - - Vertical half size of icon camera. - Values less than zero are disabled. - - - - - Vertical half size of economy icon camera. - - - - - Should the newer automatic placement and orthographic size for axis-aligned icon cameras be used? - Enabled by default, but optionally disabled for manual adjustment. - - - - - Nelson 2025-04-10: adding this for semantics because amount isn't an obvious name. - - - - - If true, item should be removed when "amount" reaches zero. - Defaults to true except for magazines. - - - - - Which parent to use when attaching an equipped/useable item to the player. - - - - - If true, equipable prefab is a child of the left hand rather than the right. - Defaults to false. - - - - - Whether viewmodel should procedurally animate inertia of equipped item. - Useful for low-quality older animations, but modders may wish to disable for high-quality newer animations. - - - - - Defaults to true. If false, the equipped item model is flipped to counteract the flipped character. - - - - - If true, stats like damage, accuracy, health, etc. are automatically appended to the description. - Defaults to true. - - - - - Nelson 2024-12-11: This can now be null for cosmetic items (). For those items it wasn't - used outside of the main menu 3D item preview, in which case the clothing prefab is typically a better - visualization. - - - - - Optional alternative item prefab specifically for the PlayerEquipment prefab spawned. - - - - - Name to use when instantiating item prefab. - By default the asset legacy id is used, but it can be overridden because some - modders rely on the name for Unity's legacy animation component. For example - in Toothy Deerryte's case there were a lot of duplicate animations to work - around the id naming, simplified by overriding name. - - - - - Movement speed multiplier while the item is equipped in the hands. - - - - - Sound to play when inspecting the equipped item. - - - - - Sound to play when moving or rotating the item in the inventory. - - - - - When a player dies with this item, should an item drop be spawned? - - - - - Can player click the drop button on this item? - - - - - If this item is compatible with skins for another item, lookup that item's ID instead. - - - - - Defaults to true. If false, skin material and mesh are not applied when is - set. For example, a custom axe can transfer the kill counter and ragdoll effect from a vanilla item's skin - without also transferring the material and mesh. - - - - - Should friendly-mode sentry guns target a player who has this item equipped? - - - - - Kept in case any plugins refer to it. - Renamed to shouldFriendlySentryTargetUser. - - - - - Should players be allowed to start primary/secondary use of this item while inside given safezone? - If returns false the primary/secondary inputs are set to false. - - - - - Should this item be deleted when using and quality hits zero? - e.g. final melee hit shatters the weapon. - - - - - Should the game destroy all child colliders on the item when requested? - Physics items in the world and on character preview don't request destroy, - but items attached to the character do. Mods might be using colliders - in unexpected ways (e.g., riot shield) so they can disable this default. - - - - - Are there any official skins for this item type? - Skips checking for base textures if item cannot have skins. - - - - - Find useableType by useable name. - - - - - V2 is for newer dat list features. - - - - - Legacy is for backwards compatibility with Blueprint_# format. - - - - - V2 is for newer dat list features. - - - - - Legacy is for backwards compatibility with Action_# format. - - - - sortOrder values for description lines. - Difference in value greater than 100 creates an empty line. - - - - Properties common to Gun and Melee. - - - - - Properties common to Barricade and Structure. - - - - - Properties common to Gun, Consumable, and Throwable. - - - - - Properties common to Gun and Melee. - - - - - Properties common to Gun and Melee. - - - - - Properties common to Gun and Melee. - - - - - Properties common to Gun and Melee. - - - - - Remaps asset load requests into a large asset bundle rather than small individual asset bundles. - - - - - Config that contains the actual large AssetBundle. - - - - - Asset path relative to the master AssetBundle. - - - - - Icon visible when this listing is in the cart. - - - - - "SALE" or "NEW" text visible when applicable. - - - - - Tooltip text. - - - - - Holds tooltip text - - - - - Nelson 2025-01-28: This command reproduces a bug destroying the player gameObject if the vehicle is - destroyed on the same frame as the request to exit. - https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/4760#issuecomment-2613090165 - - - - - Speaker writes compressed audio to this buffer. - Listener copies network buffer here for decompression. - - - - - Listener writes decompressed PCM data to this buffer. - - - - - Seconds interval to wait between asking recording subsystem for voice data. - Rather than polling every frame we wait until data has accumulated to send. - - - - - Seconds to wait before playing back newly received data. - Allows a few samples to buffer up so that we don't stutter as more arrive. - - - - - Seconds to wait after playback before stopping audio source. - We zero this portion of the clip to prevent pops. - - - - - Max calls to askVoice server will allow per second before blocking their voice data. - Prevents spamming many tiny requests bogging down server output. - - - - - Max compressed bytes server will allow per second before blocking their voice data. - When logging compressed size they averaged 3000-5000 per second, so this affords some wiggle-room. - - - - - Internal value managed by isTalking. - - - - - Is this player broadcasting their voice? - Used in the menus to show an indicator who's talking. - Locally set when recording starts/stops, and remotely when voice data starts/stops being received. - - - - - Broadcasts after isTalking changes. - - - - - Can this player currently hear global (radio) voice chat? - - - - - Is the player wearing an earpiece? - Allows global (radio) voice chat to be heard without equipping the walkie-talkie item. - - - - - Is a UseableWalkieTalkie currently equipped? - Set by useable's equip and dequip events. - - - - - Was the most recent voice data we received sent using walkie talkie? - - - - - Has voice data recently been received, but we're waiting slightly to begin playback? - Important to give clip a chance to buffer up so that we don't stutter as more samples arrive. - - - - - AudioSource.isPlaying is not trustworthy. - - - - - Timer counting down to begin playback of recently received voice data. - We use a timer rather than availableSamples.Count because a very short phrase could be less than threshold. - - - - - Timer counting down to end playback. - - - - - Accumulated realtime since we last polled data from voice subsystem. - - - - - Last time askVoiceChat was invoked over network. - - - - - Number of times askVoiceChat has been called recently, to prevent calling it many times - with tiny durations getting server to relay many packets to clients. - - - - - Total of recent compressed voice payload lengths. - - - - - Realtime since this recent conversation began. - - - - - Only used by plugins. - Called on server to allow plugins to override the default area and walkie-talkie voice channels. - - - - - Default culling handler when speaking over walkie-talkie. - - - - - Default culling handler when speaking in proximity. - - - - - Called by owner to relay voice data to clients. - Not using rate limit attribute because it internally tracks bytes per second. - - - - - Called by server to relay voice data from clients. - - - - - Set to true during OnDestroy to make sure we don't start recording again. - - - - - If true, SteamUser.StartVoiceRecording has been called without a corresponding call to - SteamUser.StopVoiceRecording yet. - - - - - If true, voice toggle is in ON mode. - - - - - Internal value managed by inputWantsToRecord. - - - - - Set by updateInput based on whether voice is enabled, key is held, is alive, etc. - Reset to false during OnDestroy to stop recording. - - - - - Called during Update on owner client to start/stop recording. - - - - - Called during Update on owner client to record voice data. - - - - - Play walkie-talkie squawk at our position. - - - - - Start and stop playback of received audio stream. - - - - - Will this component ever need to record voice data? - - - - - Will this component ever need to play voice data? - In release builds this is only true for remote clients, but in debug we may want to locally listen. - - - - - Player's voice audio source cached during Start. - - - - - Looping voice audio clip. - - - - - Playback buffer. - - - - - Steam does less work on the main thread if we request samples at the native decompresser sample rate, - so the re-sampling can be done on the Unity audio thread instead. - - - - - 1 / frequency - - - - - Number of samples to zero after writing new audio data. - - - - - Are any players standing on the mannequin? - Used to prevent exploiting pose switches to push through objects. - - - - - Amount of experience to reward harvesting player. - - - - - If true, harvesting has a chance to provide a second item. - - - - - If true, rain will finish growing the plant. - - - - - NPC rewards to grant upon harvesting the crop. - - - - - Represents an item the vendor is selling to players. - - - - - Refer to NPCItemReward state. - - - - - Represents a vehicle the vendor is selling to players. - - - - - Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the - vehicle spawner requires to properly set paint color. - - - - - If set, takes priority over VehicleRedirectorAsset's paint color and over VehicleAsset's default paint color. - - - - - Added during the UI refactor to catch unhandled mouse clicks during drag. - - - - - Contains inspect item box and invisible button. - - - - - Added during the UI refactor to catch mouse clicks outside the selection box. - - - - - Annoying frustrating workaround for IMGUI. Disable inventory headers, grids and slots while selection is open - to prevent them from interfering with selection menu. - - - - - Was ConsumeEvent called during this frame? - This is a hack to prevent firing when clicking in the UI on the same frame it closes. - Moved from SleekWindow and Event.current.Use() during UI refactor. - - - - - Move item drag visual to the cursor's position. - - - - - Backwards-Compatible Asset Reference with Caching - • Supports both GUID and legacy ID. - • Caches resolved asset and updates if asset has been reloaded. - • Parsing legacy ID without context requires "LegacyType:LegacyID" format. E.g., "Item:4" for the Eaglefire. - • See CachingAssetRef if legacy ID support is unnecessary. - - - - - If true, doesn't reference anything. - Could also be called "IsZero" or "IsNull". - - - - - Opposite of IsEmpty. - - - - - Assigned GUID, not the referenced asset's GUID. - - - - - Assigned legacy ID, not the referenced asset's legacy ID. - - - - - Assigned legacy type, not the referenced asset's legacy type. - - - - - Doesn't only check (Get() == asset) because a new asset may have loaded. - Rather, checks whether GUID or legacy ID (whichever is set) points at asset. - If asset is null, returns true if GUID and legacy ID are zero. - - - - - Supports both GUID and legacy ID formats. - - If input string contains ':' the first part is EAssetType and the second part is legacy ID. - - If defaultLegacyType is not None the input string can be parsed as a legacy ID. - - Otherwise, parsed as GUID. - - - - - Supports both GUID and legacy ID formats. - - If input string contains ':' the first part is EAssetType and the second part is legacy ID. - - Otherwise, parsed as GUID. - - - - - Returns Empty if TryParse returns false. - - - - - Returns Empty if TryParse returns false. - - - - - Enables assigning assetRef from an existing asset without manually calling constructor. - - - - - Enables assigning assetRef from an asset GUID without manually calling constructor. - - - - - Enables assigning assetRef from a non-backwards-compatible asset ref without manually calling constructor. - - - - - Render character with hair and skin otherwise it might be cyan. - (public issue #3615) - - - - - If set, audio clip associated with physics material will take priority. - - - - - Collision with speed lower than this value will not play a sound. - - - - - Currently triggers are only used for water. - - - - - Sorts higher rarity items into the front of the list. - - - - - Sorts name alphabetically to the front of the list. - - - - - Sorts type alphabetically to the front of the list. - - - - - [0, 1] blends towards one while active regardless of local volume. - - - - - [0, 1] blends towards one if current volume bitwise AND with asset is non-zero. - - - - - Lesser of global or volume blend alphas. - - - - - If blending was not ticket yet then local blend can use global value, e.g. loading into rain storm. - - - - - Is blendAlpha at 100%? - - - - - [0, 1] Rain puddle alpha cutoff. - - - - - [0, 1] Rain puddle ripples alpha. - - - - - Optional parameter for error logging. - - - - - Run hash algorithm for all data passing through a stream. - - - - - Repurposed from the Modules UI because it was unused. - - - - - Full argument string. Defaults to Environment.CommandLine. - - Nelson 2025-06-17: By default, Steam shows a warning nowadays when the game is launched with externally-provided - command-line arguments. For example, when joining a friend via rich presence. The solution is to use the arg - string provided by SteamApps.GetLaunchCommandLine, which also supports *changing* the arguments while the app is - running. If the environment-provided command-line doesn't contain it, the game will append Steam's launch options. - - Note: Steam override isn't applied until Steam is initialized. (after Dedicator and ModuleManager) Please refer to - Setup.cs for the full initialization order. - - - - - Nelson 2025-06-16: Steam doesn't handle "server code" connect URL, but we now support - it for rich presence joins via server code for easier inviting friends to private servers. - - When Steam parses a steam://connect/ip:port URL it requires the query port (e.g. 27015). - - - - - Handles these cases: - key value -> value - key=value -> value - key = value -> value - key = value -> value - key "value with spaces" -> value with spaces - key "value with \" quotation marks" -> value with " quotation marks - - Tested in CommandLineTests.cs - - - - - Is the application running as a headless server? - Replacement for isDedicated property. The property could not be changed to const in dedicated-server-only - builds without potentially breaking plugins. Only development builds can be run as both client or server. - - - - - Are we currently running the standalone dedicated server app? - - - - - Should dedicated server disable requests to internet? - While in LAN mode skips the Steam backend connection and workshop item queries. - Needs a non-Steam networking implementation before it will be truly offline only. - - - - - Hints/messages are the pop-up texts below the interaction prompt, e.g. "reload" or "full moon rises". - Got a complaint that the item placement obstructed hint was shown if placing multiple signs. - - - - - Adjust screen positioning and visibility of player name widgets to match their world-space counterparts. - - - - - Update hitmarker visibility, and their world-space positions if user enabled that. - - - - - Disable hints and messages if no longer applicable. - - - - - Disable vote popup if enough time has passed. - - - - - Pause the game if playing singleplayer and menu is open. - - - - - Many places checked that the cursor and chat were closed to see if a menu could be opened. Moved here to - also consider that useable might have a menu open. - - - - - Calculate damage multiplier for individual bullet. - - - - - Each shot has a percentage chance to hit the target. Higher values are more likely to hit. e.g., it - decreases from 1.0 at point blank to 0.0 at the weapon's maximum range. This chance is affected by the - gun's spread. - - - - - Contains presetsScrollView which contains customPresetsContainer and defaultPresetsContainer. - - - - - Contains column buttons and server list itself. - - - - - Synchronize widgets with their values. - - - - - Each level should have a 380x80 Icon.png file. - This class caches them so that the server list can show them quickly. - - - - - Time.time damage was last dealt so that damage is applied once per second. - - - - - Timer increased while taking damage, and reset to zero while inside zone. - - - - - Current position. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Is the active level an Arena mode map? - - - - - Find a new smaller circle within the old circle and clamp it to the playable level area. - - - - - Pick a random airdrop node appropriate for the game mode. - - - - - Nelson 2025-04-01: default position intBitCount of 13 has range of [-4096, 4096), but on "insane" size maps - the aircraft starts 2 km outside that range. This causes the care package to spawn at the wrong position. - Bumping intBitCount to 14 enables a range of [-8192, 8192). (public issue #4972) - - - - - Seconds between weather event starting and reaching full intensity. - - - - - Seconds between weather event ending and reaching zero intensity. - - - - - Sound clip to play. Volume matches the intensity. - - - - - Component to spawn for additional weather logic. - - - - - If per-volume mask AND is non zero the weather will blend in. - - - - - Expands upon Unity physics material properties for gameplay features. - - - - - Originally considered assets for each legacy material with fallback to main material, but the fallback - would mean a failed lookup for every property in the vast majority of cases. - - - - - If true, crops can be planted on this material. - - - - - If true, oil drills can be placed on this material. - - - - - For custom friction mode, multiplies character acceleration. - - - - - For custom friction mode, multiplies character deceleration. - - - - - For custom friction mode, multiplies character max speed. - - - - - • Does not support legacy ID. - • Caches resolved asset and updates if asset has been reloaded. - • See CachingBcAssetRef if legacy ID support is necessary. - - - - - If true, doesn't reference anything. - Could also be called "IsZero" or "IsNull". - - - - - Opposite of IsEmpty. - - - - - Assigned GUID, not the referenced asset's GUID. - - - - - Doesn't only check (Get() == asset) because a new asset may have loaded. - Rather, checks whether GUID points at asset. - If asset is null, returns true if GUID and legacy ID are zero. - - - - - Returns Empty if TryParse returns false. - - - - - Enables assigning assetRef from an existing asset without manually calling constructor. - - - - - Enables assigning assetRef from an asset GUID without manually calling constructor. - - - - - Internal so that CachingBcAssetRef can copy cachedAsset. - - - - - Auto-registering list of volume manager subclasses for level editor. - - - - - Should calling InstantiateVolume create a new volume? - False for deprecated (landscape hole volume) types. - - - - - These are methods moved from the Data class which rely on core types and so cannot go in the UnturnedDat assembly. - - - - - Intended as a drop-in replacement for existing assets with property uint16s. - - - - - Intended as a drop-in replacement for existing assets with legacy IDs. - - - - - Enables builder pattern for dat edits. - Inclusion of asset type is optional for cases where it's not obvious from context. - - - - - Enables builder pattern for dat edits. - Inclusion of asset type is optional for cases where it's not obvious from context. - - Legacy asset references are converted to GUID if the asset is available. If not available, type prefix - is only used if legacy type changed. - - - - - This overload assumes legacyType has not changed. This will usually be the case. Legacy type would only - change (for example) in cases like spawn tables where they can reference any asset type. - - - - - Kept because lots of modders have been using this script in Unity, - so removing legacy effect id would break their content. - - - - - Active while powered. - - - - - This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius. - - - - - Far clip plane multiplier in-game. - - - - - Far clip plane multiplier in level editor. - - - - - Essentially identical to ContentReference, but MasterBundle is more convenient. - Perhaps in the future all asset/content systems will be consolidated. - - - - - Are name or path null or empty? - - - - - Are both name and path non-null and non-empty? - - - - - Name of master bundle file. - - - - - Path to Unity asset within asset bundle. - - - - - Find client with given RPC channel ID. - - - - - Workshop item does not have any IP restrictions in place. - - - - - Workshop item has an IP whitelist, and server IP is not on it. - - - - - Workshop item has an IP blacklist, and server IP is on it. - - - - - Workshop item does have IP restrictions, and server IP is allowed. - - - - - Workshop item has been banned by an admin. - - - - - Workshop item is hidden from everyone. - - - - - Utilities for testing whether a particular server is allowed to download a workshop item. - Available from client and server side so that clients can help enforce restrictions. - - - - - Workshop item key-value tag storing IP whitelist and blacklist. - - - - - Get ip restrictions value if set, otherwise null. - Can be called from client or server. - - - - - Test whether IP is whitelisted or blacklisted in filter. - - - - - Split x,y-z format into whitelist [x, y] and blacklist [z]. - - - - - Split whitelist-blacklist format and parse string IPs into integer IPs. - - - - - Parse CIDR string IPs into integer IPs. - - - - - Added to player's food value. - - - - - Added to player's water value. - - - - - Added to player's virus value. - - - - - Added to player's hallucination value. - - - - - Get animal or player damage based on game mode config. - - - - - Get zombie or player damage based on game mode config. - - - - - Should player/animal/zombie surface be nulled on hit? - Requested by spyjack for a chainsaw-style shield that was overboard with the blood. - - - - - Should this weapon bypass the DamageTool.allowedToDamagePlayer test? - Used by weapons that heal players in PvE. - - - - - Please refer to ItemWeaponAsset.BuildDescription for an explanation of why this is necessary. - - - - - Please refer to ItemWeaponAsset.BuildDescription for an explanation of why this is necessary. - - - - - Utility for getting local hardware ID. - - One option for future improvement would be using Windows Management Infrastructure (WMI) API: - https://github.com/SmartlyDressedGames/Unturned-3.x/issues/1593 - - - - - Maximum number of HWIDs before server will reject connection request. - - - - - Get the local hardware ID(s). - - - - - Nelson 2025-05-28: keeping this a struct to simplify memory management (no pool needed). If making this more - generic in the future we probably do need to make it a class. - - - - - Only applicable to barricades. - - - - - Preliminary sort order is provided by server, but this takes priority if camera is available. - - - - - Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting. - - - - - Instantiate at least this many items per frame even if we exceed our time budget. - - - - - Called once key/values can be set. - - - - - Lod group will be culled when screen size is smaller than this value. - - - - - Clamp the culling screen percentage to be less than or equal to a maximum value. - - - - - Prevent the lowest LOD from being culled. - - - - - Multiplier to incoming damage. Defaults to 1.0. - - - - - Multiplier to explosive damage. Defaults to value if Armor_Explosion isn't specified. - - - - - Armor against falling damage. Defaults to 1.0, i.e., take the normal amount of damage. - - - - - If true on any worn clothing item, bones never break when falling. - Defaults to false. - - - - - Left-handed character skeleton is mirrored, so most item models are mirrored again to preserve appearance. - Unfortunately this does not work well for some items e.g. the particle system on Elver/Dango glasses. - - - - - Sound to play when equipped. - - - - - If set, find a child meshrenderer with this name and change its material to the character skin material. - - - - - The player can be wearing both a "real" in-game item and a cosmetic item in the same clothing slot. - If true, the real item is shown rather than the cosmetic item. For example, night vision goggles - are shown over any glasses cosmetic because of their gameplay-related green glow. - - - - - Overrides value of TakesPriorityOverCosmetic if is true. - - - - - If true, the value of is used rather than . - Defaults to false. True if is set. - - - - - For 3D clothes. Ideally, this wouldn't be type specific, but we have a separate prefab property for each - type of clothing at the moment. - - - - - The player can be wearing both a "real" in-game item and a cosmetic item in the same clothing slot. - This is called on the real item if has not been set. - If true, the real item is shown rather than the cosmetic item. If false, the cosmetic item can be seen. - - - - - Durstenfeld version of Fisher-Yates shuffle: - https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm - - - - - Same as above, but prevent the last clip from being shuffled to the front in order to prevent repeats. - - - - - Ensures we do not modify the asset in editor. - - - - - Optional case-sensitive identifier in list of blueprints. - Added as an alternative to referencing blueprints by index. - Defaults to null. - - - - - Index into Owner's blueprints list. - - - - - Operation replaces the special behavior for EBlueprintType.Ammo and EBlueprintType.Repair. - - - - - Note: if resolving ref please use GetCategoryTag instead for caching. - - - - - Category tag replaces the blueprint "Type" which acted as both category AND behaviour modifier. - - - - - Only applicable for operations with a target item. - - Nelson 2025-04-11: initially, this was implemented as the last item in supplies list. However, there are a - lot of checks for special handling of target item, so I think it makes sense to separate. - - - - - If not null, these tags must be provided by nearby objects to craft this blueprint. - Note: this is the list as-configured. It has not been filtered according to gameplay config. - - - - - If true, and transferState is enabled, delete attached items. - - - - - Must match conditions to craft. - - - - - Extra rewards given after crafting. Not displayed. - - - - - 2023-05-27: requested by Renaxon because some Arid blueprints are debug-only and - should not be visible when players search by name. (the 3.23.7.0 update made - non-craftable blueprints searchable for Buak) - - - - - Defaults to false. If true, blueprint can become visible in the crafting list even when NPC conditions - are not met. This should typically only be enabled if all conditions are configured to be visible in the - details panel. Otherwise, the default "conditions unmet" label isn't very informative for players. - - - - - Search output items (excluding target item) for specific item. - - - - - App version string packed into a 32-bit number for replication. - - - - - Path to directory containing "Editor", "Menu", "Player", "Curse_Words.txt", etc files. - - - - - Called clientside by BattlEye when it needs us to send a packet to the server. - - - - - Event for plugins when BattlEye wants to kick a player. - - - - - Called serverside by BattlEye when it needs us to send a packet to a player. - - - - - Call whenever something impacting rich presence changes for example loading a server or changing lobbies. - - - - - Only used on client. - Information about current game server retrieved through Steam's "A2S" query system. - Available when joining using the Steam server list API (in-game server browser) - or querying the Server's A2S port directly (connect by IP menu), but not when - joining by Steam ID. - - - - - On client, is current server protected by VAC? - Set after initial response is received. - - - - - On client, is current server protected by BattlEye? - Set after initial response is received. - - - - - Counts "bad" packets per-connection. Bad packets *may* be legitimate, for example a delayed burst of ping - requests. Beyond a certain point, however, it's likely a cheater is trying to waste server processing time. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - After client submits EServerMessage.Authenticate we are waiting - for the EClientMessage.Accepted response. - - - - - Realtime that client sent EServerMessage.Authenticate request. - - - - - File IDs the client thinks the server advertised it was using, or null if UGC response was pending. - Prevents the server from advertising a smaller or fake list of items. - - - - - Needed before loading level. - - - - - Only safe to use serverside. - Get the list of workshop ids that a client needs to download when joining. - - - - - Only safe to use serverside. - Lets clients know that this workshop id is being used on the server, and that they need to download it when joining. - - - - - Channel id was 32-bits, but now that it is in the RPC header it can be 8-bits since there never that many - players online. The "manager" components are on channel 1, and each player has a channel. - - - - - Should the network transport layer accept incoming connections? - If both the queue and connected slots are full then incoming connections are ignored. - - - - - includeQueuedPlayers ensures player won't be kicked because someone on the same IP joined after them. - - - - - Find player in the queue associated with a client connection. - - - - - Find player associated with a client connection. - - - - - Find net transport layer connection associated with a client steam id. This could be a pending player in the - queue, or a fully connected player. - - - - - Find player steam id associated with connection, otherwise nil if not found. - - - - - If there's space on the server, asks player at front of queue for their verification to begin playing. - - - - - Called when determining spawnpoint during player login. - - - - - Is client waiting for response to ESteamPacket.CONNECT request? - - - - - Realtime that client sent ESteamPacket.CONNECT request. - - - - - Nelson 2023-08-09: adding because in some cases, namely workshop download and level loading, - we can't properly handle client transport failures because these loading systems don't - currently support cancelling partway through. (public issue #4036) - - - - - Manages client to server communication. - - - - - Manages server to client communication. - - - - - Connect to server entry point on client. - Requests workshop details for download prior to loading level. - Once workshop is ready launch() is called. - - - - - Callback once client transport is ready to send messages. - - - - - Callback when something goes wrong and client must disconnect. - - - - - Multiplayer load level entry point on client. - Called once workshop downloads are finished, or we know the server is not using workshop. - Once level is loaded the connect packet is sent to the server. - - - - - Event for plugins prior to kicking players during shutdown. - - - - - Set on the server when initializing Steam API. - Used to notify pending clients whether VAC is active. - Set on clients after initial response is received. - - - - - Set on the server when initializing BattlEye API. - Used to notify pending clients whether BE is active. - Set on clients after initial response is received. - - - - - Client should call RequestDisconnect instead to ensure all disconnects have a logged reason. - - - - - Internet server callback when backend is ready. - - - - - If missing map is a curated map then log information about how to install it. - - - - - Was not able to find documentation for this unfortunately, - but it seems the max length is 127 characters as of 2022-09-12. - - - - - Set key/value tags on Steam server advertisement so that client can display text in browser. - - - - - Set key/value tags on Steam server advertisement so that client can display server config in browser. - - - - - Primarily kept for backwards compatibility with plugins. Some RPCs that reply to sender also use this but - should be tidied up. - - - - - Hack to deal with the oversight of reordering the ESteamPacket enum during net messaging rewrite causing - older plugins to send wrong packet type. - - - - - Send to a connected client. - - - - - The server ignores workshop info requests if it's been less than 30 seconds, - so we cache that info for 1 minute in-case we try to connect again right away. - - - - - This information is needed before the level is loaded. - - - - - Advertised server name. e.g., "Nelson's Unturned Server" - - - - - Name of map to load. - - - - - Legacy difficulty mode that should be removed eventually. - - - - - Perspective settings. - - - - - Server's IP from when we originally received response. - Used to test download restrictions. - - - - - Last realtime this cache was updated. - - - - - Hacked-together initial implementation to refuse network messages from specific players. - On PC some cheats send garbage packets in which case those clients should be blocked. - - - - - Close connection, and refuse all future connection attempts from a remote player. - Used when garbage messages are received from hacked clients to avoid wasting time on them. - - - - - Record that a bad packet was received from connection and maybe kick them if rate limit is exceeded. - - - - - Private to prevent plugins from changing the value. - - - - - Should buffers used by plugin network events be read-only copies? - - - - - First four bytes of RPC messages are the channel id. - - - - - Should players be allowed to join this server regardless of whether their version number matches ours? - Useful to allow players to join debug mode servers. - - - - - Is version number supplied by client compatible with us? - - - - - Notify players waiting to join server if their position in the queue has changed. - - - - - Prevent any particular client from delaying the server connection queue process. - - - - - Allows hosting providers to limit the configurable max players value from the command-line. - - - - - Deprecated-ish IPv4 to bind listen socket to. Set by bind command. - - - - - Local address to bind listen socket to. Set by bind command. - - - - - Steam query port. - - - - - If hosting a server, get the game traffic port. - - - - - Called while running - - - - - Used to build packet about each existing player for new player, and then once to build a packet - for existing players about the new player. Note that in this second case forPlayer is null - because the packet is re-used. - - - - - Not exactly ideal, but this a few old "once per player" client->server RPCs. - - - - - Event for plugins when rejecting a player. - - - - - Notify client that they were kicked. - - - - - Notify client that they were banned. - - - - - Player left server by canceling their ticket, or we are disconnecting them without telling them. - Does not send any packets to the disconnecting player. - - - - - Number of transport connection failures on this frame. - - - - - Callback when a pending player or existing player unexpectedly loses connection at the transport level. - - - - - Check whether a server is one of our favorites or not. - - - - - Set whether a server is one of our favorites or not. - - - - - Open URL in the steam overlay, or if disabled use the default browser instead. - Warning: any third party url should be checked by WebUtils.ParseThirdPartyUrl. - - - - - Steam's favorites list requires that we know the server's IPv4 address and port, - so we can't favorite when joining by Steam ID. - - - - - Toggle whether we've favorited the server we're currently playing on. - - - - - Toggle whether we've bookmarked the server we're currently playing on. - - - - - Ping from client to server, measured in milliseconds. - - - - - Number of seconds since January 1st, 1970 GMT as reported by backend servers. - - - - - Current UTC as reported by backend servers. - Used by holiday events to keep timing somewhat synced between players. - - - - - Has the initial backend realtime been queried yet? - Not available immediately on servers because SteamGameServerUtils cannot be used until the actual Steam instance is available. - - - - - Invoked after backend realtime becomes available. - - - - - In here because we want to call this very early in startup after initializing provider, - but with plenty of time to hopefully install maps prior to reaching the main menu. - - - - - This file is of particular importance to the dedicated server because otherwise Steam networking sockets - will say the certificate is for the wrong app. When launching the game outside Steam this sets the app. - - - - - Hackily exposed as an easy way for editor code to check the verison number. - - - - - Has the onApplicationQuitting callback been invoked? - - - - - Moved from OnApplicationQuit when that was deprecated. - - - - - Useful to load files from Steam install of the game while running in the editor. - - - - - Moved from OnApplicationQuit when Application.CancelQuit was deprecated. - - - - - A couple of players have reported the PRO_DESYNC kick because their client thinks they own the gold upgrade, - but the Steam backend thinks otherwise. This option is a bit of a hack to work around the problem for them. - - - - - If specified, all Steam achievements and stats progress is lost. - - - - - If specified, all Steam achievements are unlocked during startup. - - - - - Host has not specified a value. - - - - - Not an actual tag. Used for filtering. - - - - - Host has specified that the server does not sell anything for real money. - - - - - Host has specified that the server does have a real money shop, but does not sell anything which affects gameplay. - - - - - Host has specified that the server does have a real money shop which sells benefits that affect gameplay. - - - - - Server list filter for plugin usage. - - - - - Allows Unity events to send text chat messages from the client, for example to execute commands. - - - - - Text to use when SendDefaultTextChatMessage is invoked. - - - - - All players on the server will see the message. - - - - - Only nearby players will see the message. - - - - - Chat mode to send request in. - - - - - Corresponds to not active and not blending with new weather system. - - - - - Corresponds to transitioning in with new weather system. - - - - - Corresponds to active with new weather system. - - - - - Corresponds to transitioning out with new weather system. - - - - - Corresponds to not active and not blending with new weather system. - - - - - Corresponds to transitioning in with new weather system. - - - - - Corresponds to active with new weather system. - - - - - Corresponds to transitioning out with new weather system. - - - - - Kept for backwards compatibility with mod hooks, plugins, and events. - - - - - Kept for backwards compatibility with mod hooks, plugins, and events. - - - - - [0, 1] used to avoid invoking BlendAlphaChanged every frame. - Compared against globalBlendAlpha not taking into account local volume. - - - - - Hash of lighting config. - Prevents using the level editor to make night time look like day. - - - - - Level designed target fog color. - - - - - Level designed target fog intensity. - - - - - Level designed target atmospheric fog intensity. - - - - - If global ocean plane is enabled then return the worldspace height, - otherwise return the optional default value. Default for volume based - water is -1024, but atmosphere measure uses a default of zero. - - - - - Ticked on dedicated server as well as client so that server can listen for weather events. - - On dedicated server this is always 0xFFFFFFFF. - - - - Reset any global shader properties that may affect the main menu. - - - - - Source effect to group multiple volumes. - - - - - Audio source added to AmbianceAudioGameObject. - - - - - Reset to false before updating volumes. - - - - - Reset to false before updating volumes. - - - - - Reset to zero before updating volumes. If any volume uses distance fadeout, this is the maximum alpha. - - - - - If any volume doesn't use distance fadeout, this is the alpha based on time spent inside.. - - - - - Highest priority of overlapping volumes. - - - - - If any volume doesn't use distance fadeout, this is the minimum of their audio fade-in time. - - - - - If any volume doesn't use distance fadeout, this is the minimum of their audio fade-out time. - Only reset when created so that value is available after leaving all volumes. - - - - - Visualizes reverb zone in-game. - - - - - Can horde beacons be placed in the associated bounds? - - - - - Overrides vehicle physics values in bulk without building asset bundles. - - - - - Only RPCs from the server will be allowed to invoke this method. - - - - - RPCs are only allowed to invoke this method if we're running as server. - - - - - Only RPCs from the owner of the object will be allowed to invoke this method. - - - - - Maximum number of calls per-second per-player. - - - - - Minimum seconds between calls per-player. - Initialized from ratelimitHz when gathering RPCs. - - - - - Index into per-connection rate limiting array. - - - - - Backwards compatibility for older invoke by name code e.g. plugins. - - - - - If changing header size remember to update PlayerManager and allocPlayerChannelId. - - - - - How far to shift compressed voice data. - - - - - If true, this object is owned by a locally-controlled player. - For example, some code is not run for "remote" players. - Always true in singleplayer. Always false on dedicated server. - - - - - Use on server when invoking client methods on the owning player. - - - - - Replacement for ESteamCall.NOT_OWNER. - - - - - Don't use this. Originally added so that Rocketmod didn't have to inject into the game's assembly. - - - - True if the call succeeded, or false if the sender should be refused. - - - - Don't use this. Originally added so that Rocketmod didn't have to inject into the game's assembly. - - - - - Calls array needs rebuilding the next time it is used. - Should be invoked when adding/removing components with RPCs. - - - - - Does array of RPCs need to be rebuilt? - - - - - Find methods with SteamCall attribute, and gather them into an array. - - - - - Encode byte array of voice data to send. - - - - - Decode voice parameters from byte array. - - - - - If true, light contributes to player spotlight. Defaults to true. - - Can be set to false for modders with a custom light setup. For example, this was added - for a modder who is using melee lights to toggle a lightsaber-style glow. - - - - - 32-bit mask granting server plugins additional control over custom UIs. - Only replicated to owner. - - - - - Enables cursor movement while not in a vanilla menu. - - - - - Disable background blur regardless of other UI state. - - - - - Enable background blur regardless of other UI state. - Takes precedence over NoBlur. - - - - - Enable title card while focusing a nearby player. - - - - - Enable explanation and respawn buttons while dead. - - - - - Enable health meter in the HUD. - - - - - Enable food meter in the HUD. - - - - - Enable water meter in the HUD. - - - - - Enable virus/radiation/infection meter in the HUD. - - - - - Enable stamina meter in the HUD. - - - - - Enable oxygen meter in the HUD. - - - - - Enable icons for bleeding, broken bones, temperature, starving, dehydrating, infected, drowning, full moon, - safezone, and arrested status. - - - - - Enable UseableGun ammo and firemode in the HUD. - - - - - Enable vehicle fuel, speed, health, battery charge, and locked status in the HUD. - - - - - Enable center dot when guns are not equipped. - - - - - Enable popup when in-game rep is increased/decreased. - - - - - Default flags set when player spawns. - - - - - 32-bit mask indicating to the server which admin powers are being used. - Does not control which admin powers are available. - - - - - Player is using spectator camera. - - - - - Player is using barricade/structure transform tools. - - - - - Player is using overlay showing player names and positions. - - - - - Per-player event invoked when admin usage flags change. - - - - - Event invoked when any player's admin usage flags change. - - - - - Used by plugins. - - - - - Invoked on client when a plugin changes the widget flags. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Not rate limited because server tracks number of expected screenshots. - - - - - Request client to open a given URL. - Allows plugins to open web browser, but also gives client the chance to ignore it. - - - - - Tell client to join a specific server. - Disconnects client and sends them to the join server screen. - Only used by plugins. - - - - - Is this player currently in a plugin's modal dialog? - Enables cursor movement while not in a vanilla menu. - - - - - Tell the client whether to be in plugin modal mode or not. - Kept from prior to introduction of pluginWidgetFlags. - - - - - Which admin powers are currently in use by the client. - Reported to the server by the client. - Does not control which admin powers are available. - Note: Hacks can prevent this notification from being sent. - - - - - Called on the client to notify the server of admin usage changes (if any). - - - - - Called on the client to notify the server of admin usage changes (if any). - - - - - Teleport to a random player spawn designated in the level. - - - - - Teleport to bed, if player has set one. - - - - - How many calls to will succeed per second. - - - - - How many rate limited actions have been performed recently. - Increased after performing each rate limited action, and decreased over time. - Cannot perform actions when greater than one. - - - - - Note: new official code should be using per-method rate limit attribute. - This is kept for backwards compatibility with plugins however. - - Call this method before any requests the client can spam to the server. - - Should your code proceed with the rate limited action? - - - - Call every frame to cool down rate limiting. - - - - - This code was in the Start message, and should happen before other initialization. - - - - - Hacky replacement for Start() that runs after net ids are assigned but before sending player state. - - - - - Nelson 2024-11-11: Added to help narrow down if player is destroyed outside of Provider.removePlayer. - (public issue #4760) - - - - - Flag in case levelObject is destroyed. - - - - - Poorly named. Specific to InteractableObjectQuest. - - - - - Directly uses input string for custom message popups. - - - - - Player cannot build on a vehicle with occupied seats. - - - - - Horde beacon cannot be built here. - - - - - Item type is not allowed on vehicles. - - - - - Item must be placed closer to vehicle hull. - - - - - Player cannot build while seated in a vehicle because some vehicles are abusable to stick the camera through a wall. - - - - - Interacting with ladder. - - - - - Popup when equipping housing planner "press T to show items" - - - - - Popup when structure is blocked by something named we can format into the message. - - - - - Notice that freeform buildables are blocked by Allow_Freeform_Buildables. - - - - - Popup when structure is blocked by terrain. - - - - - Vehicle doesn't support spray paints. - - - - - Explaining that some blueprints require workstations. - - - - - Nelson 2024-11-29: Curious to put all the gun stats in one place for easier comparison. Rather rudimentary at - the moment so not including in the update. - - - - - Controls how first-person arms are moved for turrets operated from the driver's seat. - - - - - Default. Pushes first-person arms off-screen while aiming. Originally implemented for the Fighter Jet where - it looks weird if your arms are still visible when the camera zooms in while "aiming." - - - - - Push first-person arms off-screen when equipped. - - - - - No particular use in mind, but included for completeness. - - - - - Default. Plays "Hammer" animation if ammo count was zero. - - - - - Regardless of ammo, does not play "Hammer" animation after reloading. - - - - - Regardless of ammo, will play "Hammer" animation after reloading. - - - - - Sound to play when input is pressed but weapon has a fire delay. - - - - - Maximum distance the gunshot can be heard. - - - - - Override Rangefinder attachment's maximum range. - Defaults to range value. - - - - - Can this weapon instantly kill players by headshots? - Only valid when game config also enables this. - - - - - Can this weapon be fired without consuming ammo? - Some mods use this for turrets. - - - - - Ammo quantity to consume per shot fired. - - - - - Simulation steps to wait after input before firing. - - - - - Can magazine be changed by player? - - - - - Can player ADS while sprinting and vice versa? - - - - - If true, the gun cannot shoot unless the player is aiming. - Note: String action overrides this. - Defaults to true for miniguns. - - - - - If true, the gun will stop aiming regardless of player input. - - - - - Seconds from pressing "aim" to fully aiming down sights. - - - - - If true, Aim_Start and Aim_Stop animations are scaled according to actual aim duration. - - - - - Selects a default magazine, following magazine replacements and spawn table resolution. - - - - - Selects a default magazine, following magazine replacements and spawn table resolution. - - - - - How long in seconds after firing to rechamber the gun by playing the Hammer animation. - Only applicable if RechamberAfterShotCount is >0. - Defaults to 0.25 seconds. - - - - - How long in seconds after hammering to eject a bullet casing. - Defaults to 0.45 seconds. - - - - - How long in seconds after reloading to eject bullet casings. - Only applicable if CasingEjectCountAfterReload is greater than zero. - Defaults to 0.5 seconds. - - - - - Defaults to false. If true, attachments must specify at least one non-zero caliber. - Requested by Great Hero J to block vanilla attachments in VGR. - - - - - Determines whether "Hammer" animation plays after attaching a magazine. - Note: this happens when a magazine replaces another OR fills previously empty slot. - - - - - Determines whether "Hammer" animation plays after detached a magazine. - Note: this happens when a magazine is removed from the gun without a replacement. - - - - - Spread multiplier while sprinting. - - - - - Spread multiplier while crouched. - - - - - Spread multiplier while prone. - - - - - Spread multiplier while swimming. - - - - - Spread multiplier while not grounded. - - - - - Recoil magnitude multiplier while the gun is aiming down sights. - - - - - Recoil magnitude while sprinting. - - - - - Recoil magnitude while crouched. - - - - - Recoil magnitude while prone. - - - - - Recoil magnitude while swimming. - - - - - Recoil magnitude while not grounded. - - - - - [0, 1] percentage of maximum range where damage begins decreasing toward falloff multiplier. - - - - - [0, 1] percentage of maximum range where damage finishes decreasing toward falloff multiplier. - - - - - [0, 1] percentage of damage to apply at damageFalloffMaxRange. - - - - - Seconds before physics projectile is destroyed. - - - - - Is this gun setup to have a change of jamming? - - - - - [0, 1] quality percentage that jamming will start happening. - - - - - [0, 1] percentage of the time that shots will jam the gun when at 0% quality. - Chance of jamming is blended between 0% at jamQualityThreshold and jamMaxChance% at 0% quality. - - - - - Name of the animation to play when unjamming chamber. - - - - - Movement speed multiplier while the gun is aiming down sights. - - - - - If >0, hammer animation plays after shooting this many shots after RechamberAfterShotDelay seconds pass. - Defaults to one for EAction.Pump and EAction.Bolt, zero otherwise. - - - - - If >0, emit particles after hammer after EjectAfterHammerDelay seconds pass. - Only applicable if RechamberAfterShotCount is >0. - Defaults to 1. - - - - - If >0, emit particles after reloading after EjectAfterReloadDelay seconds pass. - Defaults to ammoMax for EAction.Break. - - - - - Please refer to . - - - - - Please refer to . - - - - - The dialogue to go to when a message has no available responses. - If this is not specified the previous dialogue is used as a default. - If neither is available then a default "goodbye" response is added. - - For example, Chief_Police_Doughnuts_Accepted dialogue has a single message - "Let's just keep this between the two of us." shown with "prev" dialogue - set to the NPC's root dialogue asset. - - - - True if primary action was started and stopPrimary should be called in the future. - Useful to allow input to be held until action executes. - - - True if secondary action was started and stopSecondary should be called in the future. - Useful to allow input to be held until action executes. - - - - Does useable have a menu open? - If so pause menu, dashboard, and other menus cannot be opened. - - - - - Common base for barricades and structures. - 2023-01-16: not ideal to be adding this so late in development, but at least it is a step in the right direction. - - - - - If true, this item is eligible for zombies to detect and attack when stuck. - Defaults to true. - - - - - Item or spawn table recovered when picked up below 100% health. - - - - - Minimum number of items to recover when salvaged. - - - - - Maximum number of items to recover when salvaged. - - - - - Minimum number of items to drop when destroyed. - - - - - Maximum number of items to drop when destroyed. - - - - - Item or spawn table dropped when destroyed. - - - - - If non-null, this asset provides the listed crafting tags to nearby players. - - - - - Note: this assumes SalvageItemRef points to an ItemAsset. - - - - - By default a crafting ingredient is salvaged. - - - - - Thanks to Glenn Fiedler for this RK4 implementation article: - https://gafferongames.com/post/integration_basics/ - - - - - Higher values return to the target position faster. - - - - - 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?) - - - - - Nelson 2025-04-09: this acted as both category AND behaviour modifier, so I'm separating it into a custom tag - for categorization and a property for overriding how the blueprint processes input items. - - Nelson 2025-04-10: repair and ammo "types" had a variety of quirks I wanted to sort out: - • Moving amount between items required ammo type blueprint, but some modders expressed interest in non-ammo use. - (I.e., ideally better supporting amount on non-ammo items going forward.) - • Both types ignored output items. Output was used to represent the target item. Similarly, the UI added a fake - extra input item representing target item. - • PlayerCrafting and PlayerDashboardCraftingUI re-implemented some crafting item searching logic for finding - the item to refill or repair that can be converted into input item parameters. - The plan at the moment is to make the last input item the "target" item for operations. Legacy ammo/repair - blueprints will then default to no output item and add an extra input item. (And add a variety of parameters - needed to replicate the specialized item search behaviour.) - - - - - Controls what blueprint does with input items. - Separated from EBlueprintType which acted as both category AND operation. - - - - - No special modification to input items. - - - - - Restore target input item to full quality. - - - - - Transfer amount from input items to target item. - - - - - Can be added to any GameObject with a Dropper, Note, or Quest interactable object in its parents. - - - - - Invoked on authority when interactable object is used successfully. - Only invoked on clients if ShouldReplicate is true. - - - - - If true, the server will replicate the OnUsed event to clients as well. - - - - - If ShouldReplicate is enabled, should the RPC be called in reliable mode? - Unreliable might not be received by clients. - - - - - Applied if greater than zero. Defaults to 128. - - - - True if it's a new claim flag. - - - - Player stealth radius cannot go below this value. - - - - - Deal damage and break legs if speed is greater than this value. - - - - - By default players in singleplayer and admins in multiplayer have a faster salvage time. - This option was requested for maps with entirely custom balanced salvage times. - - - - - Cached result of finding all craftingBlacklists. - - - - - Determines which weather can naturally occur in this level. - Null if empty. - - - - - If set, this weather will always be active and scheduled weather is disabled. - - - - - Audio clip to play in 2D when a player dies. - - - - - Defaults to false because some servers have rules and info on the loading screen. - - - - - Volume weather mask used while not inside an ambience volume. - - - - - Allows level to override skill max levels. - Null if empty, otherwise matches 1:1 with PlayerSkills._skills. - - - - - If false, clouds are removed from the skybox. - - - - - Players are kicked from multiplayer if their skin color is within threshold of any of these rules. - - - - - Optional Unturned extensions to the LOD Group component. - - - - - Could be extended, e.g. to clamp cull size separately from the per-LOD sizes. - - - - - Unturned will adjust per-LOD sizes to counteract LOD bias. - Elver has carefully tuned LOD sizes for the interior of the mall, so LOD bias affecting them is undesirable. - Note that due to a Unity bug only LOD0 can be greater than 100%. - - - - - Is player already waiting to exit their group? - - - - - Add player to exit queue if enabled, or immediately remove. - - - - - Remove player from queue if they're waiting to exit their group. - - - - - Invoked immediately before Destroy vehicle. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - If true, a vehicle asset has been replaced. - - - - - Find vehicle with matching replicated instance ID. - - - - - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Supports redirects by VehicleRedirectorAsset. If paintColor is set that takes priority, otherwise if - redirector's SpawnPaintColor is set, that color is used, - - - - - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Supports redirects by VehicleRedirectorAsset. If paintColor is set that takes priority, otherwise if - redirector's SpawnPaintColor is set, that color is used, - - - - - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Supports redirects by VehicleRedirectorAsset. If paintColor is set that takes priority, otherwise if - redirector's SpawnPaintColor is set, that color is used, - - - - - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Supports redirects by VehicleRedirectorAsset. If paintColor is set that takes priority, otherwise if - redirector's SpawnPaintColor is set, that color is used, - - - - - Added so that garage plugins do not need to invoke RPC manually. - - zero spawns without a battery, ushort.MaxValue indicates the battery should be randomly spawned according to asset configuration, other values force a battery to spawn. - - - - For backwards compatibility. This older method spawns a vehicle with a random paint color. (set paintColor - to zero for a random paint color) - - zero spawns without a battery, ushort.MaxValue indicates the battery should be randomly spawned according to asset configuration, other values force a battery to spawn. - - - - Used by external spawn vehicle methods. - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used, - unless preferredColor.a is byte.MaxValue. - - Owner to lock vehicle for by default. Used to lock vehicles to the player who purchased them. - - - - Client-side request server to toggle headlights. - - - - - As client request server to use bonus feature like towing hook or police sirens. - - - - - Helper for servers with huge numbers of vehicles. - Called with fixed span of indexes e.g. [0, 10), then [10, 20). This function then clamps the final span to the vehicle count. - - - - - Does as few tests as possible while maintaining base game expectations. - - - - - Force remove player from vehicle they were in, if any. - Called when player disconnects to tidy up and run callbacks. - - True if player was in a vehicle, false otherwise. - - - - Remove player from vehicle and teleport them to an unchecked destination. - - - - - Is spawnpoint open for vehicle? - - - - - Try to find a random spawnpoint to spawn a vehicle while server is running. - - - - - Add a new vehicle at given spawnpoint. - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Add a new vehicle at given spawnpoint and replicate to clients. - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Called when deciding whether to respawn a new vehicle, after gameplay has begun. - - - - - Called during level load to determine how many vehicles to create. - - - - - Called on server each frame to slowly damage abandoned vehicle. - - - - - +0 = InteractableVehicle - +1 = root transform - +X = VehicleBarricadeRegion - Asset does not know number of train cars, so we always reserve slack. - - - - - Speed is unsigned, so 8 bits allows a range of [0, 256). - - - - - Velocity is signed, so 9 bits allows a range of [-256, 256). - - - - - Cast a ray from the sky to find highest point. - - - - - Cast a ray from slightly above point so indoor teleport nodes work. - - - - - If set, we are responsible for destroying texture. - - - - - This is a bit of a hack in order to simplify the foliage menu when most of the time editors are either - manually placing foliage or automatically baking it. - - - - - Get brush strength multiplier where strength decreases past falloff. Use this method so that different falloffs e.g. linear, curved can be added. - - Percentage of . - - - - Allows foreach loop to iterate Vector2Int within RegionBoundsInt. - - - - - Kept because lots of modders have been using this script in Unity, - so removing legacy effect id would break their content. - - - - - Hack for modders using grenade component as a way to deal radial damage. Not a good long term solution but - widely requested for the meantime until I get the chance to rewrite some of the health stuff. - - - - - Thanks to Glenn Fiedler for this RK4 implementation article: - https://gafferongames.com/post/integration_basics/ - - - - - Higher values return to the target position faster. - - - - - 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?) - - - - - At low framerate deltaTime can be so high the spring explodes unless we use a fixed timestep. - - - - - 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. - - - - - Item along positive direction. - Can be multiple on existing saves or if players found an exploit. - - - - - Item along negative direction. - Can be multiple on existing saves or if players found an exploit. - - - - - Item between floors. - Can be multiple on existing saves or if players found an exploit. - - - - - 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. - - - - - Position at the base of the pillar. - - - - - Yaw if placing pillar at this vertex. - - - - - Pillar or post currently occupying this slot. - Can be multiple on existing saves or if players found an exploit. - - - - - Can be zero if pillar is floating, or up to six in the center of a triangular circle. - - - - - Is there a pillar in this slot, and is it full height (not post)? - - - - - Floors must be placed touching the terrain, or a fake-terrain object like a grassy cliff model. - - - - - 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) - - - - - Side length of square and triangular floor/roof. - Walls can be slightly less, but we treat them as if they are the full length. - - - - - Vertical distance from edge center to wall pivot. - - - - - Vertical distance from edge center to rampart pivot. - - - - - If position is nearly equal within this threshold then edges/vertices will connect. - - - - - Maximum distance from player's viewpoint to allow placement. - - - - - How far to search for empty slot best match. - - - - - Cosine of the angle between ray direction and direction toward slot must be greater than this. - - - - - 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. - - - - - Ensure players, vehicles, zombies, animals, etc are not within this distance of pending placement. - - - - - Distance from triangle pivot to apex of triangle. - - - - - Radius of circle within triangle edges. - - - - - Distance from triangle pivot to center of triangle. - - - - - Small threshold to allow placing even with existing barricades on the floor. - - - - - 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. - - - - - 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. - - - - - Called when a housing item is spawned or after moving an existing item. - - - - - Called before a housing item is destroyed or before moving a housing item. - - - - - Search grid for existing vertex at approximately equal position. - Considers adjacent grid cells if near cell boundary to avoid issues with floating point inaccuracy. - - - - - Search grid for existing edge at approximately equal position. - Considers adjacent grid cells if near cell boundary to avoid issues with floating point inaccuracy. - - - - - Find existing edge and add connection, or add new empty edge. - - - - - Find existing vertex and add connection, or add new empty vertex. - - - - - Find existing edge and set associated wall, or add an empty edge at wall's location. - - - - - Find slot occupied by wall and remove if no longer attached to anything. - - - - - Find existing vertex and set associated pillar, or add an empty vertex at pillar's location. - - - - - Find slot occupied by pillar and remove if no longer attached to anything. - - - - - Hack to prevent ignoring floor which might be overlapping pending floor placement. - For example when placing a square floor on the opposite edge of a spot which has a triangular floor - we do not want to ignore the triangular floor during the physics query. - - - - - Used by triangular floor and roof validation to test for collisions. - - - - - Ensure wall fits in an empty slot. - - - - - Ensure pillar fits in an empty slot. - - - - - Nelson 2024-06-26: With structure rotation replicated as a quaternion we need to be smarter about extracting - yaw from model transform. Quaternion.eulerAngles.y isn't necessarily the yaw anymore. - - - - - Working buffer for placement overlap tests. - - - - - Index of the context parameter, if not None. - - - - - Reflected attribute that was used to find this method. - Contains extra information about how to call it. - - - - - Interactable storage barricade to spawn at the drop position. - - - - - Prefab to spawn falling from the aircraft. - - - - - True once per frame, false otherwise. - - - - - Item ID of barricade to spawn after landing. - - - - - Barricade to spawn after landing. - - - - - Cargo spawn table legacy ID. - - - - - Kill any players inside the spawned interactable box. - Uses hardcoded size of 4 x 4 x 4. - - - - - Determines how to handle a server if it matches a rule. - - - - - Apply label and continue processing rules. - - - - - Show the server in the list. - - - - - Hide the server from the list. - - - - - Note: Port (if set) refers to the Steam query port. - - - - - If true, negate whether this rule matches. i.e., binary NOT. - - - - - Incremented during server list refresh for each server blocked by this rule. - - - - - Optional image bundled alongside the asset file. - - - - - If true the event will only be invoked in offline mode and on the server. - - - - - Hack to prevent hitting volume rate limit because (at least as of 2022-05-24) we do not have an event for finished dragging. - - - - - Whether this animal was updated in this network tick and needs to be resent. - - - - - Alert this animal that it was damaged from a given position. - Offensive animals investigate the position, whereas other animals run away. - - - - - Alerts this animal that it needs to run away. - - The position to run away from. - - - - Keep for plugin backwards compatibility. - - - - - Reduces frequency of UndergroundAllowlist checks because it can be expensive with lots of entities and volumes. - - - - Unturned_Data folder path - - - - Useful to check whether hashing is causing problems. - - - - - Useful to narrow down why a player is getting kicked for modified resource files when joining a server. - - - - - Only set in play mode for determing if we should cache brute force lengths. - - - - - If set, road properties are taken from this asset instead of the older road properties editor. - - - - - Checkered lines when occluded, solid lines when visible. - - - - - Solid lines regardless of depth. - - - - - In-game debug drawing utility similar to Unity's editor Gizmos. - - - - Local space relative to matrix. - - - - Wireframe grid on the XZ plane. - - - - - Center relative to matrix. - - - - - Center relative to matrix. - - - - - LateUpdate so that the most up-to-date gizmos and main camera position are used. - - - - - Callback to draw in the Unity editor scene view. - - - - - Can be null if nothing has been added at position. - - - - - Does not add new lists to empty cells. - - - - - Number of Lists to preallocate in batches. - (GRID_SIZE * GRID_SIZE) % LIST_POOL_SIZE should be zero leftover. - Reduces constructor performance cost. (public issue #4209) - - - - - Matches the console behavior prior to command IO refactor. - - - - - Add fuel to target. - - - - - Remove fuel from target. - - - - - Whether local client is currently penalized for potentially using a lag switch. Server has an equivalent check which reduces - damage dealt, whereas the clientside check stops shooting in order to prevent abuse of inbound-only lagswitches. For example, - if a cheater freezes enemy positions by dropping inbound traffic while still sending movement and shooting outbound traffic. - - - - - Labels for named locations. - - - - - Contains arena outer circle and inner target points. - - - - - Player avatars. - - - - - Arrow oriented with the local player. - - - - - Convert level-space 3D position into normalized 2D position. - - - - - Convert normalized 2D position into level-space 3D position. - - - - - Temporary to unbind events because this class is static for now. (sigh) - - - - - Manages render queue for transparent materials on non-stationary objects. - Updates one material per frame. - - - - - Callback when camera above/under water changes. - - - - - Material to use during the Christmas event instead. - - - - - Material to use during the Halloween event instead. - - - - - Material to use during the April Fools event instead. - - - - - Nelson 2024-08-19: This link has been checked with WebUtils.CanParseThirdPartyUrl, but is not the - potentially altered link to go through Steam's link filter. This way the UI shows the original link. - - - - - Unturned wrapper for Debug.Log, Debug.LogWarning, Debug.LogError, etc. - - - - - Log an exception with message providing context. - - - - - Recursively logs inner exception. - - Should only be called by itself and exception because notifications - to CommandWindow would otherwise get re-sent here as errors. - - - - - This is the ONLY place Unturned should be binding logMessageReceived. - - This gives us greater control over how logging is handled. In particular, Unity's - headless builds route logs (including stack traces) through stdout which is undesirable - for dedicated servers, so we only call Debug.Log* in the editor and development builds. - - - - - Log an exception with message providing context. - - - - - Get SteamID of vehicle's driver, or nil if not driven. - - - - - Crashed into something, if applicable take self damage from collision. - - - - - Remove all color rich formatting so that shadow text displays correctly. - - - - - Shadow text needs the color tags removed, otherwise the shadow uses those colors. - - - - - Wrap text with color tags. - - - - - Wrap text with color tags. - - - - - Wrap text with color tags. - - - - - Replace br tags with newlines. - - - - - Should player be allowed to write given text on a sign? - Keep in mind that newer signs use TMP, whereas older signs use uGUI. - - - - - Disable style, align, and space because they make server list unfair. - - - - - 2023-01-25: fixing killing self with explosive to track kill under - the assumption that this is only used for tracking stats. (public issue #2692) - - - - - "Single-Render" scope as opposed to "Dual-Render" (rendering the scene a second time with a zoomed-in camera). - Blits middle square of the player's view into the viewmodel scope material's render target. - - - - - Finds an existing "{{Cargo/name" (if any), otherwise adds a new one. - - - - - Adds a new "{{Cargo/name" even if one already exists. - - - - - Helper for wiki writers to dump game data into a useful format. - - - - - Non-item replacement for SleekJars. - Arranges children in an equally-spaced ring around the center. - - - - - Actual unfiltered text. - Kept because plugins might be referencing, and game should use directly once state byte array is refactored. - - - - - If profanity filter is enabled this filtered text is displayed on the 3D sign and in the note UI. - Null or empty on the dedicated server. - - - - - Legacy uGUI text on canvas. - - - - - Legacy uGUI text on canvas. - - - - - Splits string and compares substrings ignoring case. - Tokens containing a colon ':' are ignored so that they can represent special filters like MasterBundleSearchFilter. - - - - - Should the RPC be called in reliable mode? Unreliable effects might not be received. - - - - - Applied if greater than zero. Defaults to 128. - - - - - Extra text added to tooltip. - - - - - Internal struct menu uses to sort items in box. - - - - - Item definition id. - - - - - Rarity used to sort mythical > legendary > epic > rare. - - - - - [0, 1] calculated chance of this item being unboxed. - Shown to player in item tooltips. - - - - - Sorts box entries from highest to lowest rarity. - - - - - Format qualityRarities as ##.# - Does not use 'P' format because localized strings unfortunately already had % sign. - - - - - Items server told us we unboxed, but we wait for the animation to finish before showing. - Typically one, but some newer boxes have bonus items occassionally. - - - - - Is one of the unboxed items mythical rarity? - - - - - Items in the box. - - - - - Skip unboxing animation. - Initial call rotates to just before the item, next call skips entirely. - - - - - Does client know about all the granted items? - If not, either something is bad in the econ config (uh oh!) or client is out of date. - - - - - Relatively efficiently find mesh components, and log an error if their mesh is missing, among other checks. - - - - - Unity warns about renderers registered with more than one LOD group, so we do our own validation as part of - asset loading to make it easier to find these. - - - - - Replaced by ServerMethodHandle. - - - - - Replaced by ClientInstanceMethod.InvokeAndLoopback or ClientStaticMethod.InvokeAndLoopback. - - - - - Replaced by ClientMethodHandle invoked with Provider.EnumerateClients_Remote. - Unlike ESteamCall.CLIENTS this is not loopback invoked. - - - - - Replaced by ClientMethodHandle invoked with SteamChannel.GetOwnerTransportConnection. - - - - - Replaced by ClientMethodHandle invoked with SteamChannel.EnumerateClients_RemoteNotOwner. - - - - - Replaced by ClientMethodHandle invoked with Provider.EnumerateClients. - Unlike ESteamCall.OTHERS this will be loopback invoked in singleplayer or listen server. - - - - - May have been used by voice in early versions, but has been completely removed. - - - - - Parses -X=Y from command-line. - Ideally we could do "where T : TryParse" but for the meantime there are specialized subclasses. - - - - - Maps region coord to a list of sub-road renderers in that region. - Unlike older "region" features, coord can be outside of the old bounds. - Not used in the editor or the dedicated server. - - Nelson 2025-03-28: experimenting with this to see whether it reduces time spent culling far-away road - renderers on Rio de Janeiro Remastered. (Lots of roads on this map.) - - - - - Max draw distance outside editor. - - - - - Called by navmesh baking to complete pending object changes that may affect which nav objects are enabled. - - - - - Allows Unity events to broadcast Event NPC rewards. - - - - - Event ID to use when SendDefaultEventId is invoked. - - - - - The event messenger can only be triggered on the authority (server). - If true, the server will replicate the event to clients. - - - - - Interface between the dedicated server command I/O and per-platform console. - - - - - Called when this implementation is setup by command window. - - - - - Called when this implementation is deleted or application quits. - - - - - Called each Unity update. - - - - - Broadcasts when the enter key is pressed. - - - - - Print white message. - - - - - Print yellow message. - - - - - Print red message. - - - - - July 7th! - - - - - This is the only /required/ override of text writer. - - - - - Can be added to certain entities to modify which crafting tags they make available to players. - At the time of writing (2025-04-08) the compatible entities are: - • Barricade - • Structure - • Vehicle - • Resource - • Object - - - - - Each specified component modifies tags. - - - - - If true then level should convert old node types to volumes. - - - - - If true then level should convert old non-volumes types to devkit objects. - - - - - Hash of nodes file. - Prevents using the level editor to make noLight nodes visible. - - - - - Code common to and . - - - - - Nelson 2025-05-13: replacing the "workshop request log" which used transport connection hash code with this - more recent IP address and Steam ID rate limiter. - - - - - Manually placed from the asset browser or old editor. - - - - - Spawned by foliage baking system. - - - - - Brushed on with the foliage tool. - - - - - Utilities for calling workshop functions without worrying about client/server. - This could be nicely refactored into a client and server interface, but not enough time for that right now. - - - - - Client/server safe version of GetQueryUGCNumKeyValueTags. - - - - - Client/server safe version of GetQueryUGCKeyValueTag. - - - - - Search for the value associated with a given key. - - - - - Client/server safe version of GetQueryUGCResult. - - - - - Is file banned? - - - - - Originally this was only in the uGUI implementation, but plugins can create uGUI text fields - regardless of which glazier is used. - - - - - Stockpile item definition id with rev-share for the level creators. - Randomly selected from associated items list. - - - - - Other menus can modify DevkitSelectionToolOptions so we need to sync our menu when opened. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Remove structure instance on server and client. - - - - - Used by ownership change and damaged event to tell relevant clients the new health. - - - - - Legacy function for UseableStructure. - - - - - Spawn a new structure and replicate it. - - - - - Not an instance method because structure might not exist yet, in which case we cancel instantiation. - - - - - Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting. - - - - - Maps prefab unique id to inactive list. - - - - - 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! - - - - - +0 = StructureDrop - +1 = root transform - - - - - Invoked when askUseObjectQuest succeeds. - - - - - When a client method is called on a target object that does not exist yet this class is responsible for - deferring the invocation until the instance does exist. For example until finished async loading. - - - - - Called by generated methods when target object does not exist. If target object has been marked deferred - then the method will be invoked after it exists. - - - - - Add list of deferred invocations for key. Otherwise messages will be discarded assuming it was canceled. - - - - - Remove pending invocations. - - - - - Invoke all deferred calls. - - - - - Invocations are grouped by net id block to ensure order is preserved between related objects. - - - - - Not a member of ClientMethodInfo because it does not need to be looked up using reflection. - - - - - Called before loading level. - - - - - Update currency and owned items if inventory has changed and menu is open. - - - - - Update currency or experience depending what the vendor accepts. - - - - - Nelson 2025-06-10: new code should favor Vector2Int. We don't want to introduce further uint8 region usage. - - - - - Get net ID only if transform is directly registered, not if transform is the child of a registered transform. - - - - - Log every registered pairing. - - - - - Called before loading level. - - - - - Reverse pairing specifically for building net id + relative path name. - - - - - Write header common to both static and instance methods, and return writer. - - - - - Valid when opened in Begin or End mode. - - If the quest is ready to complete the UI is opened in End mode to allow - the player to see what rewards they will receive after clicking continue. - Otherwise, in Begin mode the UI is opened to allow the player to review - the conditions before accepting or declining the request. - - If the player cancels the pending response is NOT chosen. - - - - - Valid when opened in Begin or End mode. - The player clicked pendingResponse in this dialogue to open the quest UI. - - - - - It is useful to be able to reference transforms generically over the network, for example to attach a bullet - hole to a tree or vehicle without tagging it as a tree or vehicle, but most entities placed in the level do not - have unique IDs. To work around this we count downward from uint.MaxValue for level objects to avoid conflicts - with server-assigned net ids. - - - - - Nelson 2025-06-10: this is used by older level file formats, but with placement of trees outside legacy - bounds now supported we use only the index in that case with GetTreeNetIdV2. - - Each region can have ushort.MaxValue trees, and we reserve that entire block so that a region can be slightly - modified on the client or server without breaking all netids in the level. - - - - - Each region can have ushort.MaxValue objects, and we reserve that entire block so that a region can be slightly - modified on the client or server without breaking all netids in the level. - - - - - Devkit instance IDs should already be fairly stable. There is no way any level is using more than 30 bits - for the instance ID, so it should be safe to set those bits to prevent collisions with server net IDs. - - - - - Struct interface so that for transient asset bundles (older workshop mods) they can be preloaded - and retrieved as-needed, but for master bundles the asset loading can be deferred until needed. - - - - - Legacy implementation that preloads assets. - - - - - Save a reference to an object in the asset bundle, but defer loading it until requested by game code. - - - - - Has a new announcement been posted by the developer? - If so, it is given priority over the featured workshop item. - - - - - Called after newsResponse is updated from web request. - - - - - Read News.txt file from Cloud directory to preview on main menu. - - - - - Helper for handlePopularItemResults. - If player has not dismissed item at index then proceed with query and return true. - - - - - Nelson 2024-04-23: A concerned player raised the issue that mature content could potentially be returned in - popular item results. Steam excludes certain mature content by default, but just in case, we check for these - words and hide if contained in title. - - - - - Successfully queried popular workshop items. - Tries to decide on an item that player has not dismissed. - - - - - Response about the item we decided to display. - - - - - Submit query for recently trending popular workshop items. - - - - - Entry point to deciding which workshop item is featured above recent announcements. - - - - - Ensures workshop files are not refreshed more than once per main menu load. - - - - - Synchronize widgets with their values. - - - - - Represents an item the vendor is buying from players. - - - - - Zero is treated as unset. - - - - - Has the contained been animated into visibility on-screen? - Used to disable animating out if disabled. - - - - - Allow Unity events to forcefully remove any barricades inside a sphere. - - - - - Prevents static member from being initialized during MonoBehaviour construction. (Unity warning) - - - - - Mesh Replacement Details - .dat Flags: - Has_1P_Character_Mesh_Override True Bool - Character_Mesh_3P_Override_LODs # Int - Has_Character_Material_Override True Bool - Asset Bundle Objects: - Character_Mesh_1P_Override_# GameObject with MeshFilter (mesh set to a skinned mesh) - Character_Mesh_3P_Override_# GameObject with MeshFilter (mesh set to a skinned mesh) - Character_Material_Override Material - - - - - Replacements for the main 1st-person character mesh. - - - - - Replacements for the main 3rd-person character mesh. - - - - - Replacement for the main character material that typically has clothes and skin color. - - - - - Sort servers by name A to Z. - - - - - Sort servers by name Z to A. - - - - - Sort servers by map name A to Z. - - - - - Sort servers by map name Z to A. - - - - - Sort servers by player count high to low. - - - - - Sort servers by player count low to high. - - - - - Sort servers by max player count high to low. - - - - - Sort servers by max player count low to high. - - - - - Sort servers by normalized player count high to low. - - - - - Sort servers by normalized player count low to high. - - - - - Sort servers by ping low to high. - - - - - Sort servers by ping high to low. - - - - - Information about a game server retrieved through Steam's "A2S" query system. - Available when joining using the Steam server list API (in-game server browser) - or querying the Server's A2S port directly (connect by IP menu), but not when - joining by Steam ID. - - - - - Join server by IP. - - - - - Server is not using an anycast proxy. - - - - - Server host indicated an anycast proxy is in use. - - - - - Moderator flagged server as using an anycast proxy. (EHostBanFlags.QueryPingWarning) - - - - - Ping time measured in milliseconds. - - - - - ID of network transport implementation to use. - - - - - Known plugin systems. - - - - - Probably just checks whether IP is link-local, but may as well use Steam's utility function. - - - - - Active player count divided by max player count. - - - - - Nelson 2024-08-20: This score is intended to prioritize low ping without making it the be-all end-all. The - old default of sorting by ping could put near-empty servers at the top of the list, and encouraged using - anycast caching to make the server appear as low-ping as possible. - - - - - Nelson 2024-08-20: This score is intended to prioritize servers around 75% capacity. My thought process is - that near-empty and near-full servers are already easy to find, but typically if you want to play online you - want a server with space for you and your friends. Unfortunately, servers with plenty of players but an even - higher max players make a 50% score plenty good. - - - - - Nelson 2024-08-20: This score is intended to balance out the downside of the fullness score decreasing for - servers with very high max player counts, and over-scoring servers with low max players. - - - - - Called before inserting to server list. - - - - - Parses value between two keys thing would parse thing - - - - - If set, this server was denied by a server curation list. - - - - - Disables Unity native systems unused by Unturned. - - - - - Enabled for effects held by guns and sentries. - - - - - Listen for OnDestroy callback because mods may be destroying themselves in unexpected ways (e.g., Grenade - component) and still need to be cleaned up. - - - - - Seconds after placement before damage can be dealt. - - - - - Seconds interval between damage dealt. - i.e., will not cause damage if less than this amount of time passed since the last damage. - - - - - UITK implementation consists of a container element which respects the regular position and size - properties, and a child content element which fits itself in the container. - - - - Start Vertex - Start Vertex + Start Tangent - End Vertex + End Tangent - End Vertex - - - Start Vertex - Start Vertex + Start Tangent - End Vertex + End Tangent - End Vertex - - - Start Vertex - Start Vertex + Start Tangent - End Vertex + End Tangent - End Vertex - - - Start Vertex - Start Vertex + Start Tangent - End Vertex + End Tangent - End Vertex - World units length along curve. - Spacing between points. - Max estimate distance from uniform interval before we have to retry. - How many times to retry if the estimate is too far off. - If length is already known pass it in, otherwise it's recalculated. - Time along curve. [0-1] - - - Start Vertex - Start Vertex + Start Tangent - End Vertex + End Tangent - End Vertex - Spacing between points. - Max estimate distance from uniform interval before we have to retry. - How many times to retry if the estimate is too far off. - - - - Single percentage randomness with two outcomes. - - - - - If true the event will only be invoked in offline mode and on the server. - - - - - Percentage chance of event occurring. - - - - - Invoked when random event occurs. - - - - - Invoked when random event does NOT occur. - - - - - Whether the pointer is currently in a spot that can be painted. - - - - - Get brush strength multiplier where strength decreases past falloff. Use this method so that different falloffs e.g. linear, curved can be added. - - Percentage of . - - - - Allows pooling elements. - If set, this is called rather than removing element from scroll view. - - - - - Kind of hacky... Used by player list for group connections. - - - - - Read commands from standard input, and write logs to standard output. - - - - - Broadcast the inputCommited event. - - - - - Synchronize console's title bar text. - Virtual because at one point Win32 SetTitleText was required. - - - - - Intercept the Ctrl-C or Ctrl-Break termination. - - - - - Handle Ctrl-C or Ctrl-Break on the game thread. - - - - - Has Ctrl-C or Ctrl-Break signal been received? - - - - - Is the Ctrl-C or Ctrl-Break signal being handled? - - - - - Names of achievements that can be granted by NPC rewards. - - - - - Name of promo level to additively load. - - - - - UTC when to begin load promo level. - - - - - UTC when to stop loading promo level. - - - - - Folder name of the map when it was in the game. - - - - - Published steam id for the file after it was moved to the workshop. - - - - - Dependencies to subscribe to when subscribing through the in-game menu. - e.g. Hawaii's assets are stored separately on the workshop. - - - - - Only applies if player is not subscribed to the workshop file. - Should an advertisement be shown in the Menu > Singleplayer > Curated list? - - - - - Published steam id to subscribe to. - - - - - If logging in after this point, subscribe. - - - - - If logging in before this point, subscribe. - - - - - Maps not installed by default, but recommended from maps list. - - - - - Maps to install to automatically. - Used early in startup to hopefully install before reaching main menu. - - - - - When moving between physics materials we need to continue any previous tire kickup particles until they expire. - This class manages the individual effect per-physics-material. Each wheel can have multiple at once. When the - particles have despawned and the effect is no longer needed, the effect game object is returned to the effect - pool and this class is returned to . - - - - - Name from . - - - - - Instantiated effect. Null after returning to pool. - - - - - Effect's transform. Null after returning to pool. - - - - - Component on gameObject. Null after returning to pool. - - - - - Whether this effect should be emitting particles. False stops the particle system immediately, whereas true - only starts playing on the next frame to avoid filling a gap between positions, e.g., after a jump. - - - - - Prevents repeated lookups if asset is null, while allowing asset to be looked up each time this effect - becomes active so that it can be iterated on without restarting the game. - - - - - Does this wheel affect brake torque? - - - - - Turn on/off physics as needed. Overridden by isAlive. - - - - - [0.0, 1.0] normalized position of wheel along suspension. - - - - - [0.0, 1.0] normalized position animated toward replicatedSuspensionState. - - - - - Model position interpolated toward animatedSuspensionState according to modelSuspensionSpeed. - - - - - [0, 360] angle of rotation around wheel axle. Measured in degrees because Quaternion.AngleAxis takes degrees. - - We track rather than using GetWorldPose so that we can alternate between using replicated and simulated - results without snapping transforms. - - - - - List is created if this wheel has a collider and uses collider pose. Null when vehicle is destroyed to - prevent creation of more effects. - - - - - Instance corresponding to current ground material. Doesn't necessarily mean the particle system is active. - - - - - Called after construction and on all clients and server when a player stops driving. - - - - - Called when vehicles explodes. - - - - - Called during FixedUpdate if vehicle is driven by the local player. - - - - - Calculate suspension state from GetWorldPose result. - - Nelson 2024-03-25: Originally we used the result of GetWorldPose for the model transform and calculated - the suspension state from it because I thought Unity was internally using the spring position that isn't - (currently) exposed to the API. Whether or not it is, it seems fine to calculate the spring position using - the ground hit point instead. We switched entirely away from GetWorldPose so that the wheel can retain - its roll angle when transitioning between locally simulated and replicated. - - - - - Called during Update on dedicated server only if replicated suspension state is enabled. - - - - - Set replicated suspension state AND animated suspension state when vehicle is first received. - - - - - - Supported when locally simulated and on remote clients. - - - - - Called during Update on client. - - - - - Called during Update if vehicle is driven by the local player. - - - - - Called during Update on the server while vehicle is driven by player. - - - - - Seamlessly teleports player to an equivalent position at the destination upon contact. - - - - - Target position and rotation. - - - - - Only used in the Unity editor for visualization. - - - - - If true, PopulateAsset can modify data. For example, to replace deprecated properties. - Only true if asset re-saving and asset metadata parsing are enabled, and asset origin allows re-saving. - Modifications are not saved if asset has any errors in order to avoid losing data. - - - - - If true, an asset with the same ID or GUID has been added to the current asset mapping, replacing this one. - - - - - If true, errors related to this asset were reported during loading. - - - - - Null or empty if created at runtime, otherwise set by when loading. - - - - - Contents of file this asset was loaded from. Only kept if data re-saving is enabled. (So that this memory - is collected after populating the asset.) - - - - - Master bundle this asset loaded from. - - - - - Were this asset's shaders set to Standard and/or consolidated? - Needed for vehicle rotors special case. - - - - - Should texture non-power-of-two warnings be ignored? - Unfortunately some third party assets have odd setups. - - - - - Should read/write texture warnings be ignored? - - - - - Hash of the original input file. - - - - - Maybe temporary? Used when something in-game changes the asset so that it shouldn't be useable on the server anymore. - - - - - Most asset classes end in "Asset", so in debug strings if asset is clear from context we can remove the unnecessary suffix. - - - - - Remove "Asset" suffix and convert to title case. - - - - - e.g. Canned Beans (Consumeable Item) - - - - - Perform any initialization required when PopulateAsset won't be called. - - - - - Planning ahead to potentially convert the game to use Unity's newer Addressables feature. - - - - - 2023-04-17: suggestion is to have a hardcoded list of hate speech that gets filtered - regardless of whether profanity filter is enabled. (https://forum.smartlydressedgames.com/t/22477) - - - - - Special asset type that isn't (shouldn't be) returned by asset Find methods. Instead, if found when resolving - an asset legacy ID or GUID, Find is called again with the target specified by this asset. - - - - - Enumerate elements that are not in the pool. - - - - - Sanity check all returned elements have a gameObject. - - - - - Map creator can specify a constant weather mode. - - - - - Associates a train vehicle ID with the index of a road path to spawn it on. - The level only spawns the train if this vehicle ID isn't present in the map yet, so every train on the map has to be different. - - - - - Should underwater bubble particles be activated? - - - - - Should positions underground be clamped above ground? - Underground volumes are used to whitelist valid positions. - - - - - If true, certain objects redirect to load others in-game. - - - - - If true, electric objects are always powered, and generators have no effect. - - - - - Display version in the format "a.b.c.d". - - - - - Version string packed into integer. - - - - - Number of custom tips defined in per-level localization file. - Tip keys are read as Tip_# - - - - - LevelBatching is currently only enabled if map creator has verified it works properly. - - - - - If true, map creator has verified the clutter option works as-expected. - - - - - Absolute path to the map folder. - - - - - Whether unity analytics should track this map's name. Don't want to burn all the analysis points! - - - - - Maps included with the game only, separate from category because arena maps are misc. - Category is set as part of the config file. This is only mainly used to enable unity analytics tracking for map name. - - - - - Only used for play menu categories at the moment. - - - - - SHA1 hash of the Level.dat file. - - - - - Test whether this map's workshop file ID is in the curated maps list. - - - - - Web URL to map feedback discussions. - - - - - If true, this info is out-of-date and may have been renamed or deleted. - - - - - Preview.png should be 320x180 - - - - - Get a random file path in the /Screenshots folder, or fallback to Level.png if it exists. - - - - - Get a random file path in the /Screenshots folder - - - - - When adding or removing entries remember to update NetMessages size and regenerate NetCode! - - - - - Client requesting workshop files to download. - - - - - Client has loaded the level. - - - - - Client providing Steam login token. - - - - - Client sending BattlEye payload to server. - - - - - Client sent a ping. - - - - - Client responded to our ping. - - - - - Client calling an RPC. - - - - - Client providing asset GUIDs with their file hashes to check integrity. - - - - - Client intends to disconnect. It is fine if server does not receive this message - because players are also removed for transport failure (e.g. timeout) and for expiry - of Steam authentication ticket. This message is useful to know the client instigated - the disconnection rather than an error. - - - - - Error code that the server exited with. - 0 is succesful, anything else is an error. - - - - - Empty if successful, - otherwise an explanation of the first error encountered. - - - - - Register all built-in asset and useable types. - - - - - Can be added to any GameObject to receive weather events for a specific custom weather asset. - - - - - GUID of custom weather asset to listen for. - - - - - Invoked when custom weather is activated, or immediately if weather is fading in when registered. - - - - - Invoked when custom weather finishes fading in, or immediately if weather is already fully active when registered. - - - - - Invoked when custom weather is deactivated and begins fading out. - - - - - Invoked when custom weather finishes fading out and is destroyed. - - - - - GUID parsed from WeatherAssetGuid parameter. - - - - - Default. Create a material instance for child renderer of Toggle game object. - Downside of this is exclusion from level batching texture atlas. - - - - - Object does not have any toggleable emissive materials. - - - - - Prevents calling getOrLoad redundantly if asset does not exist. - - - - - If set, overrides model prefab in the level editor. - - - - - Clip.prefab - - - - - Object.prefab - - - - - If true, object will be hidden when rendering GPS/satellite view. - Defaults to true if is set. - - - - - If true, Nav game object will be instantiated in singleplayer and on dedicated server. Useful for objects - which need to affect navmesh baking without colliding with zombies during gameplay. - Defaults to true for "medium" and "large" objects. - - - - - If true, Nav game object will be instantiated in the level editor. Useful for objects which need collision - with zombies during gameplay without affecting navmesh baking. - Defaults to true for "medium" and "large" objects. - - - - - Should landing on this object inflict fall damage? - - - - - If true, object is not loaded when clutter is turned off in graphics menu. - - - - - Property is not exposed at the moment because interactability properties should really be moved into some - sort of sub-asset. - - - - - Same as interactabilityDialogueRef, not public because it really needs to be cleaned up. :( - - - - - Effect played when single segment is destroyed. - - - - - Effect played when all segments are destroyed. - - - - - Weapon must have matching blade ID to damage object. - Both weapons and objects default to zero so they can be damaged by default. - - - - - [0, 1] probability of dropping any rewards. - - - - - If true, zombies can attack this object if it's blocking them. Defaults to false. - - - - - Multiplier for damage from zombies if RubbleCanZombiesDamage is true. - - - - - Controls how rubble affects Nav game object. - - - - - If set (>0), alerts nearby entities when an individual section is destroyed. - - - - - If set (>0), alerts nearby entities when all sections are destroyed. - - - - - Should colliders in the Triggers GameObject with "Kill" name kill players? - If Triggers GameObject is not set, searches Object instead. - - - - - Should this object only be visible if gore is enabled? - Allows pre-placed blood splatters to be hidden for younger players. - - - - - Only activated during this holiday. - - - - - Object to use during the Christmas event instead. - - - - - Object to use during the Halloween event instead. - - - - - Get asset ref to replace this one for holiday, or null if it should not be redirected. - - - - - If any conditions use flags they will be added to a set, - otherwise null is returned. - - - - - Recursively change all children including root from oldTag to newTag. - Aborts if a child doesn't match the old tag because it might be something we shouldn't change the tag of. - True if tags were all successfully changed. - - - - - Recursively change all children including root from oldLayer to newLayer. - Aborts if a child doesn't match the old layer because it might be something we shouldn't change the layer of. - True if layers were all successfully changed. - - - - - Called if we have a valid Nav GameObject. - Recast requires any meshes used on the Nav objects to be CPU readable, so we log errors here if they're not marked as such. - - - - - Should zombie(s) of the required type be spawned when player enters the area? - - - - - How many to spawn if spawning is enabled. - - - - - If greater than zero, find this zombie type configured in the level editor. For example, if the level editor - lists "0 Fire (4)", then 4 is the unique ID, and if assigned to this condition a zombie from the "Fire" - table will spawn. - - - - - Navmesh index player must be within. If set to byte.MaxValue then anywhere on the map is eligible. - - - - - Only kills within this radius around the player are tracked. - - - - - Only kills outside this radius around the player are tracked. - NSTM requested this for a sniping zombies quest. - - - - - If spawning is enabled, whether to use the timer between spawns. - - - - - Shows inspect buttons for each item mentioned in purchasable box or bundle's description text. - - - - - Manages global post-process volumes. - - - - - Callback when in-game graphic settings change. - - - - - Callback when player changes perspective. - - - - - Unfortunately EditorPrefs cannot be used in constructor. - - - - - Represents whether a player can craft a provided blueprint. If yes, which items to use, if no, why not. - Previously, some of this data was (confusingly) stored in the blueprint definition. - For performance, caller should re-use a list of BlueprintStatus and *not* discard unused results. - - - - - Total number of missing required nearby crafting tags. - - - - - Total required input item count minus available input item count. - - - - - Currently only used by housing planner. - Doesn't work with NPC conditions / rewards. - - - - - Currently only used by housing planner. - Doesn't work with NPC conditions / rewards. - - - - - Used to sort blueprints from "most craftable" (1) to "least craftable" (0). - - - - - Reset values set by PlayerCrafting.UpdateBlueprintDynamicStatus. - - - - - If not zero, use this amount instead of . - Used by as amount of ammo needed. - - - - - If true, cancel updating status as soon as anything goes wrong. - False for client UI where all info about blueprint is needed for display. - True on server where extra processing is a waste. - - - - - If set, log errors here. - - - - - Is current UTC time within this time span, and player has not dismissed? - - - - - Has the current time span been dismissed? - For example, player may have dismissed a previous event but not this current one. - - - - - Is current UTC time within this time span? - - - - - Allows file name to be included in kick message that client would otherwise not know. - - - - - Actual max value is plus one because message never contains zero items. - - - - - Has player dismissed the given workshop item? - - - - - Track that the player has dismissed the given workshop item. - - - - - Has player already auto-subscribed to the given workshop item? - - - - - Track that the player has auto-subscribed to the given workshop item. - - - - - Find colliders in gameObject and encapsulate their bounding boxes together. - - True if bounds were determined, false otherwise. - - - - Find colliders in gameObject and the point closest to position, otherwise use gameObject position. - - Collider is only included if its layer is enabled in layer mask. - - - - Does sphere overlap anything? - - - - - Allows foreach loop to iterate renderers defined in lod group. - - - - - Counts hits per-IPv4 address (if available) and per-SteamID (if available). - Connection is blocked if more than "threshold" hits occur within category (IPv4/SteamID). - Hit count resets when "window" seconds have passed since last hit. - - - - - If hit is within this many seconds of previous hit, it counts. Otherwise, counter is reset. - - - - - If more than this many hits occur the limit is reached. - - - - - Hack, we put this string on a newline for box probabilities. - - - - - Called on the client after a new message is inserted to the front of the list. - - - - - Called on the server when preparing a message to be sent to a player. - Allows controlling how %SPEAKER% is formatted for the receiving player. - - - - - Called on the server when formatting a player's message before sending to anyone. - Allows structuring the message and where the player's name is, for example: '[CustomPluginRoleThing] %SPEAKER% - OriginalMessageText' - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Add a newly received chat message to the front of the list, - and remove an old message if necessary. - - - - - Previous messages sent to server from this client. - Newest at the front, oldest at the back. Used to repeat chat commands. - - - - - Send a request to chat from the client to the server. - - - - - Allows Unity events to send text chat messages from the client, for example to execute commands. - Messenger context is logged to help track down abusive assets. - - - - - Allows Unity events to broadcast text chat messages from the server. - Messenger context is logged to help track down abusive assets. - - - - - Server send message to specific player. - Used in vanilla for the welcome message. - Should not be removed because plugins may depend on it. - - - - - Server send message to specific player. - Used in vanilla by help command to tell player about command options. - Should not be removed because plugins may depend on it. - - - - - Server send message to all players. - Used in vanilla by some alerts and broadcast command. - Should not be removed because plugins may depend on it. - - - - - Serverside send a chat message to all players, or a specific player. - - Contents to display. - Default text color unless rich formatting overrides it. - Player who sent the message (used for avatar), or null if send by a plugin. - Send message to only this player, or all players if null. - Mostly deprecated, but global/local/group may be displayed. - URL to a 32x32 .png to show rather than a player avatar, or null/empty. - Enable rich tags e.g., bold, italics in the message contents. - - - - Nelson 2024-10-14: We might want to elaborate on this with "client-side chat commands" in the future, but - for the meantime I've hacked in this one command. - - - - - If set, find a child meshrenderer with this name and change its material to the character hair material. - - - - - If non-zero, legacy ID of final Asset to return. - - - - - If non-zero, legacy ID of SpawnAsset to resolve. - - - - - If both legacy IDs are zero this GUID will be used. If the target asset is - a SpawnAsset it will be further resolved, otherwise the found asset is returned. - - - - - Can be enabled by spawn tables that insert themselves into other spawn tables using the roots list. - If true, zeros the weight of child tables in the parent spawn table. - - - - - Has this spawn been added as a root of its child spawn table? - Used for debugging spawn hierarchy in editor. - - - - - Helper method for plugins because IDs are internal. - - - - - Parent spawn assets this would like to be inserted into. - - - - - Zero weights of child spawn tables. - Called when inserting a root marked isOverride. - - - - - Do tables need to be sorted and normalized? - - - - - Sort children by weight ascending, and calculate their normalized chance as a percentage of total weight. - - - - - Remove from roots, and if reference is valid remove us from their children. - - - - - Remove from tables, and if referencing a child table remove us from their roots. - - - - - Spawns an animal into the world. - - The ID of the animal. - Position to spawn the animal. - Angle to spawn the animal. - Whether the animal is dead or not. - - - - Gets the animal at a specific index. - - The index of the animal. - - - - - Find replacement spawnpoint for an animal and teleport it there. - - - - - Used in arena mode to reset all animals to dead. - - - - - Stripped-down version of structure prefab for previewing where the structure will be spawned. - - - - - Whether preview object is currently highlighted positively. - - - - - Time when "Use" animation clip started playing in seconds. - - - - - Length of "Use" animation clip in seconds. - - - - - True when animation starts playing, false after placement sound is played. - - - - - Whether the "Use" animation clip started playing. - - - - - If running as server, whether ReceiveBuildStructure has been called yet. - - - - - Whether basic range and claim checks passed. - - - - - Position the item should be spawned at. - - - - - Rotation the item should be spawned at. - - - - - Interpolated toward customRotationOffset. - - - - - Allows players to flip walls. - - - - - Vertical offset using scroll wheel. - - - - - Whether enough time has passed for "Use" animation to finish. - - - - - Whether animation has reached the time when placement sound should play. - - - - - Used to aid backwards compatibility as much as possible when transitioning Unity versions breaks asset bundles. - - - - - Unity 5.5 and earlier per-asset .unity3d file. - - - - - When "master bundles" were first introduced in order to convert older Unity 5.5 asset bundles in bulk. - - - - - Unity 2018 needed a new version number in order to convert materials from 2017 LTS asset bundles. 2019 did not need a - new version number, but in retrospect it seems unfortunate that we cannot distinguish them, so 2020 does have its own. - - - - - 2021 LTS+ - - - - - The first time asset loading finishes it will load the main menu. - - - - - If true, either loading during initial startup or full refresh. - - - - - If true, currently searching locations added after initial startup loading. - - - - - Has initial client UGC loading step run yet? - Used to defer asset loading for workshop installs that occured during startup. - - - - - Has initial map loading step run yet? - Used to defer map loading for workshop installs that occured during startup. - - - - - Calling this "legacy" is a bit of a stretch because even most of the vanilla assets are - built around the 16-bit IDs. Ideally no new code should be relying on 16-bit IDs however. - - - - - Incremented when assets are added or removed. - Used by boombox UI to only refresh songs list if assets have changed. - - - - - In singleplayer and the level editor this is the same as defaultAssetMapping, - but when playing on a server a subset of assets based on the server's workshop files is used. - - - - - Should folders be scanned for and load .dat and asset bundle files? - Plugin developers find it useful to quickly launch the server. - - - - - Do we want to enable shouldDeferLoadingAssets? - - - - - Should extra validation be performed on assets as they load? - Useful for developing, but it does slow down loading. - - - - - Should asset file metadata such as line numbers and comments be parsed? - Useful for development (e.g., error messages), but may slow down loading and increases RAM usage. - - - - - Should asset files be re-saved after all loading is finished? - Requires asset metadata. Useful for automatically upgrading .dat/.asset files. - - - - - Should some specific asset types which opt-in be allowed to defer loading from asset bundles until used? - Disabled by asset validation because all assets need to be loaded. - - - - - Should workshop asset names and IDs be logged while loading? - Useful when debugging unknown workshop content. - - - - - Should a JSON report of all the game's assets be exported? - - - - - Should GC and clear unused assets be called after every loading frame? - Potentially useful for players running out of RAM, refer to: - https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/1352#issuecomment-751138105 - - - - - Should modded spawn tables being inserted into parents be logged? - Useful for debugging workshop spawn table problems. - - - - - Loaded master bundles. - - - - - Loading master bundles. - - - - - Master bundle from root /Bundles directory containing vanilla assets. - - - - - While an asset is being loaded, this is the master bundle for that asset. - Used by master bundle pointer as a default. - - - - - This method supports . - - - - - Find an asset by GUID reference. - This method supports . - - Asset with matching GUID if it exists, null otherwise. - - - - Find an asset by GUID reference. - This method supports . - Maybe considered a hack? Ignores the current per-server asset mapping. - - Asset with matching GUID if it exists, null otherwise. - - - - Find an asset by GUID reference. - This method supports . - Maybe considered a hack? Ignores the current per-server asset mapping. - - Asset with matching GUID if it exists, null otherwise. - - - - Load content from an assetbundle. - - - - - Find an asset by GUID reference. - This method supports . - - Asset with matching GUID if it exists, null otherwise. - - - - Find an asset by GUID reference. - This method supports . - - Asset with matching GUID if it exists, null otherwise. - - - - This method supports . - - - - - This method supports . - - - - - This method supports . - Note: this method doesn't handle redirects by VehicleRedirectorAsset. - - - - - This method supports . - Note: this method doesn't handle redirects by VehicleRedirectorAsset. - - - - - This method supports . - - - - - This method supports . - - - - - Useful if GUID can reference a different asset type than legacy ID. For example, gun magazine GUID can - reference a SpawnAsset while its legacy ID cannot. - This method supports . - - - - - Append assets that extend from result type. - - - - - Maybe considered a hack? Ignores the current per-server asset mapping. - Append assets that extend from result type. - - - - - While playing on server the client will use the same dictionary/list of assets the server uses in order - to reduce issues with ID conflicts. - - 2023-05-27: server now ALSO uses the same logic to ensure IDs are applied in consistent order regardless - of multi-threaded loading order. - - - - - Search all loaded master bundles for one in path's hierarchy. - - - - - Find loaded master bundle by name. - - - - - Unload all asset bundles from memory, and empty known list. - Called when reloading assets. - - - - - Catches exceptions thrown by LoadFile to avoid breaking loading. - - - - - Called when a new workshop item is installed either on client or server. - - - - - Reload assets in given folder. - - - - - Do we have any new spawn assets that have not been linked yet? - Used to skip linking spawns if not required when downloading assets. - - - - - Can now be safely called multiple times on client in order to handle spawns for downloaded maps. - Spawn tables have "roots" which allow mods to insert custom spawns into the vanilla spawn tables. - This method is used after workshop assets are loaded on client, or after the dedicated server is done downloading workshop content. - - - - - Look through all item blueprints and log errors if there are duplicates. - - - - - Look through all dialogue and check that their referenced - dialogueID or vendorID is an actual loaded asset. - - - - - Manually run asset unload and garbage collection in the hope - that it will minimize RAM allocated during loading. - - - - - Helper for Assets.init. - Load all non-map assets from: - /Bundles/Workshop/Content - /Servers/ServerID/Workshop/Content - /Servers/ServerID/Bundles - - - - - Helper for Assets.init. - Load all non-map assets from subscribed UGC. - - - - - Helper for modders creating workshop content. - Loads folders in the "Sandbox" directory the same way workshop files are loaded. - - - - - Helper for Assets.init. - Load all assets in each map's Bundles folder, and content in map's Content folder. - - - - - Not the tidiest place for this, but it allows startup to pause and show error message. - Occasionally there have been reports of the steamclient redist files being out of date on the dedicated - server causing problems. For example: https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/2866#issuecomment-965945985 - - - - - Note: inventory service does not support exchanging multiple items simultaneously. - - - - - Optional parameter for error logging and responding to the invoker. - - - - - Wraps audio source to prevent caller from meddling with it, and to allow the implementation - to change in the future if necessary. - - - - - 2D audio. - - - - - Optional parent transform to attach the audio source to. - - - - - 0 = 2D, 1 = 3D - - - - - Associates an ID with the instance of the sound being played. This ensures that if Stop() is called - on an old handle it will not stop playing the audio if the component has already been recycled. - - - - - True while inactive, false while playing. - - - - - Timer needs playId as well in case source has been recycled by the time duration expires. - - - - - Not extendable until transport API is better finalized. - - - - - How many seconds message should popup. - - - - - Which item ID we thought was there. If the item ID currently at the coordinates doesn't match we clear this hotkey. - - - - - Start/Stop input is encoded as 2 bits, 1 bit for Start flag and 1 bit for Stop flag. - - Prior to 2023-03-16 it was a single bit. The server would Start if true and the previous frame was false, - and vice versa call Stop if false and the previous frame was true. The problem with that approach was when - the client FPS is higher than the simulation FPS a series of repeated attack presses would be treated as a - continuous held attack input. Semi-auto guns were difficult to shoot at their max rate of fire. Sending both - allows the server to theoretically call Start every simulation frame as opposed to only half. - - First approach was to OR Start if held, otherwise OR Stop. This doesn't work because for example when Aim is - pressed the Stop flag will already be enabled, so the gun Starts aiming, Stops aiming, Starts aiming, and then - stays aiming rather than just Start and stay aiming. Instead we only want Stop to be sent once. - - - - - Wants to "start" primary or secondary input. (e.g., Useable.startPrimary) - - - - - Wants to "stop" primary or secondary input. (e.g., Useable.stopPrimary) - - - - - Invoked from tellEquip after change. - - - - - Skin applied to the currently equipped useable. - - - - - Does equipped useable have a menu open? - If so pause menu, dashboard, and other menus cannot be opened. - - - - - For aiming toggle input. - - - - - Get ragdoll effect to use when the current weapon deals damage. - - - - - It should be safe to call this immediately because hotkeys are loaded in InitializePlayer. - - - - - Prevent multiple hotkeys from referencing the same item. - - - - - Left-handed characters need the stat tracker to be flipped on the X axis so that the text reads properly. - ItemTool doesn't know about left/right handedness, so for the moment that's handled here because only players need this fixed up. - - - - - Match stat tracker gameobject's isActive to whether skins are visible. - - - - - Match all stat tracker visibilities to whether skins are visible. - - - - - Called clientside to ask server to equip an item in the inventory. - - - - - Hacked-in to bypass regular clientside checks when client would predict the item at given coords. - - - - - Remove the item from inventory so that if we die before the item isn't dropped - - - - - Finish dequipping from - - - - - Invoked before dealing damage regardless of whether the punch impacted anything. - - - - - (Temporarily?) separated out from simulate to try and get a better exception call stack. - - - - - (Temporarily?) separated out from simulate to try and get a better exception call stack. - - - - - (Temporarily?) separated out from simulate to try and get a better exception call stack. - - - - - Allow UI to process input [0, 9] key press when cursor is visible. - - - - - Process input [0, 9] key press. - - - - - If equipped item is bound to a hotkey, return the button [0, 9] associated. - Otherwise, return -1. - - - - - Called by input when preparing for simulation frame. - - - - - Called once by Setup. - - - - - Extension method for Thread class. - Plugins use this. - I might have accidentally removed it due to zero refs and Pustalorc was mad: - https://github.com/SmartlyDressedGames/Unturned-3.x-Community/discussions/4131 - - - - - Throw an exception if current thread is not the game thread. - - - - - Only on dedicated server: throw an exception if current thread is not the game thread. - - - - - Search loaded assets for blueprints that output a single structure item and are - available on the current map. - - - - - Update status of all relevant blueprints. - - - - - Currently saved craftableBlueprint for asset may have become uncraftable, - in which case we try finding a craftable replacement. - - - - - Get a blank status from the pool or construct a new one. - - - - - Search inventory for housing items, count the quantity of each, and remove - duplicate entries from the list because it is used for the UI. - - - - - Stripped-down version of structure prefab for previewing where the structure will be spawned. - - - - - Whether preview object is currently highlighted positively. - - - - - Position the item should be spawned at. - - - - - Rotation the item should be spawned at. - - - - - Interpolated toward customRotationOffset. - - - - - Allows players to flip walls. - - - - - Vertical offset using scroll wheel. - - - - - Box in the HUD with selected item name and quantity. - - - - - Blueprints which create a structure item. - - - - - One craftable blueprint per potential structure item. - - - - - Recycled blueprint statuses. - - - - - Steam currency codes seem to be ISO 4217, however the documentation (as of 2021-01-29) does not say so. - - - - - 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. - - - - - Windows-specific extensions of Windows console input. - Uses the Win32 API to force a console to be created and destroyed. - - - - - Directory the game files are installed in. For the editor this is the /Builds/Shared directory. - Windows and Linux: contains the executable and the Unturned_Data directory. - MacOS: contains the Unturned.app bundle. - - - - - Handles VehicleRedirectorAsset (if any) and returns actual vehicle asset (if any). - - - - - Handles VehicleRedirectorAsset returning load paint color override (if any) and returns actual vehicle asset (if any). - - - - - Handles VehicleRedirectorAsset returning spawn paint color override (if any) and returns actual vehicle asset (if any). - - - - - Handles VehicleRedirectorAsset (if any) and returns actual vehicle asset (if any). - - - - - Handles VehicleRedirectorAsset returning load paint color override (if any) and returns actual vehicle asset (if any). - - - - - Handles VehicleRedirectorAsset returning spawn paint color override (if any) and returns actual vehicle asset (if any). - - - - - Handles VehicleRedirectorAsset (if any) and returns actual vehicle asset (if any). - - - - - Handles VehicleRedirectorAsset returning load paint color override (if any) and returns actual vehicle asset (if any). - - - - - Handles VehicleRedirectorAsset returning spawn paint color override (if any) and returns actual vehicle asset (if any). - - - - - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - - - - Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. - - true if matching vehicle asset was found. (Not necessarily whether vehicle was spawned.) - - - - Tools like carjacks and tires can be used in safezone by admins for maintenance. - - - - - Create glazier implementation. Invoked early during startup. - - - - - Multiplier for the maximum distance the gunshot can be heard. - - - - true if key existed and was removed. - - - true if key existed and was removed. - - - - Unturned equivalent of unity's PlayerPrefs. - Convenient for saving one-off key-value pairs. - - - - - String table specifically for Unity physics material names. - Implemented so that tires can more efficiently replicate which ground material they are touching. - - - - - Get an ID that can be used to reference a physics material name over the network. If given material name - isn't supported (e.g., not registered in a PhysicsMaterialAsset or over max material limit) returns - instead. - - - - - Get name of a physics material from network ID. Returns null if ID is null, e.g., if the sent name wasn't - registered or was over the max material limit. - - - - - Called when resetting network state. - - - - - Called on server and singleplayer before loading level. - - - - - Number of bits needed to replicate PhysicsMaterialNetId. - - - - - Implemented by components to support taking damage from explosions. - Not intended for external use (yet?) and may need to change. - - - - - Used to exclude dead entities from further evaluation. - - - - - Used to sort damage from nearest to furthest. - - - - - Intended for internal use only. - - - - - Data that we pool to reduce allocations, but needs to be separate per-invocation of explosion in case it's - invoked recursively. (for example, by blowing up a vehicle) - - - - - Replacement for playerDamaged. - - - - - Replacement for zombieDamaged. - - - - - Replacement for animalDamaged. - - - - - Refer to ExplosionPoolData for pooling explanation. - - - - - Was necessary when structures were children of level transform. - - - - - Was necessary when trees were children of ground transform. - - - - - Somewhat hacked-together to find owner of a vehicle, barricade, or structure descendant. - - - - - Get average explosionArmor of player's equipped clothing. - - - - - Refer to getPlayerExplosionArmor for explanation of total/average. - - - - - Do damage to a zombie. - - - - - Legacy function replaced by damageZombie. - - - - - Legacy function replaced by damageZombie. - - - - - Do damage to an animal. - - - - - Legacy function replaced by damageAnimal. - - - - - Legacy function replaced by damageAnimal. - - - - - This unwieldy mess is the original explode function, but should be maintained for backwards compatibility with plugins. - - - - - Used if explosion won't damage anything. - - - - - Do radial damage. - - - - - Server spawn impact effect for all players within range. - - - - - Server spawn impact effect for all players within range. Optional "spectator" receives effect regardless of distance. - - - - - Server spawn effect by ID for all players within range. Optional "spectator" receives effect regardless of distance. - - - - - Server spawn effect for all players within range and instigator receives effect regardless of distance. - - - - - parent should only be set if that system also calls ClearAttachments, otherwise attachedEffects will leak memory. - - - - - Nelson 2025-03-10: This aims to avoid messing with Magazine transform IsActive unless skin already did. - - - - - Nelson 2024-11-15: By default, attachments use their corresponding "hook" transform. For example, magazines - use the "Magazine" transform as their parent. If a child of the hook transform matches a caliber in the - attachment's caliber list that is used instead. - - - - - Should the buying and selling lists be alphabetically sorted? - - - - - This prevents identical tag provider setups from listing in the UI. - For example, two workbenches providing the same tags shouldn't show two UI listings. - - - - - Player does not want to see this blueprint. - - - - - Player wants to save this blueprint in a special category. - - - - - Find nearby crafting tag providers and query their tags. - - - - - Tests whether nearby tags include specified tag. - Doesn't update nearby tags, so call UpdateAvailableCraftingTags if out-of-date. - - - - - Requested for plugin use. - Notifies owner they should refresh the crafting menu. - - - - - Update anything that will not change as blueprint is invoked repeatedly on server. - - - - - Update anything that can change as blueprint is invoked repeatedly on server. - - - - - Returns true if should exit early. - If updating behavior here please remember to update . - - - - - Find all item assets available to the player for crafting. - Used to more quickly identify blueprints that might be craftable, rather than testing all blueprints. - If updating behavior here please remember to update . - - - - - Allows housing planner to craft without playing effect, without also allowing - cheaters to craft without playing effect. (if it were an RPC param) - - - - - Get local player's per-blueprint preferences. - - - - - Set local player's per-blueprint preferences. - This is helpful both to prevent accidentally crafting certain blueprints (like blindfolds) when click to - craft is enabled, and to save frequently used blueprints. - - - - - Why isn't tags list public visibility? Because if adding features to (for example) consume a resource when - crafting tag provider is used that will require an API change. - - - - - Extensions to the built-in Screen class. - We have run into multiple problems with the Screen.resolutions property over the years, so this class aims to - protect against bad data. - - - - - Work-in-progress plan to allow modders to create custom physics effects. - - - - - Can crops be planted on a given material? - - - - - Can oil drills be placed on a given material? - - - - - Original width field is misleadingly named. It represents half the width of the flat section of the road. - - - - - Original depth field is misleadingly named. It represents half the "up" size of the road. - - - - - Distance along the terrain surface normal to move each road vertex. - - - - - New code should not use this. Only intended for backwards compatibility. - - - - - Ideally the interactable components should have a reference to their barricade, but that will maybe happen - after the NetId rewrites. For the meantime this is to avoid calling FindBarricadeByRootTransform. If we go - the component route then FindBarricadeByRootTransform will do the same as this method. - - - - -1 if table was not found. - - - - By default, clickable only responds to LeftMouse without the Control modifier. - Unturned (currently) filters left/right mouse and modifiers outside Glazier, - so add activators for left/right and control modifier to all clickables. - - - - - USS best practices mentions inline styles have a higher memory overhead, so we - only apply an inline value if it doesn't match the default :root font style. - - - - - USS best practices mentions inline styles have a higher memory overhead, so we - only apply an inline value if it doesn't match the default :root text alignment. - - - - - Ehh kind of a stretch to mark this obsolete or for backwards compatibility. Introducing it for road assets - which specify the PhysicMaterial to assign to the colliders. Specifying an asset path is available, but - for the common case we will use the built-in vanilla resources. - - - - - Get legacy enum corresponding to Unity physics material object name. - Moved from obsolete checkMaterial method. - - - - - If collider and its physics material are not null, get the physics material's name. Null otherwise. - - Nelson 2025-04-22: this method may seem silly on first glance. However, I tracked down some every-frame - memory allocation to getting the PhysicMaterial.name property. This method caches the instance ID to - name lookup in a dictionary to avoid that. Note: we don't worry about clearing the dictionary because - there aren't very many physics materials. - - - - - Base class for uGUI implementations of primitive building block widgets. - - - - - Called after constructor when not populating from component pool. - - - - - Called after constructor when re-using components from pool. - - - - - Synchronize uGUI component colors with background/text/image etc. colors. - Called when custom UI colors are changed, and after constructor. - - - - - Synchronize uGUI component sprites with theme sprites. - Called when custom UI theme is changed, and after constructor. - - - - False if element couldn't be released into pool and should be destroyed. - - - - Unity recommends enabling components after parenting into the destination hierarchy. - - - - - RectTransform children should be attached to. Overridden by ScrollView content panel. - - - - - This helper property's purpose is to: - - Ensure other properties don't accidentally remove LayoutElement if others need it. - - Ensure LayoutElement is destroyed before returning to pool. - - - - - Parameters for connecting to a game server. - - Admittedly there are other parameters to the Connect method, - but those are for detecting advertisement discrepencies and can be null. - - - - - Server's public IP address of a Steam "Fake IP" address. - - - - - Port for Steam's "A2S" query system. This the port we refer to when - sharing a server's address (e.g., 127.0.0.1:queryport). - - - - - Port for game traffic. i.e., Steam manages the query port socket while - we manage the connection port socket. The game assumes it's the query - port plus one. NOTE HOWEVER after the introduction of "Fake IP" support - (2023-12-07) the connection port is the same as the query port for fake - IPs. In keeping with the spirit of fake values to simplify existing code, - we act as if the connection port is plus one except in the appropriate - ClientTransport code when the fake IP is detected. - - - - - Referred to as "Server Code" in menus. - Used if address is zero. - - - - - If -1, this region is finished activating/deactivating. - Otherwise, incremented once per frame until per-region count is reached. - - Per-region data is removed when isInsideMask is false and progressIndex is -1. - - - - - If true, this region is within MaxDistance of current CameraCoord. - - - - - Tracks activation and deactivation of Regions as camera moves around the level. - - - - - Mark all cells as finished loading and remove cells outside the camera view. - Used after teleporting or loading. - - - - - Caller passes an empty dictionary to be filled with update info. - Increments progressIndex for each returned region. - If region is finished updating, call NotifyRegionFinishedUpdating. - - - - - Called when progressIndex has reached end of given region. - - - - - Fill output set with mask offsets applied to current camera coordinate. - - - - - Find changes between old and current coordinate sets to mark regions in/out of mask. - - - - - Reset region's progress counter and change inside/outside status. - - - - - Allows Unity events to spawn effects. - - - - - GUID of effect asset to spawn when SpawnDefaultEffect is invoked. - - - - - If true the server will spawn the effect and replicate it to clients, - otherwise clients will predict their own local copy. - - - - - Should the RPC be called in reliable mode? Unreliable effects might not be received. - - - - - Transform to spawn the effect at. - If unset this game object's transform will be used instead. - - - - - Applied if greater than zero. Defaults to 128. - - - - - Marker for counting number of tips. - - - - - Camera used while transitioning between scenes to prevent the "no cameras rendering" warning. - - - - - Shown when game connection ping is significantly higher than server browser ping. At the time of writing - (2025-01-17) this is likely because the server is using an "anycast proxy" in front of Steam A2S cache. - - - - - Set to Time.frameCount + 1 while loading. - In the past used realtime, but that was unreliable if an individual frame took too long. - - - - - Select a loading image while on the startup screen or a level without any images. - - - - - Convert world-space point into region coordinates that may be out of bounds. - - - - - Convert world-space position into a region coordinate that may be out-of-bounds. - - - - - Returns true if coord is within legacy range. - - - - - Clamp position into the maximum bounds expected by the game, not necessarily the level bounds. - - True if position was modified. - - - - Kick players maybe trying to impersonate me. I guess nobody else named Nelson is allowed in the game! - 2023-09-19: relaxed this a bit by trimming names and using Equals/Starts/Ends rather than Contains - because there was a player with Nelson in their username. - - - - - GUID of the asset this is referring to. - - - - - Whether the type has been asigned. Note that this doesn't mean an asset with exists. - - - - - True if resovling this type reference would get that type. - - - - - Maximum count of naturally spawned boss zombies. Unlimited if negative. - Game will not spawn/respawn boss zombie types passing this limit, but quest spawns can bypass it. - - - - - Base class for UIToolkit implementations of primitive building block widgets. - - - - - Set by child. - - - - - Synchronize control colors with background/text/image etc. colors. - Called when custom UI colors are changed, and after constructor. - - - - - If set, takes priority over VehicleRedirectorAsset's paint color and over VehicleAsset's default paint color. - - - - - Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the - vehicle spawner requires to properly set paint color. - - - - - Plugin-only event when throwable is spawned on server. - - - - - Allows NPCs to trigger plugin or script events. - - - - - instigatingPlayer can be null. For example, if instigated by NpcGlobalEventMessenger. - - - - - Circular mask for 2D distances in meters on a 2D cell grid. - Includes a cell if the meters distance between the center cell - and the closest point on test cell is within radius. - - - - - World space distance in meters. - - - - - Region cell size in meters. - - - - - Data in common between list downloaded from a GET request and a ServerListCurationAsset. - - - - - Optional web image path if icon isn't included. - - - - - Incremented during server list refresh for each server blocked by this rule. - - - - - Starting position when the bullet was fired. - - - - - Only available on the server. For use by plugins developers who want to analyze deviation between approximate - start direction and final hit position using and - per public issue #4450. Note that origin and direction on server are not necessarily exactly the same as on - the client for a variety of reasons, including that bullets on the client can be spawned between simulation - frames when the aim direction was different. (Aim direction is updated every drawn frame on the client as - opposed to every simulation frame on the server.) Rather than kicking for one particularly large deviation - we would recommend tracking stats for each shot's actual deviation vs max theoretical deviation. Remember - to account for bullet drop and that aim spread is relative to this direction. (For example, a shotgun may - fire ~8 pellets in a cone around this direction.) Note also that in third-person the bullet can turn up to - 90 degrees from the aim direction if the camera is up against a wall. - - - - - Combination of gun and attachments' bullet gravity multipliers. - - - - Whether plugin allowed attachment. - - - - Plugin-only event when bullet is fired on server. - - - - - Plugin-only event when bullet hit is received from client. - - - - - Plugin-only event when projectile is spawned on server. - - - - - reticuleHook.localPosition after instantiation, or zero if null. - - - - - True if startPrimary was called this simulation frame. - Allows gun to shoot even if stopPrimary is called immediately afterwards. - - - - - Remaining calls to tock before firing. - - - - - Shot counter used by needsRechamber and RechamberAfterShotCount. - - - - - Is the tactical attachment toggle on? - e.g. True when the laser is enabled. - - - - - Should stat modifiers from the current tactical attachment be used? - - - - - Factor e.g. 2 is a 2x multiplier. - Prior to 2022-04-11 this was the target field of view. (90/fov) - - - - - Zoom multiplier in third-person. - - - - - Whether main camera field of view should zoom without scope camera / scope overlay. - - - - - Original barrel and magazine assets are supplied because they may have already been deleted. Barrel is only - valid if quality was greater than zero. - - - - - Called on server and owning client. - - - - - Calculate damage multiplier for individual bullet. - - - - - Requested for plugin use. - - - - - Request from the server to play a gun jammed animation. - Since client can't predict chamber jams we fixup the predicted ammo count. - - - - - Note: This is the m/s² acceleration, not the multiplier. - - - - - This is a bit of a hack... aimAccuracy is [0, maxAimingAccuracy] and changed during each FixedUpdate call, - but was used in some gameplay display features like holo sight, laser, ADS, etc. (yes, should - be de-coupled from FixedUpdate but that is its own issue) To smooth this out we interpolate - slightly behind the aimAccuracy value depending on the time since FixedUpdate. - - - - - Holographic sights follow the true aiming direction regardless of viewmodel animation. - - - - - Note: This is the multiplier, not the m/s² acceleration. - - - - - Code common for regular gun and sentry gun. - - - - - Consolidates parameters for older, separate inventory search methods. - - The "player" part of the name refers to the PlayerInventory-specific parameters. It can still be used to search - the Items class, in which case those parameters do not apply. - - - - - List to populate with matching items. - - - - - If true, search player's primary and secondary weapon slots. - Only applicable when used with PlayerInventory class. (I.e., not Items class.) - - - - - If true, search storage container player is currently interacting with (if any). - Only applicable when used with PlayerInventory class. (I.e., not Items class.) - - - - - If greater than zero, search exits early once Results count meets MaxResultCount. - - - - - If set, item must be this type to match. - - - - - If set, AssetRef must be a reference to item's asset to match. - Replaces older "id" parameter which matched if item's legacy asset ID was the same. - - - - - If true, items with amount of zero can match. Otherwise, they are ignored. - Replaces older "findEmpty" parameter which matched if (findEmpty || amount > 0). - - - - - If true, items with an "amount" >= their MaxAmount are ignored. Otherwise, they can match (default). - - - - - - If set, item must be of type ItemCaliberAsset. Asset's caliber list must either: - • Contain this caliber ID. - • Or, if empty, IncludeUnspecifiedCaliber must be true. - Otherwise, item is ignored. - - - - - If set, item must be of type ItemCaliberAsset. Asset's caliber list must either: - • Contain one of these caliber IDs. - • Or, if empty, IncludeUnspecifiedCaliber must be true. - Otherwise, item is ignored. - - - - - Only applicable if CaliberId or AnyCaliberIds is set. - If true, assets with an empty calibers list can match. Otherwise, they are ignore.d - - - - - If set, do not include this specific item instance in search results. - Kind of hacked-in for ignoring "target item" as a potential input item. - - - - - Nearly identical to InventorySearch aside from: - • Struct instead of class to improve garbage collection performance in pooled lists. - • More understandable name. - • Provides reference to Items holding "Jar." Longer-term this should be preferred over the "Page" property. - - - - - Serverside delete an amount of this item. - - False for crafting where original item can be kept, true when selling to vendors. - Total amount deleted. - - - - -1 if no eligible item is found. - If includeMaxQuality is true an item with quality of 100 can be "lowest quality", otherwise item has to - be less than 100 quality. - - - - - Please use PlayerInventorySearchResultV2 for better performance! - - - - - Serverside delete an amount of this item. - - Total amount deleted. - - - - Used by the server to validate client Unity player files (assemblies and resources). - - - - - Should players be allowed to join this server regardless of whether their DLL hash matches ours? - Useful to allow players to join debug mode servers. - - - - - Should players be allowed to join this server regardless of whether their resources hash matches ours? - Useful to allow players to join debug mode servers. - - - - - Experience to add or subtract when used. Defaults to zero. - - - - - Canned beans have skins from April Fools. - - - - - Note: if calling ItemRef.Get() please use FindItemAsset instead to avoid redundant asset lookups. - - - - - Does this blueprint output create the specified item? - - - - - Reset dragging handle and register transformation. - - - - - If true, vest and backpack spawn System_Area instead of System_Hook. - - - - - Sets the point to lerp from, should be called after resetting position or things like that. - - - - - Logs enabled when WITH_NSB_LOGGING is defined. - Tracking down an issue where snapshot buffer stops working for groups of networked objects. - - - - - When adding or removing entries remember to update NetMessages size and regenerate NetCode! - - - - - Server sent a ping. - - - - - Server replying to our ping. - - - - - Server is shutting down shortly. - - - - - Create game object for player. - - - - - Destroy game object for player. - - - - - Download these files before loading the level. - - - - - Server wants additional info before accepting us. - - - - - Server has accepted us and will create a player game object. - - - - - Server rejected us, we will go back to the menu. - - - - - Banned either during connect or gameplay. - - - - - Kicked during gameplay. - - - - - Should be converted to an RPC. Leftover from prior to net messaging code. - - - - - Should be converted to an RPC. Leftover from prior to net messaging code. - - - - - Server sending BattlEye payload to client. - - - - - Infrequent notification of queue position. - - - - - Server calling an RPC. - - - - - Allow Unity events to apply damage in a sphere. (doesn't have any visual effects) - Intended to replace unsupported/unintentional use of "Grenade.cs" and "Rocket.cs" scripts. - - - - - Zombie explosion types have slight variations e.g. lighting zombies on fire. - - - - - If greater than -0.5, overrides default radius zombies and animals will be alerted within. - - - - - If true, per-surface effects like blood splatter are created. - - - - - If true, explosion damage passes through Barricades and Structures. - - - - - Speed to launch players away from blast position. - - - - - Overrides how fall damage is calculated when landing on this game object or its descendants. - - - - - Could be extended in the future to increase, decrease, or set fall damage. - - - - - Potentially useful for an event to toggle the override. - - - - - Character will not take any fall damage. - - - - - Payload for the DamageTool.damageZombie function. - - - - - Should game mode config damage multiplier be factored in? - - - - - Equivalent to the "armor" parameter of the legacy damage function. - - - - - Defaults to 1. - - - - - If not null and damage is applied, is called with this position (startle: true). - - - - - If non-zero, NPC name is shown as ??? until bool flag is true. - - - - - This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius. - - - - - Returning an Asset rather than the older IDs allows GUIDs to be used. - legacyTargetAssetType is required for compatibility with spawn tables using legacy 16-bit IDs. If set to - None and the spawn asset uses legacy IDs a warning is logged explaining GUIDs are necessary. - - - - - - Doesn't support spawn assets with legacy 16-bit IDs. - - - - - For backwards compatibility with features that still need a legacy ID rather than asset. - - - - - For backwards compatibility with features that still need a legacy ID rather than asset. - - - - - For backwards compatibility with features that still need a legacy ID rather than asset. - - - - - If using a map or mods from the workshop, this class monitors them for changes so the server can be restarted. - - - - - Request status of workshop items. - - - - - Called the next tick after update(s) detected. - - - - - Called when a queried item's update timestamp is newer than our initially loaded version. - - - - - Called when results from a call to submitQueryRequest are available. - - - - - Called once timer reaches interval. - - - - - Were update(s) detected that should be handled on next tick? - - - - - Are we done monitoring? - Default finished once an update is detected. - - - - - Interval between query submissions. - - - - - Accumulated time before submitting query after passing interval. - - - - - Callback from Steam when results from a call to submitQueryRequest are available. - - - - - Slightly interpolated copy of actual spread angle to smooth out sharp changes like crouch/prone. - - - - - Allows interpolatedSpread to snap to target value when crosshair becomes visible. - - - - - Deserialize JSON onto an existing object instance. - - - - - Potentially useful for players with corrupted cloud storage. - https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/2756 - - - - - Introduced much later (2020) than most of the other methods in this class (2014) in order to properly handle - BOM/preamble of text files. Matches somewhat undesirable legacy behavior like creating directories. - - - - - NOTE: From and to are both relative to PATH. - - - - - Read GUI texture from a .jpg or .png file. - - - - - Read GUI texture from a .jpg or .png file. - - - - - Windows-specific extensions of console input. - Uses the Win32 API to force a console to be created and destroyed. - - - - - Called by navmesh baking to complete pending object changes that may affect which nav objects are enabled. - - - - - Hide culling volume by default because new mappers might wonder what these purple boxes - are and why their number goes away after moving objects. - - - - - Check a fixed number of volumes for visibility updates per frame. - - - - - Any volumes in the process of enabling/disabling get updated once per frame. - - - - - True for the next update after the player is teleported. - - - - - Associates items of the same currency, e.g. dollars or bullets. - - - - - Should this item/value be shown in the list of vendor currency items? - Useful to hide modded item stacks e.g. a stack of 100x $20 bills. - - - - - String to format value {0} into. - - - - - String to format value {0} of total {1} into if not otherwise specified in NPC condition. - - - - - Sum up value of each currency item in player's inventory. - - - - - Does player have access to items covering certain value? - - - - - Add items to player's inventory to reward value. - - - - - Remove items from player's inventory to pay required value. - - - - - Sort currency entries by value. - - - - - Temporary replacement for static block member because plugins might depend on it. - - - - - Parses fv:X from input string and loads X.txt from game folder. - - - - - Called after lod bias may have changed. - - - - - Can be added to any GameObject with an interactable binary state in its parents. - - If players should not be allowed to interact with the object in the ordinary manner, - add the Interactability_Remote flag to its asset to indicate only mod hooks should control it. - - - - - When a state change is requested in singleplayer it should be treated as if running as a client on a server. - This is the default to match behavior from before this option was added. - - - - - When a state change is requested in singleplayer it should be treated as if running as a dedicated server. - - - - - Invoked when interactable object enters the Used / On / Enabled state. - - - - - Invoked when interactable object enters the Unused / Off / Disabled state. - - - - - Should the OnStateEnabled and OnStateDisabled events be invoked when the object is loaded, becomes relevant - in multiplayer, and is reset? True is useful when visuals need to be kept in sync with the state, whereas - false is useful for transient interactions. - - - - - Controls how state change requests are performed when running as both client and server ("listen server"). - On the dedicated server, requesting a state change overrides the current state without processing NPC - conditions, whereas when a client requests a state change NPC conditions apply. This option fixes the - inconsistency in singleplayer of whether to treat as server or client. (public issue #4298) - At the time of writing (2024-01-29) listen server only applies to singleplayer. - - - - - Set state to Enabled if currently Disabled. - - On dedicated server this directly changes the state, - but as client this will apply the usual conditions and rewards. - - - - - Set state to Disabled if currently Enabled. - - On dedicated server this directly changes the state, - but as client this will apply the usual conditions and rewards. - - - - - Toggle between the Enabled and Disabled states. - - On dedicated server this directly changes the state, - but as client this will apply the usual conditions and rewards. - - - - - Tests whether current or recent history contains point. - - - - - Half second history at 50 tickrate. - - - - - Not originally supported by networking. Added temporarily during netpak rewrite because the quaternion - compression is so much better for vehicles than three byte Euler rotation. - - - - - Gets barricades both attached to vehicles and not attached to vehicles. - - - - - Nelson 2025-04-08: thank goodness that this didn't use the temperature system! (For some reason?) Makes it - relatively straightforward to convert campfires and ovens to Crafting Tags, and means vanilla has a test - case for the mod hook, too. (This method tests for CraftingHeatTag in radius.) - - - - - Index into Blueprints list. -1 means blueprint name is used instead. - - - - - Name to look for in Blueprints list. - - - - - Other menus can modify DevkitSelectionToolOptions so we need to sync our menu when opened. - - - - - Thanks to Glenn Fiedler for this RK4 implementation article: - https://gafferongames.com/post/integration_basics/ - - - - - Higher values return to the target position faster. - - - - - 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?) - - - - - Should objects that failed to load due to missing assets be saved? - If true, a placeholder transform is created and used to save. - If false, objects without assets are zeroed during save. (old default) - - - - - Hash of Objects.dat - - - - - Called by navmesh baking to complete pending object changes that may affect which nav objects are enabled. - - - - - Stagger regional visibility across multiple frames. - - - - - Caches uint16 ID to ID redirects. - - - - Matches handle returned by request, or -1 if cached. - - - - Revive all trees in a specific region. - - - - - Revive trees worldwide. Used between arena rounds. - - - - - Material instantiated when dual-render scopes are enabled. - Overrides the material of the gun sight attachment. - - - - - Unintuitively (to say the least), a pitch of 0 is up, 90 is forward, and 180 is down. - - - - - Nelson 2025-06-27: previously, stopping aim cancelled the sway offset immediately. When - experimenting with removing the dual-render scope blur this felt jarring. - - - - - Reset to actual fov when first used. - - - - - If true, freecam controls take input priority. - Previously named isOrbiting. - - - - - Should player stats be visible in spectator mode? - - - - - Smoothing adds some initial blend-in which felt nicer for explosion rumble. - - - - - Slightly clamped third-person version of "eyes" value to prevent sweep from hitting floor. - - - - - Get point-of-view in world-space. - - - - - Get point of view in worldspace without the left/right leaning modifier. - - - - - This is only used after capturing dual-render scope, not when exiting scope overlay. - Otherwise the lighting vision may have changed between entering and exiting the scope. - - - - - Clamp _pitch within the [0, 180] range. - - - - - Clamp yaw while seated, and keep within the [-360, 360] range. - - - - - Can spectating be used without admin powers? - Plugins can enable spectator mode. - - - - - Can workzone be used without admin powers? - Plugins can enable workzone permissions. - - - - - Can spectator overlays be used without admin powers? - Plugins can enable specstats permissions. - - - - - Called from the server to allow spectating without admin powers. - Only used by plugins. - - - - - Allow use of spectator mode without admin powers. - Only used by plugins. - - - - - Called from the server to allow workzone without admin powers. - Only used by plugins. - - - - - Allow use of workzone mode without admin powers. - Only used by plugins. - - - - - Called from the server to allow spectator overlays without admin powers. - Only used by plugins. - - - - - Allow use of spectator overlay mode without admin powers. - Only used by plugins. - - - - - Multiple hits are necessary because the first returned hit is not always the closest. - - - - - Sweep a sphere to find collisions blocking the third-person camera. - - Valid world-space camera position. - - - - Replacement for enum origin. - - - - - Hardcoded built-in name, or name of workshop file if known. - - - - - Steam file ID if loaded from the workshop, zero otherwise. - - - - - If true, when added to asset mapping the new assets will override existing ones. - This ensures workshop files installed by servers take priority and disables warnings about overlapping IDs. - - - - - If true, we can re-save .dat/.asset files from this origin. - Defaults to false. Only true for assets in the game install folder. - - - - - Can be added to any GameObject to receive text chat events. - - - - - Message can be in any chat channel. - - - - - Message must be in Global channel. - - - - - Message must be in Local channel. - - - - - Filter to apply to message type. - - - - - Sphere radius (squared) around this transform to detect player messages. - e.g. 16 is 4 meters - - - - - Substring to search for in message. - - - - - Message must start with phrase text. - - - - - Message must contain phrase text. - - - - - Message must end with phrase text. - - - - - Filter to apply to message text. - - - - - Invoked when a player message passes the filters. - - - - - Calculate angle in radians the player would need to offset their aim upward - to hit a target a certain distance away. - - - - - Separate from isEnabled to hide markers when they are outside the scope. - - - - - Used to sync hasLabel visibility. - - - - - True while fading in or fully transitioned in. - - - - - True while fading in, but not at full intensity. - - - - - True while finished fading in. - - - - - True while fading out, but not at zero intensity. - - - - - True while finished fading out. - - - - - True while fading in or out. - - - - Matches handle returned by request, or -1 if cached. - - - - Read commands from standard input, and write logs to standard output. - - - - - Each Update we consume a key press from the console buffer if available. - Unfortunately ReadLine is not an option without blocking output, so we maintain our own pending input. - - - - - Entry in the MenuPlayServerBookmarksUI list. - - - - - Null token. - - - - - Text between tags. - - - - - [b] - - - - - [/b] - - - - - [i] - - - - - [/i] - - - - - [list] - - - - - [/list] - - - - - [olist] - - - - - [/olist] - - - - - [*] value - Nelson 2025-07-02: manually written lists typically don't have a ListItemClose token. - - - - - [/*] - Nelson 2025-07-02: Steam's new visual editor adds closing tokens to list items, but - manually-written list items typically don't have them. - - - - - [h1] - - - - - [/h1] - - - - - [h2] - - - - - [/h2] - - - - - [h3] - - - - - [/h3] - - - - - [url=value] - - - - - [/url] - - - - - [img] - - - - - [/img] - - - - - [previewyoutube=value] - - - - - [/previewyoutube] - - - - - '\n' or "\r\n" - - - - - [quote=value] (value is author) - - - - - [/quote] - - - - - [p] - - - - - [/p] - - - - - [u] - - - - - [/u] - - - - - Steam's new visual editor quotes value in [url=x] tag. If value is not quoted, this method returns as-is. - If it IS quoted, this methods returns without quotation marks. - - - - - Breaks down Steam's version of BBcode into tokens like, "[b]", "[i]", "actual text", etc. - - - - - If true, parse newlines in the input as LineBreak tokens. (default true) - If false, exclude LineBreak tokens from output. - 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. - - - - - Reset to -1 when not chatting. If player presses up/down we get index 0 (most recent). - - - - - Fill chat field with previous sent message. - Useful for repeating commands with minor changes. - - - - - Use the latest hotbar items in the UI. - - - - - Icon uploaded to CDN. - - - - - Icon used in game menus. - - - - - Project-relative asset importer version of - - - - - Icon saved for community members in Extras folder. - - - - - Has the small icon been captured yet? - - - - - Has the large icon been captured yet? - - - - - Moved icon code from MenuTitleUI to here. - - - - - These directories are excluded from source control and Steam depots so they might not exist yet. - - - - - If updating this method please remember to update the support article: - https://support.smartlydressedgames.com/hc/en-us/articles/13452208765716 - - - - - Does name contain rich text tags? - Some players were abusing rich text enabled servers by inserting admin colors into their steam name. - - - - - Used when damaging zombies to override in which situations they are stunned. - - - - - Default stun behaviour determined by damage dealt. - - - - - Don't stun even if damage is over threshold. - - - - - Stun regardless of damage. - - - - - Overrides hat item from zombie table with a specific item ID. - - - - - Overrides gear item from zombie table with a specific item ID. - - - - - If zombie is stuck this was a nearby barricade potentially blocking our path. - - - - - If zombie is stuck this was a nearby structure potentially blocking our path. - - - - - If zombie is stuck this was a nearby vehicle potentially blocking our path. - - - - - If target player is passenger in a vehicle this is their vehicle. - - - - - If zombie is stuck this was a nearby object potentially blocking our path. - - - - - Incremented while stuck. Prevents doing overlap test too frequently. - - - - - Add or remove from ticking list if needed. - Separated from updateTicking in order to move once after first spawn. - - - - - Boss zombies are considered mega as well. - - - - - Yeah it seems kinda ugly to pollute all zombies with this code... zombie rewrite eventually please. - - - - - If damage exceeds this value, stun the zombie. - - - - - Used to kill night-only zombies at dawn. - - - - - Cache difficulty asset (if any) for this zombie's current type and bound. - Allows difficulty assets to override certain zombie behaviors. - Called after bound/type is initialized, and after type changes during respawn. - - - - - Called when zombie does not have a target, but has been stuck for a period. - - - - - Reduces frequency of UndergroundAllowlist checks because it can be expensive with lots of entities and volumes. - - - - - Helper to prevent mistakes or plugins from breaking alive zombie count. - - - - - Helper to prevent mistakes or plugins from breaking alive boss zombie count. - - - - - 2023-01-31: set height to 2 rather than adjusting per-zombie-type. Tall zombies (megas) couldn't - get through doorways, and short zombies (crawlers) could get underneath objects they shouldn't - like gas tanks. Zombies were also stacking on top of eachother a bit too much. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - Ideally in a future rewrite asset overload will become the default rather than the overload taking legacy ID. - - - - - If true, item has 100% quality. If false, item has a random quality. - - - - - Get animal or player damage based on game mode config. - - - - - Get zombie or player damage based on game mode config. - - - - - Allows Unity events to spawn barricades. - - - - - Distance along tree's local up axis to offset debris spawn position. Defaults to 1.0. - - - - - Before had randomization properties (which trees don't currently use - as of 2024-12-11 because rotation/scale aren't saved) each tree has some random rotation and scale variation - based on its position. This property controls the rotation away from upright. - - - - - Amount of experience to reward foraging player. - - - - - Forageable resource message. - - - - - Weapon must have matching blade ID to damage tree. - Both weapons and trees default to zero so they can be damaged by default. - - - - - If true, prevent collisions between falling tree and the stump. (i.e., debris can fall through stump) - Defaults to true. - - - - - Only activated during this holiday. - - - - - Tree to use during the Christmas event instead. - - - - - Tree to use during the Halloween event instead. - - - - - Get asset ref to replace this one for holiday, or null if it should not be redirected. - - - - - Essentially deprecated for now. - - - - - Server response to a non-rejected CONNECT request. Notifies client they are in the queue. - - - - - Rather than creating all SleekItems as once we create a few per frame. - - - - - Reset all items hotkey label. - - - - - Kept because lots of modders have been using this script in Unity, - so removing legacy effect id would break their content. - - - - - Find an item to apply stat tracker tool to. - - - - - Find an item with a stat tracker to remove. - - - - - Find an item with a ragdoll effect to remove. - - - - - Find an item to apply ragdoll effect tool to. - - - - - Toggle button to open/close advanced filters panel. - - - - - On/off checkbox for including description text in filter. - - - - - Switch between sort modes. - - - - - On/off checkbox to reverse sort results. - - - - - On/off checkbox to show only equipped items. - - - - - Container for advanced options. - - - - - Whether to include description text in filter. - - - - - How to sort filtered items. - - - - - Should sorted list be reversed? - - - - - Should only equipped items be shown? - - - - - Remove items that do not match search text. - - - - - Removed items that are not equipped. - - - - - All main menu MTX shop code should be routed through here so that it could theoretically be ported to other - platforms or stores. Obviously this is all very Steam specific at the moment, but at least the UI does not - depend on Steam API here as much as older parts of the game. - - - - - Was this item marked as new in the config? - If new, and not marked as seen, then a "NEW" label is shown on the listing. - - - - - Do we have pricing details for a given item? - Price results may not have been returned yet, or item might not be public. - - - - - Messy, but we only show a menu alert if there was a problem. - - - - - Already filtered to only return locally known items which pass country restrictions. - - - - - Empty if outside new time window. - - - - - Subset of listings. - - - - - Subset of listings. - - - - - Subset of listings. - - - - - Subset of listings. - - - - - Subset of listings. - - - - - May be out of date by one frame. - - - - - Currently used by vehicles to deactivate some rendering features when outside rendering distance. - Uses "frozen" position if applicable, otherwise the camera position from the most recent Update. This means - it could be out-of-date, but for LOD purposes it should be "good enough." - - - - - Reset prior to joining a new server. - - - - - By default if the client submits an asset guid which the server cannot find an asset for the client will - be kicked. This is necessary to prevent cheaters from spamming huge numbers of random guids. In certain cases - like a terrain material missing the server knows the client will be missing it as well, and can register - it here to prevent the client from being kicked unnecessarily. - - - - - Send asset hash (or lack thereof) to server. - - IMPORTANT: should only be called in cases where the server has verified the asset exists by loading it, - otherwise only if the asset exists on the client. This is because the server kicks if the asset does not - exist in order to prevent hacked clients from spamming requests. Context parameter is intended to help - narrow down cases where this rule is being broken. - - - - - Send asset hash to server. - Used in cases where server does not verify asset exists. (see other method's comment) - - - - - Called each Update on the client. - - - - - Called from the server to override salvage duration. - Only used by plugins. - - - - - Override salvage duration without admin. - Only used by plugins. - - - - - Outlined object is not necessarily the focused object, so we track it to disable later if focus is destroyed. - - - - - Search up hierarchy for most specific Target transform. - - - - - Was focus non-null during last update? Used to detect when focus was destroyed. - - - - - Currently used by plugins to identify what damaged a buildable. - - - - - Explosion instigated by . - - - - - Should only be used by . - For example: "Condition_##" where ## is an index. - - - - - If >0 the game will start a coroutine to grant the reward after waiting. - - - - - If true and player has this reward pending when they die or disconnect it will be granted. - - - - - Intended to replace filling data from constructor. - - - - - Intended to replace filling data from constructor. Legacy is for backwards compatibility with Reward_#_Key - format, whereas V2 uses the list and dictionary features. - - - - - Used in a test scene to quickly test UI Toolkit implementation. - - - - - Assigned when a named preset is created. - 0 is the default and should be replaced by a preset when loaded. - -1 indicates the preset was modified. - -2 and below are the default presets. - - - - - Nelson 2024-09-20: Changing default to any (from has players) because the default server list sort will now - push empty servers to the bottom. - - - - - If true, only servers with available player slots are shown. - Nelson 2024-09-20: Changing default to false because the default server list sort will now push them down - from the top a little bit. - - - - - If >0, servers with ping higher than this will not be shown. - - - - True if level was added to the list of maps. - - - - Version before named version constants were introduced. (2023-11-13) - - - - - % Full - - - - - Note: this can be different from status.blueprint after status refreshes because status is pooled. - - - - - Update the title box describing the "most important" item: item to repair, salvage, craft, etc. - - - - - The dialogue to go to when a message has no available responses. - If this is not specified the previous dialogue is used as a default. - - - - - For level objects with QuestCondition called when quests are added or removed. - - - - - Event specifically for plugins to listen to global quest progress. - - - - - Event for plugins when group or rank changes. - - - - - Overrides label text next to marker on map. - Used by plugins. Not saved to disk. - - - - - Kept serverside. Used to check whether the player is currently in their Steam group or just a normal in-game group. - - - - - Check before allowing changes to this player's - - - - - Can rename the group. - - - - - Can promote and demote members. - - - - - If set, default spawn logic will check for a location node or spawnpoint node matching name. - Saved and loaded between sessions. - - - - - If true, hide viewmodel and prevent using equipped item. For example, to prevent shooting gun on top of a - first-person scene. This could be expanded in the future with other flags and options. - - - - - Called serverside to set marker on clients. - - - - - Ask server to set marker. - - - - - Call serverside to replicate new rank to clients - - - - - Set player's group to their Steam group (if any) without testing restrictions. - - - - Ignores group changing rules when true. - - - - Serverside send packet telling player about this invite - - - - - Called on server to finalize and remove quest. - - - - - Called by quest details UI to request server to abandon quest. - - - - - Called when there are no responses to choose, but server has indicated a next dialogue is available. - - - - - Called in singleplayer and on the server after client requests NPC dialogue. - - - - - Prevent re-creating it during destroy (e.g. plugin granting rewards) from leaking gameobject. - - - - - White 1x1 texture for solid colored images. - uGUI empty image draws like this, but we need the texture for IMGUI backwards compatibility. - - - - - Is the server this widget represents currently favorited? - Can be false on the favorites list. - - - - - Payload for the DamageTool.damagePlayer function. - - - - - Should armor worn on matching limb be factored in? - - - - - Should game mode config damage multiplier be factored in? - - - - - If player dies should it count towards quests? - - - - - Effect to apply to ragdoll if dead. - - - - - Read 8-bit per channel color excluding alpha. - - - - - Intended as a drop-in replacement for existing assets with property uint16s. - - - - - Is a point safely within the level bounds? - Also checks player clip volumes if legacy borders are disabled. - - - - - Is given Y (vertical) coordinate within level's height range? - Maps using landscapes have a larger range than older maps. - - - - - Notify menus that levels list has changed. - Used when creating/deleting levels, as well as following workshop changes. - - - - - Get level's cached asset, if any. - - - - - Should loading code proceed with redirects? - Disabled by level and when in the editor. - - - - - Placeholder created between unloading the main menu and loading into game or editor. - - - - - Loading screen music. - - - - - Clip to play to fade out loop. - - - - - Useful to narrow down why a player is getting kicked for modified level files when joining a server. - - - - - Display version string of the currently loaded level. - - - - - Version string of the currently loaded level packed into an integer. - - - - - Refreshes known levels and attempts to redirect level reference if it no longer exists. - - - - - Find level matching both name AND workshop file ID (can be zero). - - - - - Load level details from Level.dat in directory path. - - - - - Server list allows player to enter a map name when searching, so we try to find a local - copy of the level for version number comparison. (Server map version might differ.) - - - - - New map filter uses lowercase map name and doesn't need startswith. - - - - - Search all map folders to add any previously unregistered maps. - - - - - Temporary to unbind events because this class is static for now. (sigh) - - - - - Defines how instance methods handle invocation when the target instance does not exist yet, for example - if the target instance is async loading or has time sliced instantiation. - - - - - Invocation should be ignored if the target instance does not exist. - This is the only applicable defer mode for static methods and server methods. - - - - - Invocation will be queued up if the target instance does not exist. - Originally an "Overwrite" mode was considered for cases like SetHealth where only the newest value is - displayed, but this was potentially error-prone if multiple queued methods depended on values from each other. - - - - - Allows Unity events to execute commands from the server. - Messenger context is logged to help track down abusive assets. - - - - - Responsible for loading asset definitions on a separate thread. - - - - - Parser error messages, if any. - - - - - Warning: on worker thread this only acts as handle. Do not access. - - - - - Used on main thread to determine when all queued tasks have finished. - - - - - Loop searching directories recursively for asset bundle and asset definition files. - - - - - Warning: on worker thread this only acts as handle. Do not access. - - - - - Absolute path to *.log file. - - - - - Responsible for the per-process .log file in the Logs directory. - Kept multiple log files in the past, but now consolidates all information - into a single file named Client.log or Server_{Identifier}.log. - - - - - Should setup of the default *.log file be disabled? - - - - - If true, information like IP addresses and login tokens should be censored in vanilla logs. - Nelson 2024-11-11: Special thanks to Jdance and asineth0 in public issue #4740! - - - - - Text to replace with if is enabled. - - - - - *ATTEMPTS* to replace IPv4 address(es) with . - Should only be called if is enabled. - Case-by-case redaction should be preferred for performance reasons over using this function. This function - is intended for third-party messages (e.g., BattlEye) that we don't have control over. - - True if message was modified. - - - - Get logging to path. - - - - - Set path to log to. - - - - - Close current log file. - - - - - Invoked when door is opened/closed, but not when loaded. - - - - - Switches between "legacy" (per-level road textures bundle) and "assets" (using RoadAsset). - - - - - If modifying usage please update support article: - https://support.smartlydressedgames.com/hc/en-us/articles/13452208765716 - - - - - If modifying usage please update support article: - https://support.smartlydressedgames.com/hc/en-us/articles/13452208765716 - - - - - Client has a critical module the server doesn't. - - - - - Server has a critical module the client doesn't. - - - - - Level config's version number does not match. - - - - - EconInfo.json hash does not match. - - - - - Master bundle hashes do not match. - - - - - Server has not received an auth session response from Steam yet. - - - - - Server has not received an economy response from Steam yet. - - - - - Server has not received a groups response from Steam yet. - - - - - Player nickname exceeds limit. - - - - - Player nickname contains invalid characters. - - If modifying usage please update support article: - https://support.smartlydressedgames.com/hc/en-us/articles/13452208765716 - - - - - Player nickname should not be a number. - - - - - Player resources folders don't match. - - - - - The network identity in the ticket does not match the server authenticating the ticket. - This can happen if server's Steam ID has changed from what the client thinks it is. - For example, joining a stale entry in the server list. (public issue #4101) - - - - - Player's skin color is too similar to one of . - - - - - Steam ID reported by net transport doesn't match client's reported Steam ID. - This was exploited to fill the server queue with fake players. - - - - - Received too many connection requests from player in a short window. - - - - - Received too many invalid messages from connection in a short window. - - - - - Server limits how many clients are joining from the same IP address. - (public issue #5001) - - - - - Zero is treated as unset. - - - - - Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the - vehicle spawner requires to properly set paint color. - - - - - Kept because lots of modders have been using this script in Unity, - so removing legacy effect id would break their content. - - - - - Matches level with same file name AND workshop file ID. - - - - - Version before named version constants were introduced. (2023-11-08) - - - - - Moved into ServerListFilters. - - - - - Exposed for plugins. Can be null. Please do not modify. - - - - - This overload supports legacy Condition_# format. - - - - - This overload doesn't support legacy Condition_# format. - - - - - If true, button tooltip will be overridden with tooltip from states array. - - - - - If true oxygen is restored while in this volume, otherwise if false oxygen is depleted. - - - - - Merges textures used in the level into an atlas to assist runtime draw call batching. - - - - - Skip renderer children of these transforms, if any. - For example we skip lights with material instances and rubble debris. - - - - - Most objects in Unturned use the standard shader without transparency/emissive/detail/etc. - - - - - Meshes we logged an explanation for as to why they can't be atlased. - - - - - Textures we logged an explanation for as to why they can't be atlased. - - - - - Materials we logged an explanation for as to why they can't be atlased. - - - - - Objects instantiated for the lifetime of the level that should be destroyed when exiting the level. - - - - - If true, don't assign texture atlas to material so batched materials are obvious. - - - - - If true, assign a red material to excluded meshes so they are obvious. - - - - - If true, replace each unique material with a colored one before static batching. - - - - - If true, log why texture/material can't be included in atlas. - - - - - If true, log if mesh has UVs outside [0, 1] range. - - - - - We generate a 1x1 texture for materials without one. - - - - - Tracks which mesh filters and skinned mesh renderers were referencing a given mesh. - - - - - Tracks which meshes and materials were referencing a given texture. - - - - - If true, UVs should be centered and overridden because original mesh was not textured. - - - - - Maps original mesh to any mesh filters using it. - When mesh's UVs are modified the mesh filters need to be pointed at the copied mesh. - - - - - Renderers with a material using the texture. - After combining texture the renderers need to be pointed at the combined material. - - - - - Tracks which textures were referencing a given shader. - - - - - StaticBatchingUtility.Combine requires input renderers are enabled and active in hierarchy, - so we temporarily activate/enable them to keep this logic out of LevelObject/ResourceSpawnpoint. - - - - - Payload for the DamageTool.damageAnimal function. - - - - - Should game mode config damage multiplier be factored in? - - - - - If not null and damage is applied, is called with this position. - - - - - Can be added to EquipablePrefab item GameObject to receive events. - - - - - Invoked when item begins inspect animation. - - - - - Entry in the MenuPlayServerCurationUI list. - - - - - In-game rich text does not support embedded YouTube videos, but they look great in the web browser, - so we simply remove them from the in-game text. - - - - - Unfortunately in-game rich text does not have code formatting yet, so remove the tags while preserving text. - - - - - Nelson 2025-01-28: This command reproduces a bug destroying the player gameObject if the vehicle is - destroyed on the same frame as the request to enter. - https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/4760#issuecomment-2613090165 - - - - - Not using rate limit attribute because this is potentially called for hundreds of barricades at once, - and only admins will actually be allowed to apply the transform. - - - - - Only used by plugins. - - - - - See BarricadeRegion.FindBarricadeByRootFast comment. - - - - - For code which does not know whether transform exists and/or even is a barricade. - See BarricadeRegion.FindBarricadeByRootFast comment. - - - - - Does this label fade out as the chat message gets older? - - - - - Chat message values to show. - - - - - Tree activation is time-sliced, so this does not necessarily match whether the region is active. - - - - - Can this tree be damaged? - Allows holiday restrictions to be taken into account. (Otherwise holiday trees could be destroyed out of season.) - - - - - Some new code common to SteamPending and SteamPlayer. - - - - - Realtime the first ping request was received. - - - - - Number of ping requests the server has received from this client. - - - - - Called when a ping request is received from this client. - - - - - Realtime passed since the first ping request was received from this client. - - - - - Average number of ping requests received from this client per second. - Begins tracking 10 seconds after the first ping request was received, or -1 if average is unknown yet. - - - - - Only set on server. Associates player with their connection. - - - - - Used when kicking player in queue to log what backend system might be failing. - - - - - Number of alive zombies. - - - - - Last time a quest boss was spawned. - - - - - Allow another quest to spawn a boss zombie immediately. - - - - - Kills the boss zombie if nobody is around, if the boss was killed it calls UpdateBoss. - - - - - Checks for players in the area with quests and spawns boss zombies accordingly. - - - - - HUD with projected labels for teammates. - - - - - Allows map makers to create custom weather events. - - - - - Does this weather affect fog color and density? - - - - - Does this weather affect sky fog color? - - - - - Does this weather affect cloud colors? - - - - - Directional light shadow strength multiplier. - - - - - Exponent applied to effect blend alpha. - - - - - Exponent applied to effect blend alpha. - - - - - SpeedTree wind strength for blizzard. Should be removed? - - - - - If specified level editor color can be used rather than a per-asset color. - - - - - Remove any existing item alert widgets. - - - - - Open fullscreen alert showcasing newly granted items. - Uses first item for title color, so items should be sorted by priority. - - - - - Open fullscreen alert showcasing newly granted items. - - - - - Handle esc/back key press. - Still really messy, but this used to be inside a huge nested if/elseif in Update. - - - - - Despite being newer code, this is obviously not ideal. Previously the news request was using the Steam HTTP - API which might have been the cause of some crashes, so it was quickly converted to Unity web request instead. - - - - - Invoked when web item is first loaded or reloaded. - - - - - If false this structure cannot take damage. - - - - - Modded structures can disable pooling if they have custom incompatible logic. - - - - - Length of raycast downward from pivot to check floor is above terrain. - Vanilla floors can be placed a maximum of 10 meters above terrain. - - - - - Optional alternative structure prefab specifically for the client preview spawned. - - - - - Called on the dedicated server to optimize client prefab for server usage. - - - - - Compares weather intensity to value. - - - - - Called during startup and when returning to the main menu. - - - - - Result is never null, but may be empty or out-of-date. - - - - - Can be added to Vehicle GameObject to receive events. - - - - - Invoked when any player enters the driver seat. - - - - - Invoked when any player exits the driver seat. - - - - - Invoked when a locally controlled player enters the driver seat. - - - - - Invoked when a locally controlled player exits the driver seat. - - - - - Invoked when a locally controlled player enters the vehicle. - - - - - Invoked when a locally controlled player exits the vehicle. - - - - - Invoked when lock is engaged. - - - - - Invoked when lock is disengaged. - - - - - Invoked when horn is played. - - - - - Invoked after explosion plays. - - - - - Root transform. - - - - - Hit collider's transform. Can be null. - - - - - Tag display name without rich text formatting. To use, for example, in logging, sorting, or with rich color override. - - - - - If true, tag requests name to be displayed in UI with NameColor label color override. - - - - - Color to use in UI when displaying name. - - - - - If HasNameColor is enabled, this is PlainTextName wrapped with NameColor rich text color tags. - If unset, falls back to PlainTextName. - - Nelson 2025-05-02: initially, we allowed enabling any rich text tags in names. But, considering that we - are also using PlainTextName for other color overrides (e.g. "bad" when missing), this will be disappointing - if tags are displayed inconsistently. - - - - - If true, icon should be tinted according to player's foreground color preference. - - - - - Wrap PlainTextName with color rich text tag. - - - - - Wrap PlainTextName with player's font color preference. - - - - - If HasNameColor, get RichTextName. Otherwise, get PlainTextNameWithPreferredFontColor. - - - - - Get sleek color for UI. If HasNameColor, get NameColor. Otherwise, preferred font color. - - - - - Allows Unity events to modify which crafting tags are provided by owning object. - Must be connected to a Crafting Tag Provider. - - - - - GUIDs of Unturned tag assets to modify. - - - - - Add listed tags to provided tags. - - - - - Remove listed tags from provided tags. - - - - - Apply only if this component is active and enabled. - - - - - Apply only if this component is inactive and/or disabled. - - - - - Always apply. - - - - - Get wrapper method rather than Awake because component might be inactive but should still apply modifiers. - - - - - Used for item placement in displays / holsters, and whether useable can be placed in primary/secondary slot. - - - - - Cannot be placed in primary nor secondary slots, but can be equipped from bag. - - - - - Can be placed in primary slot, but cannot be equipped in secondary or bag. - - - - - Can be placed in primary or secondary slot, but cannot be equipped from bag. - - - - - Only used by NPCs. - - - - - Can be placed in primary, secondary, or equipped while in bag. - - - - - Project current field of view onto screen compared to desired field of view. - - - - - Multiply sensitivity according to scope/optic zoom. For example an 8x zoom has 1/8th sensitivity. - - - - - Preserve how sensitivity felt prior to 3.22.8.0 update. - - - - - Do not adjust sensitivity while aiming. - - - - - When held the cursor is released. - - - - - If held while clicking a blueprint action in the item context menu, the crafting menu is bypassed. - - - - - Replace instances of with their bound key text. - Allows server effects to display plugin hotkeys. - - - - - Item 0 is "1" and item 9 is "0" - - - - - Multiplier for Input.GetAxis("mouse_x") and Input.GetAxis("mouse_y") - - - - - When held the cursor is released. - - - - - If held while clicking a blueprint action in the item context menu, the crafting menu is bypassed. - - - - - Broadcasts once all workshop assets are finished installing. - - - - - Called once the server is done registering items it wants to install. - - True when running in offline-only mode. - - - - Request for details about the pending items. - - - - - File IDs of all the items we have enqueued for query. - - - - - Built from user-specified workshop item IDs, and then expanded as the query results - arrive with details about any dependent or child items. - - - - - File IDs requested by the latest query submitted. - - - - - Number of times we've tried re-submitted failed queries. - - - - - Built as the valid list of items arrive. - - - - - ID of the latest item we requested for download so that we can test if the callback is for us. - - - - - Enqueue an item if we have not queried it yet. This guards against querying an item - that is in two separate collections leading to duplicates. - - - - True if item was installed from cache. - - - - Used in offline-only mode. - - - - - Prepare a query that will request metadata for all the workshop items we want to install. - This allows us to check if the items are allowed to be auto-downloaded to this server, and to - detect any child or dependent items. - - Waits for onQueryCompleted. - - - - - Re-submit previous query after a query failure. - - - - - If level is using underground whitelist then conditionally clamp world-space position. - - - - - If level is using underground allowlist then conditionally clamp world-space position. - - - - - Used by animals and zombies to teleport to a spawnpoint if outside the map. - - - - - Used by housing validation to check item isn't placed underground. - - - - - Almost every menu has a container element for its contents which spans the entire screen. This element is then - animated into and out of view. In the IMGUI implementation this was fine because containers off-screen were not - processed, but with uGUI they were still considered active. To solve the uGUI performance overhead this class - was introduced to disable visibility after animating out of view. - - - - - Payload for the EffectManager.triggerEffect method. - - - - - Required effect to spawn. - - - - - World-space position to spawn at. - - - - - Local-space scale. Defaults to one. - - - - - If running as server should this effect be replicated to clients? - Defaults to true. Set to false for code that is called on client AND server. - - - - - Should the RPC be called in reliable mode? Unreliable effects might not be received. - - - - - Was a player directly responsible for triggering this effect? - For example grenade explosions are instigated by players, whereas zombie acid explosions are not. - Used to prevent mod damage on the effect prefab from hurting players on PvE servers. - - - - - Players within this radius will be sent the effect unless the effect overrides it. - Defaults to 128. - - - - - Get world-space rotation for the effect. - - - - - Set world-space rotation for the effect. - - - - - World-space rotation for the effect. - - - - - If true, rotation was specified by setter methods. - Required for backwards compatibility because `direction` field is public. - - - - - Only send the effect to the given player, if set. - - - - - Only send the effect to the given players, if set. - Otherwise relevantDistance is used. - - - - - Only send the effect to the given player, if set. - - - - - World-space direction to orient the Z axis along. Defaults to up. - - - - - Nelson 2025-04-08: newer code should probably use CachingAssetRef instead. (Or CachingLegacyAssetRef if legacy - ID support is necessary.) - - - - - Whether the asset has been assigned. Note that this doesn't mean an asset with exists. - - - - - Is this asset not assigned? - - - - - True if resolving this asset reference would get that asset. - - - - - Resolve reference with asset manager. - - - - - GUID of the asset this is referring to. - - - - - Each quality tier has different rarities. - Legendary: 5% Epic: 20% Rare: 75% - - - - - Each item has an equal chance regardless of quality. - - - - - Kept because lots of modders have been these scripts in Unity, - so removing legacy effect id would break their content. - Note: unsure about this one because it is private and not serialized. - - - - - Sorts higher rarity items into the front of the list. - - - - - Set handles pivot point according to selection transform. - Doesn't apply if handle is currently being dragged. - - - - - If Unturned is loading this asset bundle from a Steam workshop file but the file ID does not match then - loading will be canceled. Prevents the asset bundle from being easily copied/stolen. - - - - - Same as ownerWorkshopFileId for cases where the asset bundle is allowed in multiple uploads. - - Uploading the same asset bundle multiple times is not ideal because the game doesn't handle - multiple of them with the same name well, and Unity logs an error if an asset bundle with the - same files is already loaded. That being said, the game doesn't handle dependencies between - workshop files well either (as of 2023-01-12), so this is perhaps the lesser of two evils. - - My understanding is that some mod creators license their work to multiple servers that upload - the files and this property will make it easier so it doesn't need to be re-exported multiple times. - - - - - Helpers on the dedicated server to optimize client prefabs for server usage. - - - - - Optimize client prefab for server usage. - - - - - If true, object is within a culling volume. - Name is old and not very specific, but not changing because it's public. - - - - - Transform created to preserve objects whose assets failed to load. - Separate from default transform to avoid messing with old behavior when transform is null. - - - - - If true, can be instantiated. Defaults to true. - Enables mappers to remove culling volumes embedded in objects if they're causing issues. - - - - - Can this object's rubble be damaged? - Allows holiday restrictions to be taken into account. (Otherwise holiday presents could be destroyed out of season.) - - - - - Object activation is time-sliced, so this does not necessarily match whether the region is active. - - - - - Defaults to true because most objects are not inside a culling volume. - - - - - Used by InteractableObjectBinaryState to indicate whether it wants navGameObject to be active. It's only - active if both IOBS and Rubble want it active. - - - - - Used by InteractableObjectRubble to indicate whether it wants navGameObject to be active. It's only - active if both IOBS and Rubble want it active. - - - - - Used if the object asset has weather blend alpha conditions. - - - - - Used if the object asset has weather status conditions. - - - - - Callback when an individual quest flag changes for the local player. - Refreshes visibility conditions if the flag was relevant to this object. - - - - - Separate from UpdateActiveAndRenderersEnabled so graphics settings can call it. - - - - - Assume renderers default to enabled. - - - - - Combine two existing 20-byte hashes. - - - - - Utility to hash a stream of bytes over several frames. - - - - - [0, 1] percentage progress through the stream. - - - - - Advance 1MB further into the stream. - - True if there is more data, false if complete. - - - - Get the computed hash after processing stream. - - - - - If true, visible in chart and satellite UIs. - - - - - Multiplier for explosive projectile damage. - - - - - Multiplier for explosive projectile's blast radius. - - - - - Multiplier for explosive projectile's initial force. - - - - - Should amount be filled to capacity when detached? - - - - - Nelson 2024-10-18: Moved to a constant because clients need this value for footsteps and they don't have the - character controller component. - - - - - Jump speed = sqrt(2 * jump height * gravity) - Jump height = (jump speed ^ 2) / (2 * gravity) - With 7 speed and 9.81 * 3 gravity = apex height of 1.66496772 - - - - - Note: Only UpdateCharacterControllerEnabled should modify whether controller is enabled. - (turning off and back on is fine though) - - - - - Valid while isRadiated. - - - - - Set according to volume or level global asset fallback. - - - - - Was set to true during teleport, and restored to false during the next movement tick. - - Server pauses movement when this is set until next client update that matches, - in order to prevent rubberbanding following a teleport. - - - - - Used instead of actual position to avoid revealing admins in "vanish" mode. - - - - - Flag for plugins to allow maintenance access underneath the map. - - - - - Get seat (if any), otherwise null. - - - - - Serverside force player to exit vehicle regardless of safe exit points. - - True if player was seated in vehicle. - - - - Dedicated server simulate while input queue is empty. - - - - - Dedicated server simulate driving input. - - - - - Client and dedicated server simulate walking input. - - - - - In the future this can probably replace checkGround for locally simulated character? - (Unturned only started using OnControllerColliderHit on 2023-01-31) - - 2023-02-28: be careful with .gameObject property because it returns .collider.gameObject - which can cause a null reference exception. (public issue #3726) - - - - - Examine a store listing with description text. - - - - - Only visible when cart is not empty. - - - - - Convert 32-bit version into 8-char string. - String is advertised on server list for clients to filter their local map version. - - - - - Parse 32-bit version from 8-char string. - String is advertised on server list for clients to filter their local map version. - - - - - These server relay variables redirect the client to another server when the menu opens - similar to how Steam sets the +connect string on game startup. Allows plugin to redirect - player to another server on the same network. - - - - If true the server is immediately joined, otherwise show server details beforehand. - - - - If player gets too far away from this storage while using it, should we close out? - False by default for trunk storage because player is inside vehicle. - Plugins needed to be able to set this to false for "virtual storage" plugins, - so we default to false and set to true if asset enables it. - - - - - Keep all the uGUI Canvas sort orders in the same place. - - - - - Manually created canvas in the Menu scene. - - - - - Devkit canvas in the Setup scene. - - - - - Dropdowns, drag-drop content, tab destinations, etc. - - - - - Devkit tooltips should be visible over all other devkit content. - - - - - uGUI glazier contains tooltips and cursor regardless of mode (e.g. devkit), so takes absolute priority. - - - - - Plugins were spawning canvases with high sort orders that showed over the loading screen, so as a hacky - workaround we put the uGUI loading screen on a higher sort order than normal glazier. - - - - - uGUI cursor needs to show above plugin canvas. - Unity exposes sort order as an int32, but it is actually an int16, so this value is slightly below the 32767 max. - - - - - Worst case scenario, maybe shotgun hit or fast spray SMG. - - - - - Tags how client expects server to use a raycast input. - For example, client may think they fired a gun while server thinks they dequipped the gun, - so tagging the input prevents the server from handling it as a punch instead. - - - - - Resulting transform.position immediately after movement.simulate was called. - - - - - Calls to UseableGun.tock per second. - - - - - Called for every input packet received allowing plugins to listen for a few special - keys they can display in chat/effect UIs. - - - - - Whether client is currently penalized for potentially using a lag switch. False positives are relatively - likely when client framerate hitches (e.g. loading dense region), so we only modify their stats (e.g. reduce - player damage) for a corresponding duration. - - - - - Server tracks history of this player's bounding box to assist with validating hits. - Some padding is added to reduce false positives sliding against walls (substep) and - player movement inside vehicles. - - - - - Get the hit result of a raycast on the server. Until a generic way to address net objects is implemented - this is how legacy features specify which player/animal/zombie/vehicle/etc they want to interact with. - - - - - Ideally simulation frame number would be signed, but there is a lot of code expecting unsigned. - - - - - Can be enabled in the unity inspector to test that discarding inputs recovers properly. - - - - - askInput is always called the same number of times per second because it's run from FixedUpdate, - but the spacing between calls can vary depending on network and whether client FPS is low. - - - - - If average askInput calls per second exceeds this, we either ignore their request or flat-out kick them. - - - - - If average askInput calls per second exceeds this we silently kick them. - - - - - Number of times askInput has been called by client. - Even with huge packet loss, we know that - - - - - Realtime that the first call to askInput was made by the client. - - - - - Realtime that the previous askInput kick test was performed. - - - - - Set rollingWindowIndex to newIndex, zeroing all input counts along the way. - Important to zero the intermediary indexes in-case server stalled for more than one second. - - - - - Notify client there has been a prediction error, so movement needs to be re-simulated. - - - - - Notify client old inputs can be discarded because they were predicted correctly. - - - - - Not using rate limit attribute because it internally keeps a rolling window limit. - - - - - Only bound on dedicated server. - When dieing in a vehicle this prevents delay handling packets. - - - - - Counter of simulation frames before fake lag penalty is disabled. - - - - - Player damage multiplier while under penalty for fake lag. (10%) - - - - - If set, this item is prioritized over equipped cosmetics. Used by item inspect menu. - Admittedly, this is very hacked-together. Hopefully rewriting this file someday? - - - - - Is cosmetic or skin equipped? - - - - - Merging the devkit, legacy, and housing transform handles into one place. - - - - - Position and plane handles for each axis. - - - - - Disc handles for each axis. - - - - - Scale handles for each axis. - - - - - Position handles on each side of box. - - - - - Scale handles on each side of box which both move and resize the box. - - - - - Invoked when handle is clicked so that tool can save selection transform relative to pivot. - This avoids floating point precision loss of applying delta for each Transformed event. - - - - - Invoked when handle is dragged and value actually changes. - - - - - Invoked when handle is dragged and value actually changes. - - - - - Preferred mode only takes effect while not dragging. - Bounds modes fall back to non-bounds modes if bounds are not set. - - - - - Pivot only takes effect while not dragging. This is to help ensure - the caller does not depend on the internal pivot values. - - - - - Somewhat hacky, useful to make the "copy-paste transform" feature easier to implement. - Invoke tranformed callback as if pivot were manually dragged to the new position and rotation. - - - - - Called before raycasting into the regular physics scene to give transform tool priority. - - - - - Update properties that depend on the transform of the camera relative to our handles. - - - - - Center of handle. - - - - - Rotation of handle. - - - - - True if pivotBounds is non-zero. - - - - - Mouse currently over this handle. - - - - - Mouse currently dragging this handle. - - - - - Direction from camera toward pivot. - - - - - Multiplier according to distance between camera and pivot to keep handles a constant on-screen size. - - - - - Multiplier to flip axis handles according to which side the camera is on. - - - - - Pivot rotation when rotation drag started. - - - - - Rotating around this axis. - - - - - Direction from circle center to edge point. - - - - - Point on the edge of the circle. - - - - - Drag along this tangent to the circle. - - - - - Does having this item show the compass? - - - - - Does having this item show the chart? - - - - - Does having this item show the satellite? - - - - - Ideally component Awake/Start order should not matter, but Unturned's menu is a mess. - For most players the default order was fine, but it seems it was not deterministic so it would break for some players. - - - - - Index into per-connection rate limiting array. - - - - - Number of server methods with rate limits. - - - - - Log all known net methods. - - - - - Useful debug check to ensure every built-in handle is claimed exactly once. - - - - - This class gets used from type initializers, so Unity's built-in log is not an option unfortunately. - - - - - Not *really* supported but *might* probably work. Adding for public discussion #4176. - - - - - Kept for backwards compatibility with plugins. - - - - - Can be added to EquipablePrefab item GameObject to receive events. - - - - - Invoked when gun is fired. - - - - - Invoked when gun begins reload sequence. - - - - - Invoked when gun begins hammer sequence. - - - - - Invoked when gun begins aiming. - - - - - Invoked when gun ends aiming. - - - - - Invoked when Magazine game object is activated. - - - - - Invoked when Magazine game object is activated. - - - - - TextMesh Pro uGUI text components. - - - - - TextMesh Pro uGUI input field components. - - - - - Exposed for Rocket transition to modules backwards compatibility. - - - - - This effect makes a nice clicky sound and lots of older code used it, - so I moved it into a little helper method here. - - - - If true, client will download the image once and re-use it for subsequent calls. - If true, client will destroy any cached copy of the image and re-acquire it. - - - - Notify server that a button was clicked in a clientside effect. - - - - - Notify server that an input field text was committed. - - - - - If an effect with a given key exists, destroy it. - - - - - parent should only be set if that system also calls ClearAttachments, otherwise attachedEffects will leak memory. - - - - - Helper for sending and spawning effects. - Newer and refactored code should use this method. - - - - - Objects registered so that they can be destroyed all at once if needed. - May be null if they were destroyed with a timer. - - - - - Plugin UIs spawned by the server. - - - - - Called prior to destroying effect (if attached) to free up attachments list. - - - - - Called after attaching effect so that it can be returned to pool when/if parent is destroyed. - - - - - Maps root transform to any attached effects. - This allows us to detach effects when returning a barricade/structure to their pool. - - - - - Recycled lists for attachedEffects dictionary. - - - - - Find materials in finished ragdoll and replace them with the appropriate effect. - - - - - Context for the Assets.ReportError methods. - Nelson 2024-11-20: Converted from directly using asset to this interface so that asset-related features can - more easily log warnings to the in-game menu. - - - - - Format text to prefix any errors reported in this context. (e.g., this asset's name and ID) - - - - - Alerts any agents in the area to the player if needed. - - The player causing this alert. - The position of the alert. - The detection radius. - Whether or not to hide. - - - - Alerts any agents in the area. - - The position of the alert. - The detection radius. - - - - Report success or failure from game systems, conditionally compiled into the Windows 64-bit build. - - - - - Call when the server is done all loading without running into errors. - Ignored if not running in CI mode, otherwise exits the server successfully with error code 0. - - - - - Call when the server encounters any error. - Ignored if not running in CI mode, otherwise exits the server with error code 1. - - - - - Entry in the MenuPlayServerCurationRulesUI list. - - - - - Seconds to wait between burning one unit of fuel. - - - - - Number of seconds to finish growing. - - - - - Item legacy ID to grant the player. - - - - - Uses unscaled time (realtime) because "planted" time is a timestamp. - - - - - Created when a chat entry is received from the server for display in the UI. - - - - - Player who sent the message, or null if it was a plugin broadcast. - Used to retrieve player avatar. - - - - - Web address of a 32x32 .png to use rather than a platform avatar. - Only used if not null/empty. - - - - - How the message was sent through global, local or group. - Mostly deprecated because that status isn't formatted into texts anymore. - - - - - Default font color to use unless overridden by rich text formatting. - - - - - Whether this entry should enable rich text formatting. - False by default because players abuse font size and ugly colors. - - - - - Text to display for this message. - - - - - When the entry was locally received from the server. - - - - - How many seconds ago this message was locally received from the server. - - - - - Event for plugins to be notified when a server update is detected. - - Pandahut requested this because they run the game as a Windows service and need to shutdown - through their central management system rather than per-process. - - - - - Manages scheduled restart for dedicated server. - - - - - Sorted from low to high. - - - - - Sorted from low to high. - - - - - Non-NPC object the player can talk with. - - - - - Broadcasts for plugins before applying consumeable stats to another player. - - - - - Broadcasts for plugins after applying consumeable stats to another player. - - - - - Broadcasts for plugins before applying consumeable stats to self. - - - - - Broadcasts for plugins after applying consumeable stats to self. - - - - - Called serverside when using consumeable on another player. - - - - - Called by owner and server when using consumeable on self. - - - - - If false, a deny rule matched the input. - - - - - If true, at least one rule matched the input. - - - - - If set, this was the final match. - - - - - Optional. If set, filled with any rules that matched. - - - - - If >0, this link was added by live config. - - - - - Determines how a server that doesn't match any rules is handled. - - - - - Include in the list. Default. - - - - - Exclude from list. (same as EServerListCurationDenyMode.Hide) - - - - - Move to the bottom of the list. Similar to EServerListCurationDenyMode.MoveToBottom, but the server is - still clickable. I.e., low priority. - - - - - Called earlier during startup to try and have web lists ready by the time server browser is opened. - - - - - Used to detect asset refresh. - - - - - If true, list needs to be sorted. - - - - - If true, MergeRules should be called before doing any filtering. - - - - - If false, LoadWebUrls still needs to be called. - - - - - For non-repeat weapons the "Use" audio clip is played once time reaches this point. - - - - - Catch exceptions to prevent a broken powerable from breaking all the other powerable items in the area. - - - - - Unsorted list of world space generators turned-on and fueled. - - - - - Allows Unity events to broadcast text chat messages from the server. - - - - - Text to use when SendDefaultTextChatMessage is invoked. - - - - - URL of a png or jpg image file to show next to the message. - - - - - Text color when rich text does not override with color tags. - - - - - Should rich text tags be parsed? - e.g. bold, italic, color - - - - - Allows Unity events to spawn vehicles. - - - - - Recoil magnitude multiplier while the gun is aiming down sights. - - - - - Multiplier for gun's Aim_In_Duration. - - - - - For backwards compatibility this is *subtracted* from the gun's firerate, so a positive number decreases - the time between shots and a negative number increases the time between shots. - - - - - Multiplier for normal bullet damage. - - - - - Multiplier for bullet acceleration due to gravity. - - - - - Movement speed multiplier while the gun is aiming down sights. - - - - - If true, gun can damage entities with Invulnerable tag. Defaults to false. - - - - - Name to use when instantiating attachment prefab. - By default the asset guid is used, but it can be overridden because some - modders rely on the name for Unity's legacy animation component. For example - in Toothy Deerryte's case there were a lot of duplicate animations to work - around the guid naming, simplified by overriding name. - - - - - Returns true if calibers list contains provided caliber ID. - - - - - Returns true if calibers list contains any of the provided caliber IDs. - - - - - Note: If barricade is attached to a vehicle this is the local rotation. - - - - - Extensions to the built-in Physics class. - - Shares similar functionality to the SDG.Framework.Utilities.PhysicsUtility class, but that should be moved here - because the "framework" is unused and and the long name is annoying. - - - - - Wrapper that respects landscape hole volumes. - - - - - Wrapper that respects landscape hole volumes. - - - - - Wrapper that respects landscape hole volumes. - - - - - Wrapper that respects landscape hole volumes. - - - - - Button in a list of levels. - - - - - Button in the list of levels for server browser filters. - - - - - Button in the list of levels for the map editor. - - - - - Base class for IMGUI implementations of primitive building block widgets. - - - - - Position passed into the GUI draw methods. - - - - - Hashes for Windows, Linux, and Mac asset bundles. - Only loaded on the dedicated server. Null otherwise. - - - - - Does given hash match any of the platform hashes? - - - - - Compares client asset bundle hash with server known hashes. - - - - - Called by asset startup to cache which bundles are eligible for hashing. - - - - - Used in a test scene to quickly test all Glazier features. - - - - - Reference type for testing SleekList. - - - - - Uses the Win32 API to force a console to be created and destroyed. - - - - - Should we manually create and destroy a Win32 console? - Useful for IO on Windows desktop, but not as much for dedicated machines. - - - - - Allocate Windows console if enabled. - - - - - Free Windows console if enabled. - - - - - A CTRL+C signal was received, either from keyboard input or from a signal generated by the GenerateConsoleCtrlEvent function. - - - - - A CTRL+BREAK signal was received, either from keyboard input or from a signal generated by GenerateConsoleCtrlEvent. - - - - - A signal that the system sends to all processes attached to a console when the user closes the console - (either by clicking Close on the console window's window menu, or by clicking the End Task button command from Task Manager). - - - - - Tracks whether we should show the "NEW" label on listings and item store button. - - - - - Track that player has seen the new crafting blueprints. - - - - - Track that player has seen the page with all new listings. - - - - - Has player seen the given listing? - - - - - Track that the player has seen the given listing. - - - - - Absolute path to directory containing bundle and .dat file. - - - - - Name of the actual asset bundle file, e.g. Hawaii.unity3d - Asset bundle should be next to this config file. - - - - - assetBundleName without final .* extension. - - - - - Prefixed to all asset paths loaded from asset bundle. - Final path is built from assetPrefix + pathRelativeToBundlesFolder + assetName, - e.g. Assets/Hawaii/Bundles + /Objects/Large/House/ + Object.prefab - - - - - Custom asset bundle version used by Unturned to detect whether imports need - fixing up because they were exported from an older version of Unity. - - - - - Get absolute path to asset bundle file. - - - - - Get absolute path to file with per-platform hashes. - - - - - Insert path prefix if set. - - - - - When to use this instead of formatAssetPath? MasterBundleReference and AudioReference repeatedly invoke - this string formatting (e.g., footstep sounds) and benefit from not generating that garbage. - - - - - Loaded asset bundle. - - - - - Hash of loaded asset bundle file. - This is per-platform, so the server loads a hash file with all platform hashes. - - - - - True if the server .hash file exists. - Hash file is not used by client, but client uses whether it exists to decide whether to include asset bundle hash in asset hash. - - - - - Hashes for Windows, Linux, and Mac asset bundles. - Only loaded on the dedicated server. Null otherwise. - - - - - On the surface level this is rather silly. - The primary reason for it is reducing garbage created by repeated calls to formatAssetPath. - Theoretically we could use this for caching redirected paths if/when that feature is added. - - - - - Load the underlying asset bundle. - - - - - If true, the associated asset bundle couldn't be loaded and was instead copied from another config. - - - - - If the type name has been redirected this method will be called recursively until the most recent name is found and returned. - - - - - After the key "limit" is loaded we stop reading. - - - - - Path to the folder which contains the Unity player executable. - - - - - Called by loading after landscapes (and legacy conversion) have been loaded. - - - - - True is solid and false is empty. - - - - - 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. - - - - - If true, SetHeightsDelayLOD was called without calling SyncHeightmap yet. - - - - - If true, SetHolesDelayLOD was called without calling SyncTexture yet. - - - - - Heightmap-only data used in level editor. Refer to Landscape.DisableHoleColliders for explanation. - - - - - Call this when done changing material references to grab their textures and pass them to the terrain renderer. - - - - - If a heightmap coordinate is out of bounds the tile/heightamp coordinate will be adjusted so that it is in bounds again. - - - - - If a splatmap coordinate is out of bounds the tile/splatmap coordinate will be adjusted so that it is in bounds again. - - - - - 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. - - - - - 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. - - - - Appends heightmap vertices to points list. - - - - - Appends heightmap vertices to points list. - - - - - Call this after you're done adding new tiles. - - - - - Call this to sync a new tile up with nearby tiles. - - - - - Capturing ortho view of map, so we raise the terrain to max quality. - - - - - Finished capturing ortho view of map, so we restore the terrain to preferred quality. - - - - - 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.) - - - - - Directly blend current value toward target value. - - - - - Only blend current value toward target value if current is greater than target. - - - - - Only blend current value toward target value if current is less than target. - - - - - If true, write to LevelHierarchy file. - False for externally managed objects like legacy lighting WaterVolume. - - - - - If true, editor tools can select and transform. - False for items like the object-owned culling volumes. - - - - - Hold onto collider and gameobject separately because collider isn't necessarily attached to gameobject. - - - - - Kept because lots of modders have been using this script in Unity, - so removing legacy effect id would break their content. - - - - - If per-weather mask AND is non zero the weather will blend in. - - - - - Distinguishes from zero falloff which may be useful deep in a cave. - - - - - Higher priority volumes override lower priority volumes. - - - - - When falloff is OFF, how long to fade in audio by time. - - - - - When falloff is OFF, how long to fade out audio by time. - - - - - When falloff is OFF, how long to fade in audio by time. - - - - - When falloff is OFF, how long to fade out audio by time. - - - - - When falloff is OFF, how long to fade in lighting by time. - - - - - When falloff is OFF, how long to fade out lighting by time. - - - - - Used by lighting to get the currently active effect. - - - - - Open a new transaction group which stores multiple undo/redoable actions, for example this would be called before moving an object. - - - - - Close the pending transaction and finalize any change checks. - - - - - Clear the undo/redo queues. - - - - - If false this transaction is ignored. If there were no changes at all in the group it's discarded. - - - - - Called when history buffer is too long so this transaction is discarded. - - - - - 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. - - - - - Kept because lots of modders have been using this script in Unity, - so removing legacy effect id would break their content. - - - - - Called when we position, rotate or scale this transform. - - - - Identical to this object. - - - - Devkit objects are now converted to regular objects and excluded from the file when re-saving. - - - - - Hacked to check horizontal distance. - - - - - 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) - - - - - If true, vehicles overlapping volume will check conditions and (if met) grant rewards to passengers. - - - - - ModuleHook looks for module entry/exit points, then calls when enabled and when disabled. - - - - - Register components of this module. - - - - - Cleanup after this module. - - - - - Holds module configuration. - - - - - Whether to load assemblies. - - - - - Directory containing Module file, set when loading. - - - - - Path to the Module file, set when loading. - - - - - Used for module dependencies. - - - - - Nicely formatted version, converted into . - - - - - Used for module dependencies. - - - - - Modules that must be loaded before this module. - - - - - Relative file paths of .dlls to load. - - - - - Wraps module assembly and handles initialization. - - - - - True when config is enabled and dependencies are enabled. - - - - - Metadata. - - - - - Assembly files loaded. - - - - - Types in the assemblies of this module. Refer to this for types rather than the assemblies to avoid exception and garbage. - - - - - How far along the initialization to shutdown lifecycle this module is. - - - - - Runs before everything else to find and load modules. - - - - - Temporarily contains Unturned's code untils it's moved into modules. - - - - - Temporarily contains types. - - - - - Should module assemblies be loaded? - - - - - Called once after all startup enabled modules are loaded. Not called when modules are initialized due to enabling/disabling. - - - - - Called once after all modules are shutdown. Not called when modules are shutdown due to enabling/disabling. - - - - - Find modules containing an assembly with the Both_Required role. - - Modules to append to. - - - - Find module using dependency name. - - - - - - These are *.dll files discovered in the modules folder. - - - - - Should missing DLLs be logged? - Opt-in because RocketMod has its own handler. - - - - - Should vanilla search for *.dll files? - Can be turned off in case it conflicts with third-party search mechanism. - - - - - If set, search for .dll and .module files in this directory instead of in Unturned/Modules. - - - - - Event for plugin frameworks (e.g., Rocket) to override AssemblyResolve handling. - - - - - Depending on the platform, assemblies are found in different directories. - - Root folder for modules. - - - - Search Modules directory for .dll files and save their AssemblyName to discoveredNameToPath. - - - - - Search Modules directory for .module files and load them. - - - - - Orders configs by dependency and removes those that are missing files. - - - - - Sorts modules by dependencies. - - - - - Nicely formatted version, converted into . - - - - - Used for module dependencies. - - - - - Requested by Trojaner. LoadFile locks the file while in use which prevents OpenMod from updating itself. - - - - - Equivalent to MonoBehaviour.Update - - - - - Equivalent to MonoBehaviour.FixedUpdate - - - - - 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. - - - - - Stop a coroutine started by InvokeAfterDelay. - - - - - For use with PoolablePool when no special construction is required. - - - - - Called when this instance is getting claimed. - - - - - Called when this instance is returned to the pool. - - - - - Number of items in underlying queue. - - - - - Pool of objects that implement the IPoolable interface. - - Useful for types that do not need special construction, - and want notification when claimed and released. - - - - - Not necessarily cheap to calculate - probably best to cache. - - - - - Internal cubic meter volume. - - - - - Surface square meters area. - - - - - 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. - - - - - 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. - - - - - Entry point for worker thread loop. - - - - - Order is important because TileBecameRelevant is called from the closest tile outward. - - - - - Offsets into blob for per-tile data. - - - - - Tiles save an index into this list rather than guid. - - - - - Offset from header data. - - - - - Data-only FoliageInstanceList shared between threads. - - - - - Data-only FoliageTile shared between threads. - - - - - Ready to be released to the worker thread during the next lock. - - - - - Mutex lock. Only used in the main thread Update loop and worker thread loop. - - - - - 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. - - - - - SHARED BY BOTH THREADS! - Tiles read by worker thread ready to be copied into actual foliage tiles on main thread. - - - - - 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. - - - - - 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. - - - - - Does this tile contain any placed foliage? - - - - - If true, mesh is not loaded when clutter is turned off in graphics menu. - Defaults to false. - - - - - Foliage to use during the Christmas event instead. - - - - - Foliage to use during the Halloween event instead. - - - - - Get asset ref to replace this one for holiday, invalid to disable, or null if it should not be redirected. - - - - - Responsible for reading and writing persistent foliage data. - - - - - Called after creating instance for level, prior to any loading. - Not called when creating the auto-upgrade instance for editorSaveAllTiles. - - - - - Called prior to destroying instance. - - - - - Called when tile wants to be drawn. - - - - - Called when tile no longer wants to be drawn. - - - - - Called during Unity's Update loop. - - - - - Load known tiles during level load. - - - - - Save tiles during level save. - - - - 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. - - - - 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. - - - - - Legacy implementation of foliage storage, with one file per tile. - - - - True if other IFoliageSurface methods can be called. - - - - Settings configured when starting the bake. - - - - - Implementation of tile data storage. - - - - - 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! - - - - - 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] - - - - - Must be within [0, MAX_MATRICES_PER_BATCH] range. - - - - Version number associated with this particular system instance. - - - - - Automatically placing foliage onto tiles in editor. - - - - - 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. - - - - - Whether add can be called from the inspector. - - - - - Whether remove can be called from the inspector. - - - - - Called when the inspector adds an element. - - - - - Called when the inspector removes an element. - - - - - Called when the inspector sets an element to a different value. - - - - - Whether add can be called from the inspector. - - - - - Whether remove can be called from the inspector. - - - - - All water tiles and the planar reflection component reference this material. - - - - - If true rain will be occluded below the surface on the Y axis. - - - - - Flag for legacy sea level. - - - - - Water volume marked as being sea level. - - - - Null if under old water level, otherwise the volume. - - - - Find the water elevation underneath point, or above point if underwater. - - - - - Reads data into the data array. - - The file path to read from. - The array to read into. - Whether the read succesfully executed. - - - - Writes data out of data array. - - The file path to write to. - The array to write from. - The length of the array with data. - Whether the write succesfully executed. - - - - Checks the size of a file. - - The file path to check. - The size of the file. - Whether the check succesfully executed. - - - - Checks whether the path already exists. - - The file path to check. - Whether the file exists. - Whether the check succesfully executed. - - - - Deletes the path. - - The file path to delete. - Whether the deletion succesfully executed. - - - - For once the provider interface actually came in useful! - Fakes loading the Steam remote storage files from a separate folder. - - - - - Triggered when the user's statistics are available. - - - - - Checks the current user's statistics with this name. - - The name of the statistic. - The value of the statistic. - Whether the check succesfully executed. - - - - Assigns the current user's statistics with this name. - - The name of the statistic. - The value of the statistic. - Whether the check succesfully executed. - - - - Checks the current user's statistics with this name. - - The name of the statistic. - The value of the statistic. - Whether the check succesfully executed. - - - - Assigns the current user's statistics with this name. - - The name of the statistic. - The value of the statistic. - Whether the check succesfully executed. - - - - Requests the user's statistics. - - Whether the refresh succesfully executed. - - - - Triggered when the global statistics are available. - - - - - Checks the global total of the statistic with this name. - - The name of the statistic. - The value of the statistic. - Whether the check succesfully executed. - - - - Checks the global total of the statistic with this name. - - The name of the statistic. - The value of the statistic. - Whether the check succesfully executed. - - - - Requests the global statistics. - - Whether the refresh succesfully executed. - - - - Current user statistics implementation. - - - - - Current global statistics implementation. - - - - - Current client multiplayer implementation. - - - - - Current server multiplayer implementation. - - - - - Information about currently connected server. - - - - - Whether a server is currently connected to. - - - - - Whether connection attempts are being made. - - - - - Network buffer memory stream. - - - - - Network buffer memory stream reader. - - - - - Network buffer memory stream writer. - - - - - Connect to a server. - - Server to join. - - - - Disconnect from current server. - - - - - Receive a packet from an entity across the network. - - Sender of data. - - - Whether any data was read. - - - - Send a packet to an entity across the network. - - Recipient of data. - Packet to send. - Size of data in array. - - - - Send a packet to an entity across the network. - - Recipient of data. - Packet to send. - Size of data in array. - Type of send to use. - - - - Information about currently hosted server. - - - - - Whether a server is open. - - - - - Network buffer memory stream. - - - - - Network buffer memory stream reader. - - - - - Network buffer memory stream writer. - - - - - Open a new server. - - - - - Close an existing server. - - - - - Receive a packet from an entity across the network. - - Sender of data. - - - Whether any data was read. - - - - Send a packet to an entity across the network. - - Recipient of data. - Packet to send. - Size of data in array. - - - - Send a packet to an entity across the network. - - Recipient of data. - Packet to send. - Size of data in array. - Type of send to use. - - - - Whether the user has their overlay enabled. - - - - - Requests the user's inventory. - - Called when the request is completed. - Handle for checking the owner of the callback. - - - - Requests a check for promotional items. - - Called when the request is completed. - Handle for checking the owner of the callback. - - - - Converts the input items into the output items. - - Items to be converted from. - Item amounts to be consumed. - Items to be converted to. - Item amounts to be generated. - Called when the exchange is completed. - - - - Whether the user has their overlay enabled. - - - - - View a package on the store. - - Package to view. - - - - Checks whether the current user has an achievement with this name. - - The name of the achievement. - Whether the user has this achievement. - Whether the check succesfully executed. - - - - Assigns the current user an achievement with this name. - - The name of the achievement. - Whether the assignment succesfully executed. - - - - Whether the user has their overlay enabled. - - - - - Initialize this service's external API. Should be called before using. - - - - - Update this service's external API. Should be called every frame. - - - - - Shutdown this service's external API. Should be called before closing the program. - - - - - Used to show a warning when a lot of servers are blocked by curation list. - - - - - Reset after starting connection attempt, so set to true afterwards to auto join the server. - - - - - EItemType - - - - - Nelson 2024-12-06: This was added 2023-06-19, so unfortunately it will be inaccurate for older items. - - - - - This enum exists for sorting items based on rarity, and is derived from quality. - Quality order cannot be changed due to loading from older files, but this one is ordered - from lowest rarity to highest rarity and should match entries in quality. - - - - - Response data from IInventoryService GetInventory web API. - - One player's inventory became so large that the Steam client's built-in GetInventory fails, - so as temporary fix we can send them a json file with their inventory. - - - - - Json string representation of the contained items. - - - - - Parse response from json file. - - - - - Details of a workshop item that the game may want to refer to later. - Cached during client startup after getting installed items, and while - downloading UGC for the dedicated server. - - - - - Banned workshop files are shown in red. - - - - - Used on dedicated server to test whether map has been updated, and whether local copy of file is out-of-date. - - - - - Some workshop thieves use an empty title, in which case we show the file ID as title text. - - - - - Used when transitioning Unity versions breaks asset bundles. Replaced by AssetBundleVersion const values. - - - - - Workshop item key-value tag storing the version number. - - - - - Maps published file id to name, version, etc. - - - - - Get compatibility version from workshop query, or zero if unset. - - - - - Save the details from a workshop query for lookup later. - Allows game to inspect the installed files before deciding if they are - compatible, since maps and localization are not affected by unity upgrades. - Previously the compatibility test occurred before downloading the content. - - - - - Get cached workshop item details. - - - - - Should caller skip loading a given workshop file? - - Used to skip workshop version of map if the map is locally installed, - e.g. Canyon Arena moved to workshop and auto-subscribed. - - - - - Helper for downloadServerItems. - Called for each workshop item we want to download for the server. - - - - - Called once we know which items the server is allowed to use (queryServerItems), - or the query has failed in which case we proceed with all items it told us. - - - - - Is currently connected server allowed to auto-download the workshop item? - Requested by mod authors so that they can whitelist/blacklist access. - - - - - Successfully queried details of the items current server is using. - Ensure server has permission to use these items, then proceed with downloading. - Also caches item titles for use on the loading screen. - - - - - IO or bad result occurred when querying items the current server is using. - We do not know the file details, but we proceed with downloading them all. - - - - - File IDs the client knows the server is using. Fallback in-case the query fails. - - - - - IP of the currently connected server, or zero if unable to retrieve from network system. - Used for testing download restrictions. - - - - - Number of items currently connected server was not authorized to download. - - - - - Called prior to downloading, and after a connection failure. - - - - - Client now knows the published file IDs the server is using, but - queries the workshop for additional information before installing. - - - - - Callback when player subscribes to an item and it finishes downloading. - Different than the game-managed DownloadItem calls. - - - - - Get path to an already-installed workshop item. - - True if the path was found. - - - - Used during startup to register subscribed workshop items. - Given a workshop item file id, if its files exist on disk then register it. - - - - - Workshop file ids we were locally subscribed to during startup. - These items are queried for compatibility before registering. - - - - - Called when subscribed items callback was successful to register all compatible files. - - - - - Called when subscribed items callback did not execute as expected, - maybe because steam's servers are offline. In this case we can't check - compatibility so we register all the locally subscribed items as compatible. - - - - - Register any localization-type workshop content before waiting for the steam callbacks. - Important so that localizations are available for loading screens and whatnot during startup. - Any items we register now will be skipped later. - - - - - If specified, player's workshop file subscriptions are not registered at startup. - - - - - Map of subscriptions added/removed by the player through the in-game client API, as opposed to the web browser. - - - - - Called by us when we subscribe to an item from in-game. - If item already exists on-disk steam doesn't always call onItemInstalled, so we do our own check and potentially load. - - - - - Current achievements implementation. - - - - - Current browser implementation. - - - - - Current cloud implementation. - - - - - Current community implementation. - - - - - Current economy implementation. - - - - - Current matchmaking implementation. - - - - - Current multiplayer implementation. - - - - - Current statistics implementation. - - - - - Current store implementation. - - - - - Current translation implementation. - - - - - Current workshop implementation. - - - - - Initialize this provider's external API. Should be called before using provider features. - - Thrown if initializing fails. - - - - Update this provider's external API. Should be called every frame if using provider features. - - - - - Shutdown this provider's external API. Should be called before closing the program if using provider features. - - - - - Parse dynamic tag mythic effect. - - ID of mythical asset, or zero if not in tags. - - - - For purchasable box and bundle itemdefs this maps their itemdefid to the list of itemdefids in their desc. - - - - - Invoked after a successful exchange with the newly granted items. - - - - - Invoke after a succesful purchase from the item store. - - - - - Purchase result does not have a handle, so we guess based on when it arrives. - - - - - Find the first instanceId of a given itemDefId. - - - - - Count quantity of a given itemDefId. - - - - - Find certain quantity of given itemDefId. - - - - - Does itemdefid exist in the EconInfo.json file? - - - - - Get item with an exchange recipe for the appropriate number of scraps. - - - - - Get list of itemdefids mentioned in purchasable box or bundle item description. - - - - - One player's inventory became so large that the Steam client's built-in GetInventory fails, - so as temporary fix we can send them a json file with their inventory. - - - - - Add an item locally that we know exists in the online inventory, but is just a matter of waiting for it. - - - - - Remove an item locally that we know no longer exists in the online inventory. - - - - - Update our local version of an item that we know has changed, but we are waiting for a full refresh. - - - - - Callback when client knows which items were crafted or exchanged. - - - - - Callback when client thinks result was from purchase. - - - - - 2022-01-01 it does not seem to be documented by Steam, but we get SteamInventoryResultReady callbacks - for external events like AddItem calls, so we may as well handle them. - - - - - Do we know the player's region? - If not, default to not allowing random items. - - - - - Does the player's region allow crates and keys to be used? - Similar to TF2 and other Valve games we disable unboxing in certain regions. - - - - - If player's region does not allow crates and keys to be used, return the country code. - - - - - Similar to TF2 and other Valve games we disable unboxing in certain regions, so hide those items. - - - - - Similar to TF2 and other Valve games we disable unboxing in certain regions. - - - - - Not called on dedicated server. - - - - - Implementing as a struct wrapping the connection handle would remove the cost of looking up the connection, - but implementing as a class makes it cheap to cache information like the remote identity. - - - - - Find game connection associated with Steam connection. - - - - - Must close the handle to free up resources. - - - - - Must close the handle to free up resources. - - - - - Defaults to true. If false, skip Steam Networking Sockets creation of regular IP socket. - - - - - Defaults to true. If false, skip Steam Networking Sockets creation of non-FakeIP P2P socket. - (this is the socket used by "server codes") - - - - - Must close the handle to free up resources. - - - - - Must close the handle to free up resources. - - - - - Recycled array for every read call. - - - - - Log verbose information that should not be included in release builds. - - - - - Log helpful information that should be included in release builds. - - - - - Should certificate authentication be disabled for UDP connections? - - - - - This callback may be called from a service thread. It must be threadsafe and fast! Do not make any other - Steamworks calls from within the handler. - - - - - Thanks DiFFoZ! Ensures GC does not release the delegate. - - - - - Does host want extra debug output? - - - - - Overrides k_ESteamNetworkingConfig_SendBufferSize. - - - - - Overrides k_ESteamNetworkingConfig_EnableDiagnosticsUI. - - - - - Implementation using .NET Berkeley sockets. - - - - - Implements message boundaries on top of a TCP stream socket. - - - - - Implementation using .NET Berkeley sockets. - - - - - SteamNetworking is deprecated. - - - - - SteamNetworking is deprecated. - - - - - Dummy connection used in singleplayer. - - - - - Does initialOverlaps array contain hit collider? - - - - - Does initialOverlaps array contain every hit collider? - - - - - Perform a move, then do a capsule cast to determine if Unity PhysX went through a wall. - - Required when disabling overlap recovery because there are issues when walking toward slopes that bend inward. - To test if Unity works properly in the future; walk toward the inside of a barracks building in the PEI base. - - - - - Set detectCollisions to false and cancel deferred requests to enable. - - - - - Set detectCollisions to true on the next frame. - Useful when CharacterController is teleported to prevent adding huge forces to overlapping rigidbodies. - - - - - If true EnableDetectCollisionsNextFrame, if false DisableDetectCollisions. - - - - - Intentionally Update, not FixedUpdate. Physics transforms are applied between frames, whereas at low frame - rates there may be multiple FixedUpdates per frame. - - - - - Used to capture promotional images. - - Unity does not allow components in the editor assembly, so this component is in the game assembly but only compiled in the editor. - - - - - Test to compare differrent Unity instancing meshes. - - Unity does not allow components in the editor assembly, so this component is in the game assembly but only compiled in the editor. - - - - - Hacky workaround to fix item skin material leak. Unfortunately none of the original item skin code destroyed - instantiated materials, and did not keep a reference to the instantiated materials, so until that code gets a - rewrite this will take care of cleanup. - - - - - Debug component in the editor to see if GetRandomForwardVectorInCone seems correct. :) - Not much of a mathematician. :( - - - - + + + + Assembly-CSharp + + + + + Helper for drawing label outline/shadow so that we can easily change it. + + + + + Helper for drawing label outline/shadow so that we can easily change it. + + + + + If true, SizeOffset_X and SizeOffset_Y are used when image is available. + Defaults to false. + + + + + If useImageDimensions is on and image width exceeds this value, scale down + respecting aspect ratio. + + + + + If useImageDimensions is on and image height exceeds this value, scale down + respecting aspect ratio. + + + + + If true, NVGs work in third-person, not just first-person. + Defaults to false. + + + + + Type the annotated class was generated for. + + + + + Method the annotated method was generated for. + + + + + Exposes the same API as the older Block class used by existing netcode, but implemented using new bit reader/writer. + + + + + Last realtime a request was sent. + Used to rate-limit clientside. + + + + + Perform rate limiting and update timestamp. + + True if we can proceed with request. + + + + Do we think the local player is eligible to send request? + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Find difficulty asset (if valid) for navigation bound index. + + + + + Could potentially be reused generically. + + + + + When zombie falls outside the map it needs a replacement spawnpoint within the same navmesh area. + + + + + Find replacement spawnpoint for a zombie and teleport it there. + + + + + Kills night-only zombies at dawn. + + + + + Allows Unity events to call in airdrops. + + + + + Used by weather assets. + + + + + Distance inward from edge before intensity reaches 100%. + + + + + Alpha is 0.0 outside volume and 1.0 inside inner volume. + + + + + Given a point in world space, find the closest point within the total volume in world space. + + + + + World space size of the box. + + + + + Half the world space size of the box. + + + + + 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. + + + + + World space extents of inner falloff box when falloffDistance is non-zero. + + + + + Local space size of inner falloff box when falloffDistance is non-zero. + + + + + Local space extents of inner falloff box when falloffDistance is non-zero. + + + + + World space radius of the sphere. + + + + + Local space radius of the sphere. + + + + + World space radius of inner falloff sphere when falloffDistance is non-zero. + + + + + Local space radius of inner falloff sphere when falloffDistance is non-zero. + + + + + Useful for code which previously depended on creating the Unity collider to calculate bounding box. + + + + + Called in the level editor during registraion and when visibility is changed. + + + + + Editor-only solid/opaque child mesh renderer object. + + + + + 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. + + + + + Camera does not rotate when the car rotates. + + + + + Camera rotates when the car rotates. + + + + + If hit from the left view rolls right, if hit from the right view rolls left. This may reduce motion + sickness for some players. + + + + + Rotate on all axes according to damage direction. This may induce motion sickness. + + + + + Unfortunately the version which added hitmarker style saved but didn't actually load (sigh). + + + + + 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. + + + + + Prior to 3.22.8.0 all scopes/optics had a base fov of 90 degrees. + + + + + 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) + + + + + If true, group member name labels fade out when near the center of the screen. + Defaults to true. + + + + + 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. + + + + + Controls whether hitmarkers are animated outward (newer) or just a static image ("classic"). + + + + + Determines how camera follows vehicle in third-person view. + + + + + Determines how camera follows aircraft vehicle in third-person view. + + + + + [0, 1] Blend factor between black and flashbang's desired color. + + + + + [0, 1] Multiplier for shake from . + + + + + Controls whether camera is constrained to roll-only or all axes. + + + + + Multiplier for flinch away from damage source in . + + + + + [0, 1] Intensity of FOV boost while sprinting. + + + + + [0, 1] Intensity of first-person motion caused by walking. + + + + + Invoked when custom UI colors are set. + + + + + Invoked when dark/light theme is set. + + + + + Number of times the player has clicked "Proceed" in the online safety menu. + + + + + If true, "don't show again" is checked in the online safety menu. + + + + + Prevents menu from being shown twice without a restart. + + + + + Nelson 2025-02-24: Warning that this is invoked *before* the item is actually removed from the items list. + (public issue #4894) + + + + 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 + + + + + Please use SearchContents instead! To perform an equivalent search: + • Set ItemType to type. + • Set IncludeEmpty to false. + • Set IncludeMaxQuality to true. + + + + + 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. + + + + + Please use SearchContents instead! To perform an equivalent search: + • Set AssetRef to id. + • Set IncludeEmpty to findEmpty. + • Set IncludeMaxQuality to findHealthy. + + + + + 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. + + + + + Invoked after any player's experience value changes (not including loading). + + + + + Invoked after any player's reputation value changes (not including loading). + + + + + Ugly hack for the awful skills enums. Eventually skills should be replaced. + + + + + Set every level to max and replicate. + + + + + Serverside only. + Called when skills weren't loaded (no save, or in arena mode), as well as when reseting skills after death. + + + + + Set this item as the dragging preview. + + + + + Standard shader mode changes are based on built-in StandardShaderGUI.cs + + + + + Does shader name match any of the standard shaders? + Standard, StandardSpecular and the Unturned "Decalable" variants all share nearly identical parameters. + + + + + Based on fixup routine in StandardShaderGUI SetMaterialKeywords. + + + + + Conditionally fixup older standard materials. + + True if material was edited. + + + + Parses mb:X from input string and filters assets using X master bundle. + + + + + 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). + + + + + Recycled list of assets with blueprints. + + + + + Subset of loadedBlueprints. + + + + + Center column. + + + + + Used by inventory item context menu to override which blueprints are shown. + + + + + Left-hand column. + + + + + Right-hand column. + + + + + Returns true if all filtered blueprints are craftable. (hacked-in for item action menu) + + + + + 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.) + + + + + Accessible for UseableHousingPlanner. + + + + + Get a blank status from the pool or construct a new one. + + + + + Barricade asset's EBuild included in saves to fix state length problems. (public issue #3725) + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Writable list of vehicle regions. Public add/remove methods should not be necessary. + + + + + Remove barricade instance on server and client. + + + + + Used by ownership change and damaged event to tell relevant clients the new health. + + + + + Legacy function for UseableBarricade. + + + + + Common code between dropping barricade onto vehicle or into world. + + + + + Spawn a new barricade attached to a vehicle and replicate it. + + + + + Spawn a new barricade and replicate it. + + + + + Not an instance method because structure might not exist yet, in which case we cancel instantiation. + + + + + Destroy barricades whose pivots are within sphere. + + + + + Clean up before loading vehicles. + + + + + 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. + + + + + Called before destroying a vehicle GameObject because storage needed to be ManualDestroyed. + + + + + Send all vehicle-mounted barricades to client. + Called after sending vehicles so all plant indexes will be valid. + + + + + Original server-only version that does not replicate changes to clients. + + + + + Only used by plugins. Replicates state change to clients. + + + + + Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting. + + + + + Maps prefab unique id to inactive list. + + + + + 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! + + + + + +0 = BarricadeDrop + +1 = root transform + +2 = Interactable (if exists) + + + + + 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. + + + + + Not an actual Steam ID or BattlEye ID, instead this is used to map player references to and from BE. + + + + + True for offline or listen server host. + + + + + Next time method is allowed to be called. + + + + + Number of times client has tried to invoke this method while rate-limited. + + + + + Get Steam item definition ID equipped for given vehicle. + + 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. + + + + + Add a recent ping sample to the average ping window. + Updates ping based on the average of several recent ping samples. + + 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. + + True if address was available, and not flagged as a relay server. + + + + See above, returns zero if failed. + + + + + Get real address of remote player NOT a relay server. + + Null if address was unavailable. + + + + Get string representation of remote end point. + + Null if address was unavailable. + + + + Players can set a "nickname" which is only shown to the members in their group. + + + + + 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) + + + + + Component for the tactical laser attachment's red dot. + Resizes itself per-camera to maintain a constant on-screen size. + + + + + Used to tune the scale by distance so that far away laser is not quite as comically large. + + + + + This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius. + + + + + Load {Language}.dat and/or English.dat from folder path. + + + + + Note: as of 2025-04-23 this *can* be null. (E.g., audio-only effects.) + + + + + If set, use OneShotAudioParameters to play this audio. + + + + + If true the music option is respected when this effect is used by ambiance volume. + + + + + In multiplayer the effect will be spawned for players within this radius. + + + + + 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. + + + + + Redirectors are in the Vehicle category so that legacy vehicle IDs point at the redirector. + + + + + Vehicle to use when attempting to load or spawn this asset. + + + + + 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. + + + + + If set, overrides the default random paint color when spawning a new vehicle. + Optionally used to preserve colors of vehicles in spawn tables. + + + + + Invoked prior to built-in death logic. + + + + + Event for plugins when player dies. + + + + + Invoked after player finishes respawning. + + + + + Tracks this player as an aggressor if they were recently an aggressor or if they haven't been attacked recently. + + 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. + + + + + Set legs broken state and replicate to owner if changed. + + + + + Add to or subtract from stamina level. + Does not replicate the change. + + + + + Add to or subtract from stamina level. + Does not replicate the change. + + + + + Called from the server to modify stamina. + + + + + Add to or subtract from stamina level on the client and server. + + + + + Called from the server to induce a hallucination. + + + + + Add to or subtract from hallucination level on the client. + + + + + Add to or subtract from warmth level. + Does not replicate the change. + + + + + Called from the server to modify warmth. + + + + + Add to or subtract from warmth level on the client and server. + + + + + Add to or subtract from oxygen level. + Does not replicate the change. + + + + + Add to or subtract from health level. + Replicates change to owner. + + + + + Add to or subtract from food level. + Replicates change to owner. + + + + + Add to or subtract from water level. + Replicates change to owner. + + + + + Add to or subtract from virus level. + Replicates change to owner. + + + + + Used by plugins to respawn the player bypassing timers. Issue #2701 + + + + + Used to refill all client stats like stamina + + + + + Used by UI. True when underwater or inside non-breathable oxygen volume. + + + + + This value is confusing because in the level editor it is the normalized radius, but in-game it is the radius. + + + + + No longer used in vanilla. Kept in case plugins are using it. + + + + + No longer used in vanilla. Kept in case plugins are using it. + + + + + No longer used in vanilla. Kept in case plugins are using it. + + + + + Actual internal implementation. + + + + + World to local bounds only works well for axis-aligned icons. + + + + + Unity's Camera.orthographicSize is half the height of the viewing volume. Width is calculated from aspect ratio. + + + + + Fading in. + + + + + Finished fading in. + + + + + Fading out. + + + + + Finished fading out. + + + + + Extensions to the built-in Input class. + + + + + Wrapper for Input.GetKey, but returns false while typing in a uGUI text field. + + + + + Wrapper for Input.GetKeyDown, but returns false while typing in a uGUI text field. + + + + + Wrapper for Input.GetKeyUp, but returns false while typing in a uGUI text field. + + + + + 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. + + + + + Original type on the Russia map which requires a mask with filters. + + + + + Requires a mask with filters and full body suit. + + + + + 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. + + + + + 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. + + + + + 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. + + + + + Rate of depletion from gasmask filter's quality/durability. + Defaults to 0.4 to preserve behavior from before adding this property. + + + + + This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius. + + + + + 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. + + + + + Same description as . + + + + + Same description as . + + + + + Same description as . + + + + + Get real IPv4 address of remote player NOT the relay server. + + True if address was available, and not flagged as a relay server. + + + + See above, returns zero if failed. + + + + + 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. + + + + + Register a location as having something built there soon. + + Unique handle to later finish the request. + + + + Is a location available to build at (i.e. no pending builds)? + + False if there are any outstanding build requests for given location. + + + + Notify that a previously registered build has been completed. + + 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. + + + + + Resolve table as items and grant random number to player. + + + + + Resolve table as items and grant random number to player. + + + + + Enumerate random number of valid assetIDs. + + + + + Converts Steam BBcode tokens into widgets displayable using Glazier UI. + + + + + 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. + + + + + Vanilla maximum level. + + + + + If set, maximum skill level attainable through gameplay. + + + + + Multiplier for XP upgrade cost. + + + + + Get maximum level, or maxUnlockableLevel if set. + + + + + + + Implemented by components the player can talk with using DialogeAssets. (e.g., InteractableObjectNPC) + + + + + 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. + + + + + Get a net ID that can be used with GetDialogueTargetFromNetId to resolve IDialogueTarget in multiplayer. + + + + + Called on server to test whether object conditions are met. + + + + + Called on server to find the start of conversation dialogue asset. + + + + + Used in error messages. + + + + + Called on client to format in UI. + + + + + 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. + + + + + 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. + + + + + Is audio muted because loading screen is visible? + + + + + Player's volume multiplier from the options menu. + + + + + Player's unfocused volume multiplier from the options menu. + + + + + Mute or un-mute audio depending whether camera is valid. + + + + + Synchronize AudioListener.volume with Unturned's parameters. + + + + + 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. + + + + + Realtime since performedRealtime. + + + + + if(myRateLimit.throttle(1.0)) + return; // less than 1s passed + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + 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. + + + + + Kept for plugin backwards compatibility. + This one is problematic because on the client physics can move items between regions. + + + + + Find physically simulated items within radius. + + + + + Despawn any old items in the current despawn region. + + True if the region had items to search through. + + + + Attempt to respawn an item in the current respawn region. + + True if an item was succesfully respawned. + + + + Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting. + + + + + Instantiate at least this many items per frame even if we exceed our time budget. + + + + + Sort servers by name A to Z. + + + + + Sort servers by name Z to A. + + + + + 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. + + + + + Steam query port. Zero for servers using Fake IP. + + + + + Name updated from SteamServerAdvertisement. + + + + + Short description updated from SteamServerAdvertisement. + + + + + Small icon updated from SteamServerAdvertisement. + + + + + Used by UI to track whether it's been added/removed. + + + + + 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. + + + + Restore a removed bookmark. + + + + + Static functions for creating monitor instance on server. + + + + + Entry point called by dedicated server after loading level. + + + + + Create vanilla update monitor that watches for changes to workshop level file and any other mods. + + + + + Helper to get updated timestamp from workshop items loaded by DedicatedUGC. + + + + + Helper to create monitored item for use with default DedicatedWorkshopUpdateMonitor implementation. + + + + + For use with default DedicatedWorkshopUpdateMonitor implementation. + + + + + Get index within bounds assuming list is not empty. + + + + + Add a new item using its default constructor. + + + + + Apply shader name redirects until a final name is found, + and then load shader for compatible version of Unity. + + + + + Apply shader name redirects until a final name is found. + Used to fix renamed shaders loaded from old asset bundles. + + + + + Names of older shaders mapped to their renamed counterparts. + Used to fix shaders loaded from old asset bundles. + + + + + Delete all savedata folders for player's characters. + + + + + Number of Attack_# animations. + + + + + Number of Eat_# animations. + + + + + Number of Glance_# animations. + + + + + Number of Startle_# animations. + + + + + Maximum distance on the XZ plane. + + + + + Maximum distance on the XZ plane when attacking vehicles. + + + + + Maximum distance on the Y axis. + + + + + Minimum seconds between attacks. + + + + + Temporary until something better makes sense? For Spyjack. + + + + + If true, animal won't start moving until startle animation finishes. + + + + + Allows mappers to bulk replace assets by listing pairs in a text file. + https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/2275 + + + + + If a redirector for oldGuid exists, returns target asset. Otherwise null. + + + + + Component in the root Menu scene. + Additively loads decoration levels without modifying main scene. + + + + + Prevents static member from being initialized during MonoBehaviour construction. (Unity warning) + + + + + Nelson 2024-02-06: when looking into resolving public issue #3703 I figured since there is a common behavior + between InteractableObjectQuest, InteractableObjectNote, and InteractableObjectDropper (in that they all + request the server to do X we may as well support a "mod hook" that works with all three. + + + + + Controls where attachments looks for ADS alignment transform. + + + + + Look for aim alignment transform relative to sight model. + Defaults to Model_0/Aim. + + + + + Look for aim alignment transform relative to equipable prefab. + Requires setting AimAlignment_Path. + + + + + Factor e.g. 2 is a 2x multiplier. + Prior to 2022-04-11 this was the target field of view. (90/fov) + + + + + Zoom factor used in third-person view. + + + + + Whether main camera field of view should zoom without scope camera / scope overlay. + + + + + If true, scale scope overly by 1 texel to keep "middle" pixel centered. + + + + + Controls where to find AimAlignmentTransformPath. + + + + + If set, find this transform relative to AimAlignmentTransformOwner. + + + + + Position offset relative to Aim transform or transform specified by aimAlignmentTransformPath. + + + + + [0, 1] local distance from center to start of line. + + + + + [0, 1] local width of horizontal line. + + + + + Whether line/number are on left or right side of the center line. + + + + + If true, text label for distance is visible. + + + + + Optional component on Turret_# GameObject for modding UnityEvents. + + + + + Optional collider matching the player capsule to prevent short vehicles (e.g. bikes) from clipping into walls. + + + + + Displays a single random item. Placed under the other main menu buttons. + + + + + Hide existing icon until refresh. + Experimented with doing this for every refresh, but it looks bad in particular for hotbar. + + + + + Name of the asset bundle. + + core.content + + + + Path within the asset bundle. + + + + + Used to test whether player can fit in a space. + Includes terrain because tested capsule could be slightly underground, and clip to prevent exploits at sky limit. + + + + + Used for third-person camera in vehicle. + Does not include resource layer because attached barricades are put on that layer. + Barricades layer itself is included to prevent looking inside player bases. + + + + + Used to test whether player can enter a vehicle. + Does not include resource layer because attached barricades are put on that layer. + + + + + 2023-02-02: adding more layers since splatter can be attached to them now. + parent should only be set if that system also calls ClearAttachments, otherwise attachedEffects will leak memory. + + + + + Layer mask for CharacterController overlap test. + + + + + Layer mask for CharacterController overlap test while inside landscape hole volume. + + + + + Lightning strike raycasts from sky to ground using this layer mask. + + + + + Invoked when component is enabled and when the game object is activated. + + + + + Invoked when component is disabled and when the game object is deactivated. + Note that if the component or game object spawn deactivated this will not be immediately invoked. + + + + + Allows Unity events to print messages to the log file for debugging. + + + + + Text to use when PrintInfo is invoked. + + + + + Every time the inventory changes this number is incremented. + While a little messy, the idea is to prevent inventory checks from happening every frame. + + + + + Should be called every time something changes in the inventory. + + + + + Helper to prevent checking the inventory every frame for systems that don't use events. + + + + + Did owner call askInventory yet? + Prevents duplicate tell_X RPCs from being sent to owner prior to initial sync. + Ideally should be cleaned up with netcode refactor. (Client should not need to ask server for initial state.) + + + + + Intended as nearly a drop-in replacement for . + + + + + Intended as nearly a drop-in replacement for . + + + + + Intended as nearly a drop-in replacement for . + + + + + Intended as nearly a drop-in replacement for . + + + + + Intended as nearly a drop-in replacement for . + + + + + Intended as nearly a drop-in replacement for . + This variant wraps FindFirstItemByAsset and manages the results list for you. + Only use result if true is returned, otherwise it's invalid. + + + + + Intended as nearly a drop-in replacement for . + This variant wraps FindFirstItemByAsset and manages the results list for you. + + + + + Helper for tryAddItemAuto. + + + + + Given an item coordinate (page, x, y) could a new item take the place of an old (existing) item without + overlapping other item(s) space? Always true for equipment slots (page less than SLOTS). + For example if oldSize is (1, 2) rot 0, and newSize is (2, 1) rot 1, then they can swap. + + + + + Swap coordinates of two existing items. + Rotation is provided to handle differently shaped items e.g. a 1x2 item with a 2x1 item. + + + + + Swap coordinates of two existing items. + Rotation is provided to handle differently shaped items e.g. a 1x2 item with a 2x1 item. + + + + + Called from player movement to close storage that has moved away. + + + + + Serverside open a storage crate and notify client. + + + + + Serverside grant access to car trunk storage and notify client. + + + + + Serverside revoke trunk access and notify client. + + + + + Called on both client and server, as well as by storage itself when destroyed. + + + + + Please use SearchContents instead! To perform an equivalent search: + • Set IncludeEquipmentSlots to false. + • Set IncludeActiveStorageContainer to false. + • Set ItemType to type. + • Set IncludeEmpty to false. + • Set IncludeMaxQuality to true. + OR use the nearly drop-in replacement FindItemsByType. + + + + + Please use SearchContents instead! To perform an equivalent search: + • Set IncludeEquipmentSlots to false. + • Set IncludeActiveStorageContainer to false. + • Set ItemType to type. + • Set IncludeEmpty to false. + • Set IncludeMaxQuality to true. + • Set AnyCaliberIds to calibers. + • Set IncludeUnspecifiedCaliber to allowZeroCaliber. + OR use the nearly drop-in replacement FindAttachmentsByCaliber. + + + + + Please use SearchContents instead! To perform an equivalent search: + • Set IncludeEquipmentSlots to false. + • Set IncludeActiveStorageContainer to false. + • Set ItemType to type. + • Set IncludeEmpty to false. + • Set IncludeMaxQuality to true. + • Set CaliberId to caliber. + • Set IncludeUnspecifiedCaliber to allowZeroCaliber. + OR use the nearly drop-in replacement FindAttachmentsByCaliber. + + + + + Please use SearchContents instead! To perform an equivalent search: + • Set IncludeEquipmentSlots to false. + • Set IncludeActiveStorageContainer to false. + • Set AssetRef to id. + • Set IncludeEmpty to findEmpty. + • Set IncludeMaxQuality to findHealthy. + OR use the nearly drop-in replacement FindItemsByAsset. + + + + + Please use SearchContents instead! To perform an equivalent search: + • Set IncludeEquipmentSlots to true. + • Set IncludeActiveStorageContainer to true. + • Set MaxResultsCount to 1. + • Set AssetRef to id. + • Set IncludeEmpty to false. + • Set IncludeMaxQuality to true. + OR use the nearly drop-in replacements FindFirstItemByAsset or HasItemByAsset. + + + + + Filter for whether the Permanent Gold Upgrade DLC is required to join a server. + + + + + All servers pass the filter. + + + + + Only non-gold servers pass the filter. + + + + + Only gold servers pass the filter. + + + + + Can be added to any GameObject to listen for the Event NPC reward type. + + + + + *_ID configured in NPC rewards list. + + + + + If true the event will only be invoked in offline mode and on the server. + + + + + Invoked when NPC global event matching EventId is processed. + + + + + Invoked when timer expires. + + + + + Number of seconds to use when SetDefaultTimer is invoked. + + + + + Should timer loop when SetDefaultTimer is invoked? + + + + + Stop pending timer from triggering. + + + + + Handle to stop the coroutine. + + + + + Horizontal distance before road begins tapering off into the terrain. + + + + + Size along the "up" axis. + + + + + Distance along the terrain surface normal to move each road vertex. + + + + + Multiplier for how far along the road before texture repeats. + + + + + Defaults to None, in which case the backwards-compatible chart classification is used. + + + + + Physics material to assign to road colliders. + Replaces the "concrete" toggle in the older editor. + + + + + Can be added to Vehicle Turret_# GameObject to receive events. + + + + + Invoked when turret gun is fired. + + + + + Invoked when turret gun begins reload sequence. + + + + + Invoked when turret gun begins hammer sequence. + + + + + Invoked when turret gun begins aiming. + + + + + Invoked when turret gun ends aiming. + + + + + Invoked when turret gun controlled by a local player begins aiming. + + + + + Invoked when turret gun controlled by a local player ends aiming. + + + + + Invoked when turret gun controlled by a local player begins inspecting attachments. + + + + + Invoked when turret gun controlled by a local player ends inspecting attachments. + + + + + Invoked when any player enters the seat. + + + + + Invoked when any player exits the seat. + + + + + Invoked when a locally controlled player enters the seat. + + + + + Invoked when a locally controlled player exits the seat. + + + + + Nelson 2025-06-19: using server-provided connection details is useful because + it can find its public IP (e.g., joining by LAN and sharing WAN IP), and/or + its fake IP (again when joining by LAN). + + + + + Is client UTC time within this time range? + + + + + Is server UTC time within this time range? + + + + + Adds custom data to base physics material asset. + For example how a vanilla material should respond to custom laser guns. + + + + + Number of players inside the navmesh when the beacon was placed. + Clamped to 1 if ShouldScaleWithNumberOfParticipants is false. + + + + + Crossover from Dying Light. Only spawns during night. Explodes into fire at dawn. + + + + + Crossover from Dying Light. Only spawns during night. Explodes into fire at dawn. + + + + + Elver endgame boss with reduced bullet damage and wind zombie stomping attacks. + + + + + Kuwait final boss with increased rock throwing, damage players inside vehicle (turrets), and flashbangs. + + + + + Buak boss types have a red-eyed flashbang effect. + + + + + Is this one of the Dying Light volatile zombies? Only spawns during night. Explodes into fire at dawn. + + + + + Does this have the BOSS_* prefix? + + + + + Same as FindChildRecursive, but skip specific child. + + + + + Editor-only helper to read all text/dialogue. + + + + + Version before named version constants were introduced. (2023-11-07) + + + + + Delegate not reset when level reset. + + + + + Delegate not reset when level reset. + + + + + Delegate not reset when level reset. + + + + + Delegate not reset when level reset. + + + + + Number of in-game days this world has run. + Incremented each time night ends. + Saved between sessions. + + + + + Weather has not been decided yet. Level might not have any enabled. + + + + + Weather has been forecast. Timer counts down until activation. + + + + + Weather is now active. Timer counts down until deactivation. + + + + + Weather is active. Will not deactivate naturally. + Prevents loaded perpetual weather from deactivating. + + + + + Determines which weather can naturally be scheduled in this level. + Includes default rain and snow for older levels. + + + + + Seconds until weather activates. + + + + + Seconds until weather deactivates. + + + + + Forecast or active weather. + + + + + Set weather active and disable scheduling. + + + + True if given weather has config. + + + + Cancel scheduled weather and re-evaluate on next update. + + + + + Cancel active weather and prevent next weather from being scheduled. + + + + + Get weather override for the currently loaded level. + Warning: this is kept for backwards compatibility, whereas newer maps will set LevelAsset.perpetualWeather. + + + + + Assign schedulableWeathers array according to level asset or legacy lighting settings. + + + + True if perpetual weather was enabled, false otherwise. + + + + Used by dawn and dusk skins which pull per-level lighting colors. + + + + + Note: unfortunately it appears the stupid skin system always instantiated materials, but never destroys + them... will need to clean this up, but it will be tricky because the game does not hold a reference to them. + + + + + If true, sets the Magazine attachment hook inactive while this skin is applied. (guns only) + + Nelson 2025-03-10: Adding this to address mismatched Ace bullets with certain skins. (public issue #4923) + It should be fine for vanilla guns because there shouldn't be assumptions about Magazine enable/disable, + but modded guns may have different expectations (particularly with GunAttachmentEventHook). + + + + + Used by melee skins to override impact sound. + + + + + Restricts which items can be crafted. + + + + + Restrict blueprints that consume these items. + + + + + Restrict blueprints that generate these items. + + + + + If false, blueprints on vanilla/core/built-in items are not allowed. Defaults to true. + + + + + If null, use index instead. + + + + + Restrict specific blueprints. + + + + + Thanks to Glenn Fiedler for this RK4 implementation article: + https://gafferongames.com/post/integration_basics/ + + + + + Higher values return to the target position faster. + + + + + 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?) + + + + + Absolute path to project directory, e.g. C:/U3 + + + + + Overrides breathability for example in a deep cave with no oxygen, or near a deep sea plant that provides oxygen. + + + + + Find highest alpha breathable volume overlapping position. + + + + + Find highest alpha non-breathable volume overlapping position. + + + + + Unlike format, this returns null if key doesn't exist. + + + + + This overload supports legacy Reward_# format. + + + + + This overload doesn't support legacy Reward_# format. + + + + + 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. + + + + + Speed to launch players away from blast position. + + + + + Can be added to any GameObject to receive weather events: + - Day/Night + - Full Moon + - Rain + - Snow + + + + + Invoked when night changes to day. + + + + + Invoked when day changes to night. + + + + + Invoked when a zombie full-moon event starts. + + + + + Invoked when a zombie full-moon event finishes. + + + + + Invoked when rain starts to fall. + + + + + Invoked when rain finishes falling. + + + + + Invoked when snow starts to fall. + + + + + Invoked when snow finishes falling. + + + + + Registers renderers with DynamicWaterTransparentSort manager. + + + + + In vanilla this field is ONLY used for the per-character saves on servers. + If that changes check that it does not affect the savedata options. + + + + + 20-byte SHA1 salted hashes of client's hardware ID(s). + Providing multiple HWIDs makes it more difficult to bypass HWID bans because spoofing a single component + only changes one of the bans. For example spoofing the MAC address will not spoof the Windows GUID. + + Randomized if system did not support hwid, or perhaps player is cheating. + Should not be called on the client side, but just in case there is a default zeroed array. + + + + + Ignore requests to kick me in debug mode. :) + Steam ID may not have been authenticated yet here which may seem like a security risk, but fortunately that + would get caught when Steam auth ticket response is received. + + + + + Array of 20-byte SHA1 hashes. + + + + + Not using rate limit attribute because this is potentially called for hundreds of structures at once, + and only admins will actually be allowed to apply the transform. + + + + + See BarricadeRegion.FindBarricadeByRootFast comment. + + + + + For code which does not know whether transform exists and/or even is part of a house. + See BarricadeRegion.FindBarricadeByRootFast comment. + + + + + Steam APIs returned uint32 IPv4 addresses in the past, so Unturned code depends on them in some places. + Ideally these uses should be updated for IPv6 support going forward. + For the meantime this method converts from the new format to the old format for backwards compatibility. + + + + + Assets cannot be loaded from Resources during static initialization, so this reference defers the load until + the first time user tries to use it. + + + + + Material on Model_0, the low-speed actual blade. + + + + + Renderer on Model_1. + + + + + Material on Model_1, the high-speed blurred outline. + + + + + transform's localRotation when the vehicle was instantiated. + + + + + Rigidbody component on the root game object. + + + + + If true, set sharedMaterial. If false, set material. + + + + + Calculated speed of this track. Used by some wheels. + + + + + Temporary array for use with physics queries. + + + + + Temporary list for gathering materials. + + + + + Precursor to Net ID. Should eventually become obsolete. + + + + + Asset ID. Essentially obsolete at this point. + + + + + Used to restore vehicle materials when changing skin. + + + + + Only used by trains. Constrains the train to this path. + + + + + Unfortunately old netcode sends train position as a Vector3 using the X channel, but new code only supports + [-4096, 4096) so we pack the train position into all three channels. Eventually this should be cleaned up. + + + + + Nelson 2024-06-24: When first implementing batteries there was only the vanilla battery item, and it was + fine to delete it when the charge reached zero. This may not be desirable, however, so zero now represents + no battery item is present, and one represents the battery is completely drained but still there. + + + + + Is this vehicle inside a safezone? + + + + + Duration in seconds since this vehicle entered a safezone, + or -1 if it's not in a safezone. + + + + + Should askDamage requests currently be ignored because we are inside a safezone? + + + + + Nelson 2024-06-24: This property is confusing, especially with isEnginePowered, but essentially represents + starting the engine ignition when a player enters the driver's seat. If true, there's a driver, there was + sufficient battery to start (or battery not required), and the engine wasn't underwater. + + + + + Doesn't imply the vehicle *uses* batteries, only that it contains a battery item with some charge left. + + + + + Doesn't imply the vehicle *uses* batteries, only that it contains a (potentially uncharged) battery item. + + + + + Nelson 2024-11-13: Adding this primarily to indicate whether a vehicle was spawned by the level versus + placed by a player or bought from a vendor. This way if the number of "naturally"-spawned vehicles is below + a certain threshold the level can spawn more. (e.g., a server where players have hoarded a bunch of + vendor-purchased vehicles and no default vehicles are left for new players.) + + Only available on the server. + Defaults to true for old saves to prevent suddenly spawning a bunch more vehicles. + + + + + Whether the player can shoot their equipped turret. + + + + + Do any of the passenger seats have a player? + + + + + When the server saves it doesn't include any cleared vehicles. + + + + + If true, the vehicle will be destroyed at the end of the frame. Set before OnPreDestroyVehicle. + Used to reject requests to enter the vehicle on the same frame it's being destroyed. + + + + + Magnitude of rigidbody velocity, replicated by current simulation owner. + + + + + Rigidbody velocity along forward axis, replicated by current simulation owner. + + + + + Replicated by current simulation owner. Target velocity used, e.g., for helicopter engine speed. + + + + + [0, 1] If forward velocity is greater than zero, get normalized by target forward speed. If less than zero, + get normalized by target reverse speed. Result is always positive. + + + + + Animated toward ReplicatedForwardVelocity. + + + + + Animated toward ReplicatedVelocityInput. + + + + + [-1.0, 1.0] Available on both client and server. + + + + + Animated towards replicated steering angle. Used for steering wheel and front steering column. + Non-simulating wheels (e.g., car driven by remote client) use this as steering angle multiplied by their + per-wheel . + + + + + Front steering column of bicycles and motorcycles. + + + + + If true, server should replicate latest state to clients. + + + + + Used by several engine modes to represent an interpolated velocity target according to input. + + + + + Set from inputTargetVelocity then multiplied by any factors which shouldn't affect the player's "target" + speed ike boatTraction. + + + + + Vehicles with buoyancy interpolate this value according to whether it's in the water, and multiply + boat-related forces by it. + + + + + Rigidbody on the Vehicle prefab. + (not called "rigidbody" because as of 2024-02-28 the deprecated "rigidbody" property still exists) + + + + + Primarily for backwards compatibility with plugins. Previously, multiple "updates" could be queued per + vehicle and sent to clients. This list was public, unfortunately, so plugins may rely on submitting vehicle + updates. After making it obsolete each vehicle can only be flagged as needing a replication update, and + this is reset after each server replication update. + + + + + Is player currently allowed to repair this vehicle? + + + + + Give battery item to player and set battery charge to zero. + + + + + Nelson 2024-06-24: Previously, this wouldn't give an item to the player if the quality was zero. Now it + trusts the caller to validate we have a battery item to give, and respects . + + + + + Can a tire item be used with this vehicle? + + + + + Find the index of the wheel collider that contains this position. + + + + + Find the index of the wheel collider closest to this position, or -1 if not near any. + + + + + Called during simulate at fixed rate. + + + + + Is a given player allowed access to this vehicle? + + + + + If true, sentry ignores this vehicle early in target scanning. + Friendly if locked by owner/group of sentry, or driven by owner/group of sentry. + + + + + Average vehicle-space position of wheel bases. + + + + + Turn taillights on/off depending on state. + + + + + This check should really not be necessary, but somehow it is a recurring issue that servers get slowed down + by something going wrong and the vehicle exploding a billion times leaving items everywhere. + + + + + VehicleManager expects this to only find the seat, not add the player, + because it does a LoS check. + + + + + Call on the server to empty the vehicle of passengers. + + + + + Kicks them out even if there isn't a good spot. Used when killing the occupant. + + True if player is seated, false otherwise. + + + + Can a safe exit point currently be found? + + Called when considering to add a new passenger to prevent players from entering + a vehicle that they wouldn't be able to exit properly. + + + + + Could a player capsule fit in a given exit position? + + + + True if anything was hit. + + + + Raycast along a given direction, penetrating through barricades attached to THIS vehicle. + Returns point at the end of the ray if unblocked, or a safe (radius) distance away from hit. + + + + + Fallback if there are absolutely no good exit points. + Sets point and angle with a normal player spawnpoint. + + Once vehicle is completely surrounded there is no nice way to pick an exit point. Finding + a point upwards is abused to teleport upward into bases, finding an empty capsule nearby is + abused to teleport through walls, so if we're sure there isn't a nice exit point we can + fallback to teleporting them to a safe spawnpoint. + + + + True if we can safely exit. + + + + Initially use tryGetExit to find a safe exit, but if one isn't available then fallback to getExitSpawnPoint. + + + + + Dedicated server simulate driving input. + + + + + -1 is reverse. + 0 is neutral. + +1 is index 0 in gear ratios list. + + + + + Engine RPM replicated by current simulation owner. + + + + + Animated toward ReplicatedEngineRpm. + + + + + Called when engine RPM exceeds threshold and there are more gears available. + Purpose is to skip gear numbers that don't bring engine RPM within threshold (if possible). + + + + + Called when engine RPM is below threshold and there are more lower gears available. + Purpose is to skip gear numbers that don't bring engine RPM within threshold (if possible). + + + + + Client simulate driving input. + + + + + Nelson 2025-05-05: ran into a bug where our manual OnUpdate is called before Unity calls Start! + + + + + Nelson 2025-05-02: keeping the previous comment from 2020-11-26 here. At first I wondered if 24 vehicles + wasn't enough to properly test, but even with a higher vehicle count it can seemingly be *slower* to + call Update manually. That said, calling Update manually does give us the option to time-slice vehicle + updates. On the client and singleplayer we now update vehicles outside render distance at a lower + frequency which saves ~0.1 ms per frame on my PC. + + 2020-11-26 experimented with dispatching all vehicle updates from C# in VehicleManager because they make up + a significant portion of the MonoBehaviour Update, but the savings on my PC with 24 vehicles on PEI was + minor. Not worth the potential troubles. + + + + + Nelson 2025-04-22: it hopefully goes without saying the bicycle pedals are janky as heck, I'm just separating + out the Update method to make profiling it easier. + + + + + Nelson 2025-04-22: this should ideally be moved into FixedUpdate, incorrect to run in Update. + + + + + Nelson 2025-04-22: this should ideally be moved into FixedUpdate, incorrect to run in Update. + + + + + Update whether this vehicle is inside a safezone. + If a certain option is enabled, unlock after time threshold is passed. + + + + + Can be called without calling init. + + + + + Called after initializing vehicle. + + + + + Makes the collision detection system ignore all collisions between this vehicle and the given colliders. + Used to prevent vehicle from colliding with attached items. + + + + + Used to disable collision between skycrane and held vehicle. + + + + + Transform used for exit physics queries. + + + + + Find collider with the largest volume to use for exit physics queries. + + + + + Set material on DepthMask child renderer responsible for hiding water when interior of vehicle is submerged. + + + + + Skin material does not always need to be destroyed, so this is only valid if it should be destroyed. + + + + + Materials that should be destroyed when this vehicle is destroyed. + + + + + Handles to unregister from DynamicWaterTransparentSort. + + + + + Materials to set _PaintColor on. + + + + + Materials to move UVs in sync with wheels. + + + + + Time.time decayTimer was last updated. + + + + + Seconds since vehicle was interacted with. + + + + + Fractional damage counter. + + + + + transform.position used to test whether vehicle is moving. + + + + + Text from *.dat localization file. + + + + + Older *.content asset bundle reference. + + + + + Newer *.masterbundle reference. + + + + + Optional URL to open in web browser. + + + + + Whether audio source should loop. + + + + + Append suffix to name, or if name contains a '.' insert it before. + + + + + Vendor asset that owns this buy/sell record. + + + + + If not null, replaces item/vehicle description. + + + + + Allows Unity events to startle nearby animals and zombies. + + + + + Transform to spawn the alert at. + If unset, this game object's transform will be used instead. + + + + + If true, find the nearest player within ScanForPlayersRadius, and use the player's position as the alert + origin. + + + + + If UseScanForPlayers is enabled and this is true, an alert is broadcast even if no nearby player was found. + Otherwise, alert is ignored if no nearby player was found. + + + + + Used in a test scene to quickly test whether pooled components are cleaned up. + + + + + Invoked after any player's stance changes (not including loading). + + + + + Stance to fit available space when loading in. + + + + Distance zombies can detect this player within. + + + + Older, cached version of areEyesUnderwater. + + + + + Return false if there are any external restrictions (e.g. reloading, handcuffed) preventing climbing. + + + + + Test whether bottom of controller is currently inside a water volume. + + + + + Test whether viewpoint is currently inside a water volume. + + + + + Test whether body is currently inside a water volume. + Enters the swimming stance while true. + + + + + Draw debug capsule matching the player size. + + + + + Draw standing-height debug capsule matching the player size. + + + + + Is there enough height for our capsule at a position? + + + + + Could a standing player capsule fit at the given position? + + + + + Could a crouching player capsule fit at the given position? + + + + + Could a prone player capsule fit at the given position? + + + + + Could a standing player capsule teleport to the given position? + + + + + Is there any compatible stance that can fit at position? + + + + + Using our capsule's current height would there be enough space at a given position? + + + + + Does capsule have appropriate clearance for a pending height change? + + + + + Replicate stance to clients. + + + + + Regular interact ray still hits the ladder, but we only allow climbing within a smaller range to make its + teleport less powerful. + + + + + Ladder forward ray is 0.75m, so we move slightly less than that away from the ladder. + + + + + Export JSON report of Unturned's assets for economy usage. + + + + + If true, contains child transform named Effect for mythical attachment. + + + + + Attachment item IDs that get skinned specially. + + + + + Is there a fallback material for attachments that respects their main metallic areas? + + + + + Is there a fallback material without any special features? + + + + + Is there a replacement mesh? + + + + + Dawn and dusk skins pull per-lighting colors. + + + + + Pool lists to avoid loopback re-using an existing list. + Callers do not need to manually return lists because they are reset before each frame. + + + + + Exit button only needs to wait for timer in certain conditions. + + + + + Does the item being placed count as a "trap" for the purposes of vehicle placement restrictions? + + + + + Should placement ghost material change be done recursively? + e.g. Sentry has a deep hierarchy of meshes. + + + + + Given path to a workshop map, try to find its /Bundles folder. + + + + + Given path to a workshop map, try to find its /Content folder. + + + + + Maps on the workshop are a root folder named after the published file id, containing + the map folder itself with the level name. In order to load the map's bundles and content + properly we need to find the nested Bundles and Content folders. + + + + + 2023-02-28: note order is important because BarricadeManager saves as a byte! + + + + + Invoked after tellGesture is called with the new gesture. + + + + + Empty transform created at the world origin. + The first-person Viewmodel transform is re-parented to this. + + + + + Child of the first-person skull transform. + + + + + Camera near world origin masking the first-person arms and weapon. + + + + + Used by gun to hide viewmodel arms while aiming 2D scope, and by chainsaw to shake the viewmodel. + + + + + Used to hide viewmodel arms while using a vehicle turret gun. + + + + + Offsets main camera and aim rotation while aiming with a scoped gun. + + + + + Animated toward viewmodelSwayMultiplier. + + + + + Small number (0.1) while aiming, 1 while not aiming. + Reduces viewmodel animation while aiming to make 3D sights more usable. + + + + + Animated toward viewmodelOffsetPreferenceMultiplier. + + + + + 0 while aiming, 1 while not aiming. + Players can customize the 3D position of the viewmodel on screen, but this needs + to be blended out while aiming down sights otherwise it would not line up with + the center of the screen. + + + + + If true, use the scope aim fov instead of non-scope fov. + Useful for players with high (e.g. 160) fov to be able to use scopes. + + + + + Animated toward viewmodelCameraLocalPositionOffset, recoil, and bayonet offsets. + + + + + Abruptly offset when gun is fired, then animated back toward zero. + + + + + Abruptly offset when gun is fired, then animated back toward zero. + x = pitch, y = yaw, z = roll + + + + + Abruptly offset when bayonet is used, then animated back toward zero. + + + + + Animated while player is moving. + + + + + Blended from multiple viewmodel parameters and then applied to viewmodelCameraTransform. + + + + + Smoothing adds some initial blend-in which felt nicer for explosion rumble. + + + + + Meshes are disabled until clothing is received. + + + + + Target viewmodelCameraLocalPosition except while driving. + + + + + Animated while playing is moving. + x = pitch, y = roll + + + + + Offset when player lands. + + + + + Used to measure change in pitch between frames. + + + + + Used to measure change in yaw between frames. + + + + + Animated according to change in pitch/yaw input between frames so that gun rolls slightly while turning. + + + + + Animated according to change in item position between frames so that animations have more inertia. + + + + + Degrees per meter of item distance travelled. + Pitch is driven by vertical displacement, yaw and roll are driven by horizontal. + x = pitch, y = yaw, z = roll + + + + + In third-person this delays leaning in case player only wanted + to switch camera side without leaning. + + + + If true, include current animation speed modifier. + + + + At this point camera is already being shook, we just add some of the same shake to viewmodel for secondary motion. + + + + + Called by clothing to make mesh renderers visible. + + + + + Event for server plugins to monitor whether player is in-inventory. + + + + + Rate limit is relatively high because this RPC handles open/close inventory notification. + + + + + Nelson 2024-03-20: Adding this method because (at the time of writing) first and third-person renderers + and skeletons are activated/enabled in InitializePlayer, onPerspectiveUpdated, and onLifeUpdated, and I + want them to be consistent with the addition of the new NPC Cutscene Mode option. + + + + + 2023-01-18: Viewmodel camera position was originally set during Update (and still is for compatibility), + but for aiming alignment that uses the previous frame's animation position, so we also modify during + LateUpdate to use this frame's animation position. + + + + + Factor e.g. 2 is a 2x multiplier. + Prior to 2022-04-11 this was the target field of view. (90/fov) + + + + + [0, 1] percentage whether a shot decreases ammo count. Defaults to 100%. + For example, 0.25 means 25% of shots will use a bullet, while the remaining 75% will be free. + + + + + [0, 1] percentage whether a shot decreases quality. Defaults to 100%. + Combined with the gun's chance of decreasing quality. + + + + + Players/zombies within this range are treated as potential targets while scanning. + + + + + Will not lose current target within this range. Prevents target from popping in and out of range. + + + + + If true, this sentry can attack players. Defaults to true. + + + + + If true, this sentry can attack zombies. Defaults to true. + + + + + If true, this sentry can attack animals. Defaults to true. + + + + + If true, this sentry can attack vehicles. Defaults to true. + + + + + If the file already exists when writing we will move it to this path. (public issue #4636) + + + + + If false this barricade cannot take damage. + + + + + Modded barricades can disable pooling if they have custom incompatible logic. + + + + + Defaults to false, except for explosive charges which bypass claims. + Requested by Renaxon for collectible barricades that raiders can steal without destroying. + + + + + Defaults to false, except for explosive charges which bypass claims. + If true the item can be placed inside player clip volumes. (out of bounds) + + + + + Should door colliders remain active while animation is playing? + Enabled by modders trying to make stuff like elevators. + + + + + Optional alternative barricade prefab specifically for the client preview spawned. + + + + + By default, vehicles with "hooks" (such as the Skycrane) cannot pick up vehicles with barricades attached. + If all barricades on the vehicle set this to true then the vehicle *can* be picked up. Defaults to false. + + + + + Vehicle to place. + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Legacy ID of vehicle to place. + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the + vehicle spawner requires to properly set paint color. + + + + + Can be added to any GameObject with a Trigger to receive events. + Ensure that Layer will detect player overlaps. Trap is a good candidate. + + + + + Invoked when a player enters the trigger. + Called before OnFirstPlayerEnter. + + + + + Invoked when a player exits the trigger. + Called before OnAllPlayersExit. + + + + + Invoked when first player enters the trigger, and not again until all players have left. + Called after OnPlayerEnter. + + + + + Invoked when last player exits the trigger. + Called after OnPlayerExit. + + + + + Nelson 2024-12-16: This menu and ESteamUGCType are far from ideal, but I'm just trying to hack in a new tag for + server browser curation assets before the update. :P + + + + + Nelson 2025-02-20: Hacking this in to address duplicate buttons when onPublishedAdded is called for a second + page of published files. (public issue #4882) + + + + + Allows Unity events to spawn items. + + + + + Called when the player clicks the cosmetic, visual or skin toggle buttons. + + + + + Invoked after any player's shirt values change (not including loading). + + + + + Invoked after any player's shirt values change (not including loading). + + + + + Invoked after any player's hat values change (not including loading). + + + + + Invoked after any player's backpack values change (not including loading). + + + + + Invoked after any player's backpack values change (not including loading). + + + + + Invoked after any player's backpack values change (not including loading). + + + + + Invoked after any player's glasses values change (not including loading). + + + + + Null if not bookmarked. + + + + + DNS entry to use if adding a bookmark for this server. + + + + + Adjusts width and spacing of buttons along the bottom of the screen. + Favorite and bookmark buttons can be hidden depending whether the necessary server details are set. + + + + + Sort items with lowest "amount" to front of list. + + + + + Sort items with highest "amount" to front of list. + + + + + Sort items with lowest quality% to front of list. + + + + + Sort items with highest quality% to front of list. + + + + + Sum up number of items found, ignoring amount. + Default except as described in TotalAmount comment. + + + + + Sum up "amount" of each item. Optionally counting zero as one (ShouldCountEmptyAsOne). + Default for legacy "ammo type" blueprints and FillTargetItem operation. + + + + + Note: if calling ItemRef.Get() please use FindItemAsset instead to avoid redundant asset lookups. + + + + + If true, items with an "amount" of zero are included in eligible supplies as amount 1. + In practice (as of 2025-03-03), items with zero amount are empty containers such as magazines. + + + + + Determines how totalAmount of each input is calculated. + + + + + If true, items with an "amount" of zero are included in eligible supplies. + Otherwise, they are ignored (default). + + + + + If true, items with an "amount" >= their MaxAmount are ignored. Otherwise, they are eligible (default). + + + + + If true, items with quality of 100% are eligible (default). Otherwise, they are ignored. + + + + + Controls which items are used first. For example, whether to use the lowest quality items first. + + + + + If true, delete input item. Defaults to true. + Replaces the "tool" blueprint option. + + + + + Does this blueprint input require the specified item? + + + + + Controls whether vehicle allows barricades to be attached to it. + + + + + Vehicle does not override placement. This means, by default, that barricades can be placed on the vehicle + unless the barricade sets Allow_Placement_On_Vehicle to false. (e.g., beds and sentry guns) Note that + gameplay config Bypass_Buildable_Mobility, if true, takes priority. + + + + + Vehicle allows any barricade to be placed on it, regardless of the barricade's Allow_Placement_On_Vehicle + setting. The legacy option for this was the Supports_Mobile_Buildables flag. Vanilla trains originally + used this option, but it was exploited to move beds into tunnel walls. + + + + + Vehicle prevents any barricade from being placed on it. Note that gameplay config Bypass_Buildable_Mobility, + if true, takes priority. + + + + + Scene hierarchy path relative to vehicle root. + + + + + Index in renderer's materials array. + + + + + If true, apply to every item in renderer's materials array. + + + + + Controls how vehicle's default paint color (if applicable) is chosen. + + + + + Not configured. + + + + + Pick from the DefaultPaintColors list. + + + + + Pick a random HSV using VehicleRandomPaintColorConfiguration. + + + + + Wheel does not affect steering. + + + + + Set steering angle according to and . + + + + + Increase or decrease motor torque to rotate vehicle in-place. (Tanks) + + + + + For , indicates how a positive motor torque (forward) rotates + the vehicle. + + + + + Wheels on the left side are Clockwise and wheels on the right side are Counter-Clockwise. + + + + + Positive motor torque on this wheel rotates the vehicle clockwise. + + + + + Positive motor torque on this wheel rotates the vehicle counter-clockwise. + + + + + Controls whether wheel creates particle kickup effects for the ground surface material underneath. + + + + + Turn off motion effects. Default for wheels not using collider pose. + + + + + Enable motion effects. Default for wheels using collider pose. + + + + + Enable motion effects, but turn them off while moving backward. + + + + + Enable motion effects, but turn them off while moving forward. + + + + + [0, 1] color will have zero saturation if random value is less than this. For example, 0.2 means 20% of + vehicles will be grayscale. + + + + + If true, this configuration was created by . + Otherwise, this configuration was loaded from the vehicle asset file. + + + + + Transform path relative to Vehicle prefab with WheelCollider component. + + + + + If true, WheelCollider's motorTorque is set according to accelerator input. + + + + + Transform path relative to Vehicle prefab. Animated to match WheelCollider state. + + + + + If true, model is animated according to steering input. + Only kept for backwards compatibility. Prior to wheel configurations, only certain WheelColliders actually + received steering input, while multiple models would appear to steer. For example, the APC's front 4 wheels + appeared to rotate but only the front 2 actually affected physics. + + + + + If true, model ignores isModelSteered and instead uses WheelCollider.GetWorldPose when simulating or the + replicated state from the server when not simulating. Defaults to false. + + + + + If greater than zero, visual-only wheels (without a collider) like the extra wheels of the Snowmobile use + this radius to calculate their rolling speed. + + + + + If set, visual-only wheels without a collider (like the back wheels of the snowmobile) can copy RPM from + a wheel that does have a collider. Requires modelRadius to also be set. + + + + + If set, wheel model uses this crawler track's speed (average RPM of wheels). Prevents wheel model from + spinning out of sync with overall track. + + + + + Target steering angle is multiplied by this value. For example, can be set to a negative number for + rear-wheel steering. Defaults to 1. + + + + + Vertical offset of model from simulated suspension position. + + + + + How quickly to interpolate model toward suspension position in meters per second. + If negative, position teleports immediately. + + + + + Nelson 2024-12-06: Initially implemented as a minimum and maximum percentage of normalized forward velocity, + but think this is more practical. I can't think of why we would use values other than -1, 0, +1 for that, + and if we did we'd probably want some tuning for the angle particles are emitted at. + + + + + If true, wheel should fly off when vehicle explodes. Defaults to true. + Used to simplify destroying vehicles with crawler tracks. + + + + + Default. + + + + + Set pitch and volume of a single clip according to engine RPM. + + + + + Offsets a crawler track's material UV offset in sync with wheels rolling. + + + + + Scene hierarchy path relative to vehicle root. + + + + + Index in renderer's materials array. + + + + + Indices of wheels to copy RPM from. + + + + + How far to travel to offset UV 1x. (1/x) + + You can calculate RepeatDistance by selecting an edge parallel to the crawler track and dividing the UV + distance by the physical 3D distance. For example, if the UV length is 2 and the 3D length is 1.5 m then + the texture repeats 1.33 UV/m. + + + + + UV mainTextureOffset per distance traveled. + + + + + Please refer to: + + + + + Please refer to: + + + + + Supports redirects by VehicleRedirectorAsset. + + "Shared Skins" were implemented when there were several asset variants of each vehicle. For example, + Off_Roader_Orange, Off_Roader_Purple, Off_Roader_Green, etc. Each vehicle had their "shared skin" set to + the same ID, and the skin asset had its target ID set to the shared ID. This isn't as necessary after + merging vanilla vehicle variants, but some mods may rely on it, and it needed GUID support now that the + target vehicle might not have a legacy ID. + + + + + Prevents calling getOrLoad redundantly if asset does not exist. + + + + + Clip.prefab + + + + + Vehicle.prefab + + + + + Nelson 2024-02-28: Prior to the VehicleWheelConfiguration class, most of the wheel configuration was + inferred during InteractableVehicle initialization from the children of the "Tires" and "Wheels" transforms. + Confusingly, "Tires" only contains WheelColliders and "Wheels" only contains the visual models. Rather than + keeping the old behavior in InteractableVehicle alongside the newer more configurable one, we match the old + behavior here to generate an equivalent configuration. + + Note that must be initialized before this is called (by loading model). + + + + + Maximum (negative) velocity to aim for while accelerating backward. + + + + + Maximum speed to aim for while accelerating backward. + + + + + Maximum velocity to aim for while accelerating forward. + + + + + Maximum speed to aim for while accelerating forward. + + + + + Steering angle range at zero speed. + + + + + Steering angle range at target maximum speed (for the current forward/backward direction). + + + + + Steering angle rotation change in degrees per second. + + + + + Added or subtracted from wheel motor torque in mode. + + + + + When a wheel is in mode and a steering input is applied the + stiffness is multiplied by this factor. This allows the vehicle + to rotate in-place with a lower steering torque, which helps prevent the vehicle from going out of control + while turning and accelerating. + + + + + Multiplier for and + while at target maximum speed (for the current forward/backward direction). + + + + + Torque on Z axis applied according to steering input for bikes and motorcycles. + + + + + If true, leaning force is multiplied by normalized speed to the power of steeringLeaningForceSpeedExponent. + Defaults to false. + + + + + Refer to steeringLeaningForceShouldScaleWithSpeed. + + + + + If true, explosion will damage nearby entities and kill passengers. + + + + + Only used if ShouldExplosionBurnMaterials. Optional. Allows specifying which renderers to burn. + + + + + When true the bicycle animation is used and extra speed is stamina powered. + Bad way to implement it. + + + + + Can this vehicle ever spawn with a charged battery? + Uses game mode battery stats when true, or overrides by preventing battery spawn when false. + + + + + Battery charge when first spawning in is multiplied by this [0, 1] number. + + + + + Battery decrease per second. + + + + + Battery increase per second. + + + + + Battery item given to the player when a specific battery hasn't been manually + installed yet. Defaults to the vanilla car battery (098b13be34a7411db7736b7f866ada69). + + + + + Fuel decrease per second. + + + + + Client sends physics simulation results to server. If upward (+Y) speed exceeds this, mark the move invalid. + + + + + Client sends physics simulation results to server. If downward (-Y) speed exceeds this, mark the move invalid. + + + + + If distance between client-submitted hit position and vehicle pivot point is too high the hit will be + marked invalid. This multiplies the distance threshold, useful for very fast vehicles. + + + + + Vertical first-person view translation. + + + + + Vertical first-person view translation. + + + + + Base damage to players when traveling at 1 m/s. Defaults to 10. + + + + + Base damage to zombies when traveling at 1 m/s. Defaults to 15. + + + + + Base damage to animals when traveling at 1 m/s. Defaults to 15. + + + + + Base damage to objects when traveling at 1 m/s. Defaults to 30. + + + + + Base damage to trees when traveling at 1 m/s. Defaults to 85. + + + + + If speed multiplied by is less than this, no damage is applied. + Defaults to 3. + + + + + Multiplier for damage from crashing into things. + Not applicable if is false. + Defaults to 1. + + + + + To non-explosions. + + + + + Mega zombie rocks, zombies, animals. + + + + + Crashing into stuff. + + + + + Can this vehicle be repaired by a seated player? + + + + + Can mobile barricades e.g. bed or sentry guns be placed on this vehicle? + + + + + Should capsule colliders be added to seat transforms? + Useful to prevent bikes from leaning into walls. + + + + + Can players lock the vehicle to their clan/group? + True by default, but mods want to be able to disable. + + + + + Can players steal the battery? + + + + + Spawn table to drop items from on death. + + + + + Minimum number of items to drop on death. + + + + + Maximum number of items to drop on death. + + + + + Item ID of compatible tire. + + + + + If greater than zero, torque is applied on the local Z axis multiplied by this factor. + Note that is critical for damping this force. + + + + + Exponent on the [0, 1] factor representing how aligned the vehicle is with the ground up vector. + + + + + If greater than zero, an acceleration is applied to angular velocity on Z axis toward zero. + + + + + Indices of wheels using replicated collider pose (if any). + Null if not configured or no wheels using this feature. + Allows client and server to replicate only the suspension value without other context. + + + + + Indices of wheels with motor torque applied (if any). + Used for engine RPM calculation. + + + + + If this and UsesEngineRpmAndGears are true, HUD will show RPM and gear number. + + + + + When engine RPM dips below this value shift to the next lower gear if available. + + + + + When engine RPM exceeds this value shift to the next higher gear if available. + + + + + How long after changing gears before throttle is engaged again. + + + + + How long between changing gears to allow another automatic gear change. + + + + + Minimum engine RPM. + + + + + Maximum engine RPM. + + + + + How quickly RPM can increase in RPM/s. + e.g., 1000 will take 2 seconds to go from 2000 to 4000 RPM. + + + + + How quickly RPM can decrease in RPM/s. + e.g., 1000 will take 2 seconds to go from 4000 to 2000 RPM. + + + + + Maximum torque (multiplied by output of torque curve). + + + + + Was a center of mass specified in the .dat? + + + + + If hasCenterOfMassOverride, use this value. + + + + + Multiplier for otherwise not-yet-configurable plane/heli/boat forces. + Nelson 2024-03-06: Required for increasing mass of vehicles without significantly messing with behavior. + + + + + If set, override the wheel collider mass with this value. + + + + + Null if vehicle doesn't support paint color. + + + + + List of transforms to register with DynamicWaterTransparentSort. + + + + + Null if vehicle doesn't support paint color. + + + + + Null if isn't . + + + + + Pick a random paint color according to . Null if unsupported or not configured. + + + + + If true, Vehicle Paint items can be used on this vehicle. + Always false if is false. + + Certain vehicles may support paint colors without also being paintable by players. For example, the creator + of a vehicle may want to use color variants without also allowing players to make it bright pink. + + + + + Returns reverseGearRatio for negative gears, actual value for valid gear number, otherwise zero. + Exposed for plugin use. + + + + + Get number of reverse gear ratios. + Exposed for plugin use. + + + + + Get number of forward gear ratios. + Exposed for plugin use. + + + + + Number of tire visuals to rotate with steering wheel. + + + + + If true then level should convert old terrain. + + + + + If true, splatmap conversion should use weights as-is. + + + + + Material guids converted by legacy asset bundle hash or texture names. + + + + + Hash of Trees.dat, or zeroed if any assets were missing locally. + Should only be used if level is configured to, as many mod maps are typically missing assets. + + + + + Nelson 2025-06-10: replacement for _trees. Enables trees outside the "insane" level bounds. + + + + + Append all trees in the level to results list. + + + + + Game does not currently have a way to resave level's Config.json file, so instead we save a text file + indicating that the terrain auto conversion was performed. If there was a bug with auto conversion then + all of the old files are still present and can be re-converted. + + + + + Stagger regional visibility across multiple frames. + + + + + Caches uint16 ID to ID redirects. + + + + + Manages lifetime and attachment of a mythical effect. Added by . + Was called `MythicLocker` with a paired `MythicLockee` prior to 2024-06-11. + + + + + https://steamcommunity.com/dev/managegameservers + + + + + IP address, DNS name, or a web address (to perform GET request) to advertise. + + Servers not using Fake IP can specify just a DNS entry. This way if server's IP changes clients can rejoin. + For example, if you own the "example.com" domain you could add an A record "myunturnedserver" pointing at + your game server IP and set that record here "myunturnedserver.example.com". + + Servers using Fake IP are assigned random ports at startup, but can implement a web API endpoint to return + the IP and port. Clients perform a GET request if this string starts with http:// or https://. The returned + text can be an IP address or DNS name with optional query port override. (e.g., "127.0.0.1:27015") + + + + + If true, the server lobby warns that in-game ping may be higher than shown. BUT it's shown in the default + UI color rather than the "bad" color when flagged by moderation. + + + + + If ready-to-connect messages are received more than twice from the same client in less than this many + seconds they will be kicked. + + + + + If bad packets (that *may* be legitimate) are received more than threshold times within this many seconds + of each other, reject the calling connection. + + + + + If more than this many bad packets (that *may* be legitimate) are received within window seconds of each + other, reject the calling connection. + + + + + If a rate-limited method is called this many times within cooldown window the client will be kicked. + For example a value of 1 means the client will be kicked the first time they call the method off-cooldown. (not recommended) + + + + + Only applicable when Fake IP is off. When a client is connecting, if their connection would push the number + of simultaneous connections from the same IP address past this number, they are prevented from joining. + + May be useful to prevent against fake join requests coming from a single source IP. (public issue #5001) + + Defaults to a high value because some regions will have many more clients with the same IPv4 address than + others. For example, due to Carrier-grade NAT (CGNAT). + + + + + Whether rejections for Max_Clients_With_Same_IP_Address should log to command output. Useful for checking + if the limit is appropriate. + + + + + Ordinarily the server should be receiving multiple input packets per second from a client. If more than this + amount of time passes between input packets we flag the client as potentially using a lag switch, and modify + their stats (e.g. reduce player damage) for a corresponding duration. + Minimum value is PlayerInput.MIN_FAKE_LAG_THRESHOLD_SECONDS. + + + + + Whether fake lag detection should log to command output. False positives are relatively likely when client + framerate hitches (e.g. loading dense region), so this is best used for tuning threshold rather than bans. + + + + + PvP damage multiplier while under fake lag penalty. + + + + + Should we kick players after detecting spammed calls to askInput? + + + + + Should we kick players if they do not submit inputs for a long time? + + + + + Should the server automatically shutdown at a configured time? + + + + + When the server should shutdown if Enable_Scheduled_Shutdown is true. + + + + + Broadcast "shutting down for scheduled maintenance" warnings at these intervals. + + + + + Should the server automatically shutdown when a new version is detected? + + + + + Unfortunately the server does not have a way to automatically determine the current beta branch. + + + + + Broadcast "shutting down for update" warnings at these intervals. + + + + + Should vanilla text chat messages always use rich text? + Servers with plugins may want to enable because IMGUI does not fade out rich text. + Kept because plugins might be setting this directly, but it no longer does anything. + + + + + Should the EconInfo.json hash be checked by the server? + + + + + If true, opt-in to SteamNetworkingSockets "FakeIP" system. + https://partner.steamgames.com/doc/api/ISteamNetworkingSockets#1 + + + + + If greater than zero, vehicles with XZ position outside this threshold are saved in the center of the map. + By default, vehicles outside ±40 km are teleported into the map. + Intended to help with physics issues caused by vehicles far out in space. (public issue #4465) + + + + + Limit max queue timeout duration so that if server encounters an error or doesn't + process the request the client can timeout locally. + + + + + Longer than server timeout so that ideally more context is logged on the server + rather than just "client disconnected." + + + + + Original option for disabling item quality. Defaults to true. If false, items spawn at 100% quality and + their quality doesn't decrease. For backwards compatibility, the newer per-item-type durability options + are ignored if this is off. + + + + + Food-specific replacement for . Defaults to false. If true, food spawns at 100% quality. + + + + + Water-specific replacement for . Defaults to false. If true, water spawns at 100% quality. + + + + + Clothing-specific replacement for . Defaults to false. If true, clothing spawns at 100% quality. + + + + + Weapon-specific replacement for . Defaults to false. If true, weapons spawns at 100% quality. + + + + + Fallback used when spawning an item that doesn't fit into one of the other quality/durability settings. + Defaults to false. If true, items spawn at 100% quality. + + + + + Clothing-specific replacement for . Defaults to true. If false, clothing quality + doesn't decrease when damaged. + + + + + Melee and gun replacement for . Defaults to true. If false, weapons quality + doesn't decrease when used. + + + + + Seconds vehicle can be neglected before it begins taking damage. + + + + + After vehicle has been neglected for more than Decay_Time seconds it will begin taking this much damage per second. + + + + + Vehicles are considered "natural" if they were spawned by the level as opposed to players or vendors. + If less than this many natural vehicles exist in the level, more will be spawned. The minimum of this or + Max_Instances is used. (i.e., if this value is higher than max instances the max instances value is used + instead.) + + + + + Minimum seconds between boss zombie spawns for players doing quests. + Players were abusing the spawns to farm boss tier loot. + + + + + Weapon damage multiplier against body, arms, legs. Useful for headshot-only mode. + + + + + Should players be allowed to build on their vehicles? + + + + + Should players be allowed to build traps (e.g. barbed wire) on their vehicles? + + + + + Furthest away from colliders a player can build an item onto their vehicle. + + + + + Furthest away from colliders a player can build a trap (e.g. barbed wire) onto their vehicle. + + + + + [0, 1] percentage of skill levels to retain after death. + + + + + [0, 1] percentage of skill levels to retain after death. + + + + + Number of skill levels to remove after death. + + + + + Number of skill levels to remove after death. + + + + + [0, 1] percentage of experience points to retain after death. + + + + + [0, 1] percentage of experience points to retain after death. + + + + + Should each character slot have separate savedata? + + + + + If true, players will be kicked if their skin color is too similar to one of the level's terrain colors. + + + + + Each per-level custom weather frequency is multiplied by this value. + + + + + Each per-level custom weather duration is multiplied by this value. + + + + + Should ServerTextChatMessenger be allowed to broadcast? + + + + + Should ServerTextChatMessenger be allowed to execute commands? + + + + + Should ClientTextChatMessenger be allowed to broadcast? + + + + + Should ClientTextChatMessenger be allowed to execute commands? + + + + + Should group connections be shown on player list? + + + + + If true, allow automatically creating an in-game group for members of your Steam lobby. + Requires Allow_Dynamic_Groups to be enabled as well. + + + + + Is friendly-fire allowed? + + + + + Are sentry guns and beds allowed on vehicles? + + + + + Should holiday (Halloween and Christmas) content like NPC outfits and decorations be loaded? + + + + + Can "freeform" barricades be placed in the world? + Defaults to true. + + + + + Can "freeform" barricades be placed on vehicles? + Defaults to true. + + + + + If true, aim flinches away from center when damaged. + Defaults to true. + + + + + If true, camera will shake near explosions. Can also be toned down client-side in Options menu. + Defaults to true. + + + + + If true, crafting blueprints can require nearby workstations. Defaults to true. + If false, only the backwards-compatibility "Heat Source" vanilla crafting tag can be required. This + functions identically to the cooking-skill-also-requires-heat behavior from before. + + + + + If true, client-side options like damage flinch, explosion camera shake, viewmodel bob are ignored. + Defaults to false. + + + + + If true, hide viewmodel while aiming a dual-render scope and show a 2D overlay instead. + + Nelson 2025-07-04: adding this option for backwards compatibility with modded scopes that have a small + enough dual-render surface to zoom-*out* when aiming in. + + Defaults to false. + + + + + Scales velocity added to players by explosion knock-back. + + + + + Scales midair input change in player direction. + + + + + Scales midair decrease in speed while faster than max walk speed. + + + + + Scales magnitude of recoil while using first-person perspective. + + + + + Scales magnitude of recoil while aiming in first-person perspective. + + + + + Scales magnitude of recoil inversely with zoom level while aiming in first-person perspective. + + + + + Scales magnitude of recoil while using third-person perspective. + + + + + Scales magnitude of bullet inaccuracy while using third-person perspective. + + + + + [0, 1] Scales how much the first-person move up and down while jumping/landing. + + + + + [0, 1] Scales how much the first-person arms move while ADS. + + + + + Center mythical effect hook horizontally, but maintain vertical placement. + Lots of hats/masks/glasses have off-center effects intentionally, but community + feedback suggests centering to make effects like circling atoms look better. + + + + + Set mesh of all character mesh renderers. + Tries to match renderer index to mesh LOD index. + + + + + Set material of all character mesh renderers. + + + + + Hack for previewing the "aura" cosmetic items. + + + + + If true, this character is for capturing clothing icons. + + + + + Planar reflection component updates its culling distance and culling mask when this is incremented. + + + + + Overrides in-game UI scale setting. + + + + + Distance to use terrain shaders before fallback to a baked texture. + + + + + Higher error reduces vertex density as distance increases. + + + + + Added for players who want to see if they can get better performance with a ridiculously low max draw distance. + + + + + Multiplier for far clip plane distance. + Clamped within [0, 1] range to prevent editing config files for an advantage. + + + + + Multiplier for draw distance. + Clamped within [0, 1] range to prevent editing config files for an advantage. + + + + + Multiplier for draw distance of optional super-low LOD models. + Clamped within [0, 1] range to prevent editing config files for an advantage. + + + + + Vehicles outside this distance are not rendered. + + + + + Called after loading graphics settings from disk so that their values can be adjusted. + + + + + If default resolution is zero, try falling back to a higher one. + Used when restoring defaults and validating loaded settings. + + + + + If true, make the game look as nice as possible. + Note: certain limits are imposed except in singleplayer to prevent this from being exploited. + + + + If true, include current animation speed modifier. + + + True if an animation was found and started playing. + + + + Velocity is directly set to input velocity. + + + + + Velocity is affected by acceleration and deceleration. + + + + + Properties common to asset and extensions. For example both can specify sounds. + + + + + Invokes an event a configured number of times. + + + + + If true the event will only be invoked in offline mode and on the server. + + + + + Invoked multiple times. + + + + + Sanity check all returned elements have a gameObject. + + + + + Create software cursor visual element. + + + + + Create green label in the upper-left. + + + + + Create tooltip visual element. + + + + + Update upper-left green text. + + + + + Update software cursor visual element. + + + + + Find hovered element and update tooltip visibility/text. + + + + + Container for SleekWindow element. + + + + + Container for top-level visual elements. + + + + + Element under the cursor on the previous frame. + + + + + Duration in seconds the cursor has been over the element. + + + + + EconInfo.json hash does not match. + + + + + Master bundle hashes do not match. + + + + + Workshop usage advertised on server list does not match during connect. + + + + + Used by client transport to show a custom localized message. + + + + + Server has not received an auth session response from Steam yet. + + + + + Server has not received an economy response from Steam yet. + + + + + Server has not received a groups response from Steam yet. + + + + + Player nickname exceeds limit. + + + + + Player nickname contains invalid characters. + + + + + Player nickname should not be a number. + + + + + Server did not respond to EServerMessage.Authenticate + + + + + Player resources folders don't match. + + + + + The network identity in the ticket does not match the server authenticating the ticket. + This can happen if server's Steam ID has changed from what the client thinks it is. + For example, joining a stale entry in the server list. (public issue #4101) + + + + + Level name advertised on server list does not match during connect. + + + + + VAC status advertised on server list does not match during connect. + + + + + BattlEye status advertised on server list does not match during connect. + + + + + Max players advertised on server list does not match during connect. + + + + + Camera mode advertised on server list does not match during connect. + + + + + Combat mode advertised on server list does not match during connect. + + + + + Player's skin color is too similar to one of . + + + + + Steam ID reported by net transport doesn't match client's reported Steam ID. + This was exploited to fill the server queue with fake players. + + + + + Received too many connection requests from player in a short window. + + + + + Received too many invalid messages from connection in a short window. + + + + + Same as CUSTOM, but shows the "verify game files" prompt. + + + + + Server limits how many clients are joining from the same IP address. + (public issue #5001) + + + + + Does this label fade out as the chat message gets older? + + + + + Chat message values to show. + + + + + Invoked after state is first loaded, synced from server when entering relevancy, or reset. + + + + + Invoked after interaction changes state. + + + + + Number of event hooks monitoring or controlling this. + Used to allow client to control remote objects on server. + + + + + Remove items that do not match search text. + + + + + Note SetListing also calls RefreshInCart. + + + + + Cannot be created until store data is available. + + + + + Toggle button to open/close advanced filters panel. + + + + + On/off checkbox for including already-owned items in filter. + + + + + Container for advanced options. + + + + + Displays the current page number. + + + + + Only visible when cart is not empty. + + + + + [0, pageCount) + + + + + If true, listings should be re-filtered when opening the menu. + + + + + Collections of multiple items. + + + + + Discounted items. + + + + + Items marked as new in the Status.json file. + + + + + Items marked as featured in the Status.json file. + + + + + Implemented by "root" component of each entity type that can provide crafting tags to nearby players. + This allows overlap with a barricade attached to a vehicle to find the barricade from barricade collider and + vehicle from vehicle collider rather than using transform root. Any mod hook extensions to crafting tags will + be sibling components or descendants of this component. + + + + + Asset providing tags. For example, a barricade item. + + + + + True if GetAvailableTags can ever add any tags. + Used to skip unnecessary line-of-sight tests against (for example) ordinary structures and the like. + + + + + All tags added by this crafting tag provider. + + + + + Rewards to grant when quest is removed without completing. + Not granted when player finishes quest. + + + + + Configuration for DedicatedUGC. + + + + + Published workshop file IDs to download. + + + + + Published workshop file IDs whose children (dependencies) should be skipped. + Useful if workshop author lists dependencies as a way of advertising. + + + + + Controls SetAllowCachedResponse. Disabled when set to zero. + Balance between item change frequency and allowing cached results when query fails. + + + + + Number of total times to try re-submitting failed workshop queries before aborting. + + + + + Should items already installed be loaded? + + + + + Should used items be monitored for updates? + + + + + Seconds to wait before shutting down after an update is detected. + + + + + Message broadcasted when shutdown timer begins. + + + + + Message sent to players when shutdown timer completes. + + + + + Get instance if loaded, but do not load. + + + + + Get instance, or load if not yet loaded. + + + + + Should only be used by . + For example: "Condition_##" where ## is an index. + + + + + Nelson 2025-03-11: not *super* happy about having this in here. Needed for UI_Requirements. + + + + + Nelson 2025-03-11: not *super* happy about having this in here. Needed for UI_Requirements. + + + + + If set, only show this condition in the UI when conditions with these indices are met. + For example don't show "arrest the criminal (name)" until "investigate crime" is completed. + + + + + Is this condition influenced by a given quest flag? + Used by level objects to determine if local player's flag change may affect visibility. + + + + + Replacement for isAssociatedWithFlag to fix quest conditions and somewhat improve perf. + + + + + Intended to replace filling data from constructor. + + + + + Intended to replace filling data from constructor. Legacy is for backwards compatibility with Condition_#_Key + format, whereas V2 uses the list and dictionary features. + + + + + Can be added to gun item game objects (including children) to receive events. + + + + + Which attachment type to monitor. + + + + + Optional. If set, only consider item matching this GUID. I.e., slot is considered empty if attached item + has a different asset GUID. + + + + + If true, AssetGuidFilter passes when item in slot *doesn't* match GUID. + + + + + Invoked both when: + 1. Gun is first equipped and an item is already present in the slot. + 2. An item is added to the slot. + + + + + Invoked both when: + 1. Gun is first equipped and the slot is empty. + 2. An item is removed from the slot. + + + + + Controls whether events are invoked when asset in slot changes. + + + + + Nelson 2025-02-04: Gun attachment slots are currently hard-coded, but if that changes this could be updated + with a "custom" option. + + + + + If emptiness of slot doesn't change (attachment replaced), do nothing. + + + + + In addition to regular Attached and Detached events, if the item asset in the slot changes invoke + Detached then Attached. + + + + + State doesn't affect AI collision. + + + + + AI collision is blocked when object state is ON. + + + + + AI collision is blocked when object state is OFF. + + + + + Controls how rubble affects Nav game object. + + + + + Default. Destruction of rubble sections does not affect whether Nav game object is active or not. + + + + + AI collision is blocked when any sections are alive. Once all sections are dead AI collision is unblocked. + + + + + The game uses Process.Start to open web links when the Steam overlay is unavailable, which could be exploited + to e.g. download and execute files. To prevent this we only allow valid http or https urls. + + If true, prefix with https:// if neither http:// or https:// is specified. + + + + This version just doesn't return the parsed URL. + + + + + Resolve spawn table asset if set, otherwise find asset by legacy in-editor ID configuration. + Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the + vehicle spawner requires to properly set paint color. + + + + + Used when spawn table asset is not assigned. Pick a random legacy ID using in-editor list of spawns. + + + + + Multiplier for how quickly deadzones deplete a gasmask's filter quality. + e.g., 2 is faster (2x) and 0.5 is slower. + + + + + Hack for previewing the "aura" cosmetic items. + + + + + Was redirected to HolidayUtil but kept for plugin backwards compatibility. + Refer to HolidayUtil for explanation of this weird situation. + + + + + Was redirected to HolidayUtil but kept for plugin backwards compatibility. + Refer to HolidayUtil for explanation of this weird situation. + + + + + The base transform does not rotate, instead a child transform is created with the pivot in the center. + + + + + To work around a uGUI bug we always a sign a texture, even if desiredTexture is null. + + + + + Broadcasts after dedicated server name changes. + Command IO interface binds to this rather than having a title-specific method. + + + + + Should the default console I/O handler be created? + Plugins can disable on the command line when overriding handler. + + + + + Should the legacy blocking (game thread) console be created? + + + + + Log white information. + + + + + Log yellow warning. + + + + + Log red error. + + + + + Print white message to console. + + + + + Print yellow message to console. + + + + + Print red message to console. + + + + + Cannot use UnturnedLog here because it may recursively call CommandWindow if another exception is thrown. + + + + + Called during Unity Update loop. + + + + + Called during OnApplicationQuit. + + + + + Helper for plugins that want to replace the default without the shouldCreateDefaultConsole flag. + + + + + If true, the player can press Interact [F] when there are no responses + and the "next" dialogue will be opened. + + + + + Each dialogue message is separated into multiple pages. + + + + + Current page localized text with name_npc and name_char formatted in. + + + + + Seconds elapsed while viewing current page not including pause timer. + Used to gradually show the message text. + + + + + Seconds to wait before resuming pageAnimationTime counting. + + + + + Appends chars from pageFormattedText according to pageAnimationTime. + + + + + Rich text formatting tags to close those opened by visible text in animatedTextBuilder. + For example, if animatedTextBuilder includes an opening color=#, this includes the closing color markup. + Required depending on Glazier used. + + + + + Number of chars of pageFormattedText currently visible. + + + + + Added to animation visible chars to skip time on markup. + + + + + Seconds elapsed since responses started becoming visible. + Used to gradually enable responses rather than all at once. + + + + + Animated toward total number of responses to make them gradually visible. + + + + + If true, animation is finished and there is another page to show when Interact [F] is pressed. + + + + + If true, text on current page is in the process of gradually appearing. + + + + + Used by quest UI to return to current dialogue. + + + + + Update timers and UI for current page index. + + + + + Called when the player presses Interact [F] in dialogue screen. + + + + + Show complete text for the current page and make responses visible. + Called if dialogue animation is disabled, and when the player presses Interact [F] during animation. + + + + + Use "Interact" token from translation file. + + + + + If true, description should only be populated with contents from prior to the auto-layout UI changes. + + + + + BuildDescription implementations can use this to concatenate longer strings. + + + + + Which parent to use when attaching an equipped/useable item to the player. + + + + + Helper for plugins that want item prefabs server-side. + e.g. Allows item icons to be captured on dedicated server. + + + + + Item name wrapped in color rich text tags according to rarity. + + + + + Hack for Kuwait aura icons. + + + + + Useable subclass. + + + + + Can this useable be equipped by players? + True for most items, but allows modders to create sentry-only weapons. + + + + + Can this useable be equipped while underwater? + + + + + Vertical half size of icon camera. + Values less than zero are disabled. + + + + + Vertical half size of economy icon camera. + + + + + Should the newer automatic placement and orthographic size for axis-aligned icon cameras be used? + Enabled by default, but optionally disabled for manual adjustment. + + + + + Nelson 2025-04-10: adding this for semantics because amount isn't an obvious name. + + + + + If true, item should be removed when "amount" reaches zero. + Defaults to true except for magazines. + + + + + Which parent to use when attaching an equipped/useable item to the player. + + + + + If true, equipable prefab is a child of the left hand rather than the right. + Defaults to false. + + + + + Whether viewmodel should procedurally animate inertia of equipped item. + Useful for low-quality older animations, but modders may wish to disable for high-quality newer animations. + + + + + Defaults to true. If false, the equipped item model is flipped to counteract the flipped character. + + + + + If true, stats like damage, accuracy, health, etc. are automatically appended to the description. + Defaults to true. + + + + + Nelson 2024-12-11: This can now be null for cosmetic items (). For those items it wasn't + used outside of the main menu 3D item preview, in which case the clothing prefab is typically a better + visualization. + + + + + Optional alternative item prefab specifically for the PlayerEquipment prefab spawned. + + + + + Name to use when instantiating item prefab. + By default the asset legacy id is used, but it can be overridden because some + modders rely on the name for Unity's legacy animation component. For example + in Toothy Deerryte's case there were a lot of duplicate animations to work + around the id naming, simplified by overriding name. + + + + + Movement speed multiplier while the item is equipped in the hands. + + + + + Sound to play when inspecting the equipped item. + + + + + Sound to play when moving or rotating the item in the inventory. + + + + + When a player dies with this item, should an item drop be spawned? + + + + + Can player click the drop button on this item? + + + + + If this item is compatible with skins for another item, lookup that item's ID instead. + + + + + Defaults to true. If false, skin material and mesh are not applied when is + set. For example, a custom axe can transfer the kill counter and ragdoll effect from a vanilla item's skin + without also transferring the material and mesh. + + + + + Should friendly-mode sentry guns target a player who has this item equipped? + + + + + Kept in case any plugins refer to it. + Renamed to shouldFriendlySentryTargetUser. + + + + + Should players be allowed to start primary/secondary use of this item while inside given safezone? + If returns false the primary/secondary inputs are set to false. + + + + + Should this item be deleted when using and quality hits zero? + e.g. final melee hit shatters the weapon. + + + + + Should the game destroy all child colliders on the item when requested? + Physics items in the world and on character preview don't request destroy, + but items attached to the character do. Mods might be using colliders + in unexpected ways (e.g., riot shield) so they can disable this default. + + + + + Are there any official skins for this item type? + Skips checking for base textures if item cannot have skins. + + + + + Find useableType by useable name. + + + + + V2 is for newer dat list features. + + + + + Legacy is for backwards compatibility with Blueprint_# format. + + + + + V2 is for newer dat list features. + + + + + Legacy is for backwards compatibility with Action_# format. + + + + sortOrder values for description lines. + Difference in value greater than 100 creates an empty line. + + + + Properties common to Gun and Melee. + + + + + Properties common to Barricade and Structure. + + + + + Properties common to Gun, Consumable, and Throwable. + + + + + Properties common to Gun and Melee. + + + + + Properties common to Gun and Melee. + + + + + Properties common to Gun and Melee. + + + + + Properties common to Gun and Melee. + + + + + Remaps asset load requests into a large asset bundle rather than small individual asset bundles. + + + + + Config that contains the actual large AssetBundle. + + + + + Asset path relative to the master AssetBundle. + + + + + Icon visible when this listing is in the cart. + + + + + "SALE" or "NEW" text visible when applicable. + + + + + Tooltip text. + + + + + Holds tooltip text + + + + + Nelson 2025-01-28: This command reproduces a bug destroying the player gameObject if the vehicle is + destroyed on the same frame as the request to exit. + https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/4760#issuecomment-2613090165 + + + + + Speaker writes compressed audio to this buffer. + Listener copies network buffer here for decompression. + + + + + Listener writes decompressed PCM data to this buffer. + + + + + Seconds interval to wait between asking recording subsystem for voice data. + Rather than polling every frame we wait until data has accumulated to send. + + + + + Seconds to wait before playing back newly received data. + Allows a few samples to buffer up so that we don't stutter as more arrive. + + + + + Seconds to wait after playback before stopping audio source. + We zero this portion of the clip to prevent pops. + + + + + Max calls to askVoice server will allow per second before blocking their voice data. + Prevents spamming many tiny requests bogging down server output. + + + + + Max compressed bytes server will allow per second before blocking their voice data. + When logging compressed size they averaged 3000-5000 per second, so this affords some wiggle-room. + + + + + Internal value managed by isTalking. + + + + + Is this player broadcasting their voice? + Used in the menus to show an indicator who's talking. + Locally set when recording starts/stops, and remotely when voice data starts/stops being received. + + + + + Broadcasts after isTalking changes. + + + + + Can this player currently hear global (radio) voice chat? + + + + + Is the player wearing an earpiece? + Allows global (radio) voice chat to be heard without equipping the walkie-talkie item. + + + + + Is a UseableWalkieTalkie currently equipped? + Set by useable's equip and dequip events. + + + + + Was the most recent voice data we received sent using walkie talkie? + + + + + Has voice data recently been received, but we're waiting slightly to begin playback? + Important to give clip a chance to buffer up so that we don't stutter as more samples arrive. + + + + + AudioSource.isPlaying is not trustworthy. + + + + + Timer counting down to begin playback of recently received voice data. + We use a timer rather than availableSamples.Count because a very short phrase could be less than threshold. + + + + + Timer counting down to end playback. + + + + + Accumulated realtime since we last polled data from voice subsystem. + + + + + Last time askVoiceChat was invoked over network. + + + + + Number of times askVoiceChat has been called recently, to prevent calling it many times + with tiny durations getting server to relay many packets to clients. + + + + + Total of recent compressed voice payload lengths. + + + + + Realtime since this recent conversation began. + + + + + Only used by plugins. + Called on server to allow plugins to override the default area and walkie-talkie voice channels. + + + + + Default culling handler when speaking over walkie-talkie. + + + + + Default culling handler when speaking in proximity. + + + + + Called by owner to relay voice data to clients. + Not using rate limit attribute because it internally tracks bytes per second. + + + + + Called by server to relay voice data from clients. + + + + + Set to true during OnDestroy to make sure we don't start recording again. + + + + + If true, SteamUser.StartVoiceRecording has been called without a corresponding call to + SteamUser.StopVoiceRecording yet. + + + + + If true, voice toggle is in ON mode. + + + + + Internal value managed by inputWantsToRecord. + + + + + Set by updateInput based on whether voice is enabled, key is held, is alive, etc. + Reset to false during OnDestroy to stop recording. + + + + + Called during Update on owner client to start/stop recording. + + + + + Called during Update on owner client to record voice data. + + + + + Play walkie-talkie squawk at our position. + + + + + Start and stop playback of received audio stream. + + + + + Will this component ever need to record voice data? + + + + + Will this component ever need to play voice data? + In release builds this is only true for remote clients, but in debug we may want to locally listen. + + + + + Player's voice audio source cached during Start. + + + + + Looping voice audio clip. + + + + + Playback buffer. + + + + + Steam does less work on the main thread if we request samples at the native decompresser sample rate, + so the re-sampling can be done on the Unity audio thread instead. + + + + + 1 / frequency + + + + + Number of samples to zero after writing new audio data. + + + + + Are any players standing on the mannequin? + Used to prevent exploiting pose switches to push through objects. + + + + + Amount of experience to reward harvesting player. + + + + + If true, harvesting has a chance to provide a second item. + + + + + If true, rain will finish growing the plant. + + + + + NPC rewards to grant upon harvesting the crop. + + + + + Represents an item the vendor is selling to players. + + + + + Refer to NPCItemReward state. + + + + + Represents a vehicle the vendor is selling to players. + + + + + Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the + vehicle spawner requires to properly set paint color. + + + + + If set, takes priority over VehicleRedirectorAsset's paint color and over VehicleAsset's default paint color. + + + + + Added during the UI refactor to catch unhandled mouse clicks during drag. + + + + + Contains inspect item box and invisible button. + + + + + Added during the UI refactor to catch mouse clicks outside the selection box. + + + + + Annoying frustrating workaround for IMGUI. Disable inventory headers, grids and slots while selection is open + to prevent them from interfering with selection menu. + + + + + Was ConsumeEvent called during this frame? + This is a hack to prevent firing when clicking in the UI on the same frame it closes. + Moved from SleekWindow and Event.current.Use() during UI refactor. + + + + + Move item drag visual to the cursor's position. + + + + + Backwards-Compatible Asset Reference with Caching + • Supports both GUID and legacy ID. + • Caches resolved asset and updates if asset has been reloaded. + • Parsing legacy ID without context requires "LegacyType:LegacyID" format. E.g., "Item:4" for the Eaglefire. + • See CachingAssetRef if legacy ID support is unnecessary. + + + + + If true, doesn't reference anything. + Could also be called "IsZero" or "IsNull". + + + + + Opposite of IsEmpty. + + + + + Assigned GUID, not the referenced asset's GUID. + + + + + Assigned legacy ID, not the referenced asset's legacy ID. + + + + + Assigned legacy type, not the referenced asset's legacy type. + + + + + Doesn't only check (Get() == asset) because a new asset may have loaded. + Rather, checks whether GUID or legacy ID (whichever is set) points at asset. + If asset is null, returns true if GUID and legacy ID are zero. + + + + + Supports both GUID and legacy ID formats. + - If input string contains ':' the first part is EAssetType and the second part is legacy ID. + - If defaultLegacyType is not None the input string can be parsed as a legacy ID. + - Otherwise, parsed as GUID. + + + + + Supports both GUID and legacy ID formats. + - If input string contains ':' the first part is EAssetType and the second part is legacy ID. + - Otherwise, parsed as GUID. + + + + + Returns Empty if TryParse returns false. + + + + + Returns Empty if TryParse returns false. + + + + + Enables assigning assetRef from an existing asset without manually calling constructor. + + + + + Enables assigning assetRef from an asset GUID without manually calling constructor. + + + + + Enables assigning assetRef from a non-backwards-compatible asset ref without manually calling constructor. + + + + + Render character with hair and skin otherwise it might be cyan. + (public issue #3615) + + + + + If set, audio clip associated with physics material will take priority. + + + + + Collision with speed lower than this value will not play a sound. + + + + + Currently triggers are only used for water. + + + + + Sorts higher rarity items into the front of the list. + + + + + Sorts name alphabetically to the front of the list. + + + + + Sorts type alphabetically to the front of the list. + + + + + [0, 1] blends towards one while active regardless of local volume. + + + + + [0, 1] blends towards one if current volume bitwise AND with asset is non-zero. + + + + + Lesser of global or volume blend alphas. + + + + + If blending was not ticket yet then local blend can use global value, e.g. loading into rain storm. + + + + + Is blendAlpha at 100%? + + + + + [0, 1] Rain puddle alpha cutoff. + + + + + [0, 1] Rain puddle ripples alpha. + + + + + Optional parameter for error logging. + + + + + Run hash algorithm for all data passing through a stream. + + + + + Repurposed from the Modules UI because it was unused. + + + + + Full argument string. Defaults to Environment.CommandLine. + + Nelson 2025-06-17: By default, Steam shows a warning nowadays when the game is launched with externally-provided + command-line arguments. For example, when joining a friend via rich presence. The solution is to use the arg + string provided by SteamApps.GetLaunchCommandLine, which also supports *changing* the arguments while the app is + running. If the environment-provided command-line doesn't contain it, the game will append Steam's launch options. + + Note: Steam override isn't applied until Steam is initialized. (after Dedicator and ModuleManager) Please refer to + Setup.cs for the full initialization order. + + + + + Nelson 2025-06-16: Steam doesn't handle "server code" connect URL, but we now support + it for rich presence joins via server code for easier inviting friends to private servers. + + When Steam parses a steam://connect/ip:port URL it requires the query port (e.g. 27015). + + + + + Handles these cases: + key value -> value + key=value -> value + key = value -> value + key = value -> value + key "value with spaces" -> value with spaces + key "value with \" quotation marks" -> value with " quotation marks + + Tested in CommandLineTests.cs + + + + + Is the application running as a headless server? + Replacement for isDedicated property. The property could not be changed to const in dedicated-server-only + builds without potentially breaking plugins. Only development builds can be run as both client or server. + + + + + Are we currently running the standalone dedicated server app? + + + + + Should dedicated server disable requests to internet? + While in LAN mode skips the Steam backend connection and workshop item queries. + Needs a non-Steam networking implementation before it will be truly offline only. + + + + + Hints/messages are the pop-up texts below the interaction prompt, e.g. "reload" or "full moon rises". + Got a complaint that the item placement obstructed hint was shown if placing multiple signs. + + + + + Adjust screen positioning and visibility of player name widgets to match their world-space counterparts. + + + + + Update hitmarker visibility, and their world-space positions if user enabled that. + + + + + Disable hints and messages if no longer applicable. + + + + + Disable vote popup if enough time has passed. + + + + + Pause the game if playing singleplayer and menu is open. + + + + + Many places checked that the cursor and chat were closed to see if a menu could be opened. Moved here to + also consider that useable might have a menu open. + + + + + Calculate damage multiplier for individual bullet. + + + + + Each shot has a percentage chance to hit the target. Higher values are more likely to hit. e.g., it + decreases from 1.0 at point blank to 0.0 at the weapon's maximum range. This chance is affected by the + gun's spread. + + + + + Contains presetsScrollView which contains customPresetsContainer and defaultPresetsContainer. + + + + + Contains column buttons and server list itself. + + + + + Synchronize widgets with their values. + + + + + Each level should have a 380x80 Icon.png file. + This class caches them so that the server list can show them quickly. + + + + + Time.time damage was last dealt so that damage is applied once per second. + + + + + Timer increased while taking damage, and reset to zero while inside zone. + + + + + Current position. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Is the active level an Arena mode map? + + + + + Find a new smaller circle within the old circle and clamp it to the playable level area. + + + + + Pick a random airdrop node appropriate for the game mode. + + + + + Nelson 2025-04-01: default position intBitCount of 13 has range of [-4096, 4096), but on "insane" size maps + the aircraft starts 2 km outside that range. This causes the care package to spawn at the wrong position. + Bumping intBitCount to 14 enables a range of [-8192, 8192). (public issue #4972) + + + + + Seconds between weather event starting and reaching full intensity. + + + + + Seconds between weather event ending and reaching zero intensity. + + + + + Sound clip to play. Volume matches the intensity. + + + + + Component to spawn for additional weather logic. + + + + + If per-volume mask AND is non zero the weather will blend in. + + + + + Expands upon Unity physics material properties for gameplay features. + + + + + Originally considered assets for each legacy material with fallback to main material, but the fallback + would mean a failed lookup for every property in the vast majority of cases. + + + + + If true, crops can be planted on this material. + + + + + If true, oil drills can be placed on this material. + + + + + For custom friction mode, multiplies character acceleration. + + + + + For custom friction mode, multiplies character deceleration. + + + + + For custom friction mode, multiplies character max speed. + + + + + • Does not support legacy ID. + • Caches resolved asset and updates if asset has been reloaded. + • See CachingBcAssetRef if legacy ID support is necessary. + + + + + If true, doesn't reference anything. + Could also be called "IsZero" or "IsNull". + + + + + Opposite of IsEmpty. + + + + + Assigned GUID, not the referenced asset's GUID. + + + + + Doesn't only check (Get() == asset) because a new asset may have loaded. + Rather, checks whether GUID points at asset. + If asset is null, returns true if GUID and legacy ID are zero. + + + + + Returns Empty if TryParse returns false. + + + + + Enables assigning assetRef from an existing asset without manually calling constructor. + + + + + Enables assigning assetRef from an asset GUID without manually calling constructor. + + + + + Internal so that CachingBcAssetRef can copy cachedAsset. + + + + + Auto-registering list of volume manager subclasses for level editor. + + + + + Should calling InstantiateVolume create a new volume? + False for deprecated (landscape hole volume) types. + + + + + These are methods moved from the Data class which rely on core types and so cannot go in the UnturnedDat assembly. + + + + + Intended as a drop-in replacement for existing assets with property uint16s. + + + + + Intended as a drop-in replacement for existing assets with legacy IDs. + + + + + Enables builder pattern for dat edits. + Inclusion of asset type is optional for cases where it's not obvious from context. + + + + + Enables builder pattern for dat edits. + Inclusion of asset type is optional for cases where it's not obvious from context. + + Legacy asset references are converted to GUID if the asset is available. If not available, type prefix + is only used if legacy type changed. + + + + + This overload assumes legacyType has not changed. This will usually be the case. Legacy type would only + change (for example) in cases like spawn tables where they can reference any asset type. + + + + + Kept because lots of modders have been using this script in Unity, + so removing legacy effect id would break their content. + + + + + Active while powered. + + + + + This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius. + + + + + Far clip plane multiplier in-game. + + + + + Far clip plane multiplier in level editor. + + + + + Essentially identical to ContentReference, but MasterBundle is more convenient. + Perhaps in the future all asset/content systems will be consolidated. + + + + + Are name or path null or empty? + + + + + Are both name and path non-null and non-empty? + + + + + Name of master bundle file. + + + + + Path to Unity asset within asset bundle. + + + + + Find client with given RPC channel ID. + + + + + Workshop item does not have any IP restrictions in place. + + + + + Workshop item has an IP whitelist, and server IP is not on it. + + + + + Workshop item has an IP blacklist, and server IP is on it. + + + + + Workshop item does have IP restrictions, and server IP is allowed. + + + + + Workshop item has been banned by an admin. + + + + + Workshop item is hidden from everyone. + + + + + Utilities for testing whether a particular server is allowed to download a workshop item. + Available from client and server side so that clients can help enforce restrictions. + + + + + Workshop item key-value tag storing IP whitelist and blacklist. + + + + + Get ip restrictions value if set, otherwise null. + Can be called from client or server. + + + + + Test whether IP is whitelisted or blacklisted in filter. + + + + + Split x,y-z format into whitelist [x, y] and blacklist [z]. + + + + + Split whitelist-blacklist format and parse string IPs into integer IPs. + + + + + Parse CIDR string IPs into integer IPs. + + + + + Added to player's food value. + + + + + Added to player's water value. + + + + + Added to player's virus value. + + + + + Added to player's hallucination value. + + + + + Get animal or player damage based on game mode config. + + + + + Get zombie or player damage based on game mode config. + + + + + Should player/animal/zombie surface be nulled on hit? + Requested by spyjack for a chainsaw-style shield that was overboard with the blood. + + + + + Should this weapon bypass the DamageTool.allowedToDamagePlayer test? + Used by weapons that heal players in PvE. + + + + + Please refer to ItemWeaponAsset.BuildDescription for an explanation of why this is necessary. + + + + + Please refer to ItemWeaponAsset.BuildDescription for an explanation of why this is necessary. + + + + + Utility for getting local hardware ID. + + One option for future improvement would be using Windows Management Infrastructure (WMI) API: + https://github.com/SmartlyDressedGames/Unturned-3.x/issues/1593 + + + + + Maximum number of HWIDs before server will reject connection request. + + + + + Get the local hardware ID(s). + + + + + Nelson 2025-05-28: keeping this a struct to simplify memory management (no pool needed). If making this more + generic in the future we probably do need to make it a class. + + + + + Only applicable to barricades. + + + + + Preliminary sort order is provided by server, but this takes priority if camera is available. + + + + + Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting. + + + + + Instantiate at least this many items per frame even if we exceed our time budget. + + + + + Called once key/values can be set. + + + + + Lod group will be culled when screen size is smaller than this value. + + + + + Clamp the culling screen percentage to be less than or equal to a maximum value. + + + + + Prevent the lowest LOD from being culled. + + + + + Multiplier to incoming damage. Defaults to 1.0. + + + + + Multiplier to explosive damage. Defaults to value if Armor_Explosion isn't specified. + + + + + Armor against falling damage. Defaults to 1.0, i.e., take the normal amount of damage. + + + + + If true on any worn clothing item, bones never break when falling. + Defaults to false. + + + + + Left-handed character skeleton is mirrored, so most item models are mirrored again to preserve appearance. + Unfortunately this does not work well for some items e.g. the particle system on Elver/Dango glasses. + + + + + Sound to play when equipped. + + + + + If set, find a child meshrenderer with this name and change its material to the character skin material. + + + + + The player can be wearing both a "real" in-game item and a cosmetic item in the same clothing slot. + If true, the real item is shown rather than the cosmetic item. For example, night vision goggles + are shown over any glasses cosmetic because of their gameplay-related green glow. + + + + + Overrides value of TakesPriorityOverCosmetic if is true. + + + + + If true, the value of is used rather than . + Defaults to false. True if is set. + + + + + For 3D clothes. Ideally, this wouldn't be type specific, but we have a separate prefab property for each + type of clothing at the moment. + + + + + The player can be wearing both a "real" in-game item and a cosmetic item in the same clothing slot. + This is called on the real item if has not been set. + If true, the real item is shown rather than the cosmetic item. If false, the cosmetic item can be seen. + + + + + Durstenfeld version of Fisher-Yates shuffle: + https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm + + + + + Same as above, but prevent the last clip from being shuffled to the front in order to prevent repeats. + + + + + Ensures we do not modify the asset in editor. + + + + + Optional case-sensitive identifier in list of blueprints. + Added as an alternative to referencing blueprints by index. + Defaults to null. + + + + + Index into Owner's blueprints list. + + + + + Operation replaces the special behavior for EBlueprintType.Ammo and EBlueprintType.Repair. + + + + + Note: if resolving ref please use GetCategoryTag instead for caching. + + + + + Category tag replaces the blueprint "Type" which acted as both category AND behaviour modifier. + + + + + Only applicable for operations with a target item. + + Nelson 2025-04-11: initially, this was implemented as the last item in supplies list. However, there are a + lot of checks for special handling of target item, so I think it makes sense to separate. + + + + + If not null, these tags must be provided by nearby objects to craft this blueprint. + Note: this is the list as-configured. It has not been filtered according to gameplay config. + + + + + If true, and transferState is enabled, delete attached items. + + + + + Must match conditions to craft. + + + + + Extra rewards given after crafting. Not displayed. + + + + + 2023-05-27: requested by Renaxon because some Arid blueprints are debug-only and + should not be visible when players search by name. (the 3.23.7.0 update made + non-craftable blueprints searchable for Buak) + + + + + Defaults to false. If true, blueprint can become visible in the crafting list even when NPC conditions + are not met. This should typically only be enabled if all conditions are configured to be visible in the + details panel. Otherwise, the default "conditions unmet" label isn't very informative for players. + + + + + Search output items (excluding target item) for specific item. + + + + + App version string packed into a 32-bit number for replication. + + + + + Path to directory containing "Editor", "Menu", "Player", "Curse_Words.txt", etc files. + + + + + Called clientside by BattlEye when it needs us to send a packet to the server. + + + + + Event for plugins when BattlEye wants to kick a player. + + + + + Called serverside by BattlEye when it needs us to send a packet to a player. + + + + + Call whenever something impacting rich presence changes for example loading a server or changing lobbies. + + + + + Only used on client. + Information about current game server retrieved through Steam's "A2S" query system. + Available when joining using the Steam server list API (in-game server browser) + or querying the Server's A2S port directly (connect by IP menu), but not when + joining by Steam ID. + + + + + On client, is current server protected by VAC? + Set after initial response is received. + + + + + On client, is current server protected by BattlEye? + Set after initial response is received. + + + + + Counts "bad" packets per-connection. Bad packets *may* be legitimate, for example a delayed burst of ping + requests. Beyond a certain point, however, it's likely a cheater is trying to waste server processing time. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + After client submits EServerMessage.Authenticate we are waiting + for the EClientMessage.Accepted response. + + + + + Realtime that client sent EServerMessage.Authenticate request. + + + + + File IDs the client thinks the server advertised it was using, or null if UGC response was pending. + Prevents the server from advertising a smaller or fake list of items. + + + + + Needed before loading level. + + + + + Only safe to use serverside. + Get the list of workshop ids that a client needs to download when joining. + + + + + Only safe to use serverside. + Lets clients know that this workshop id is being used on the server, and that they need to download it when joining. + + + + + Channel id was 32-bits, but now that it is in the RPC header it can be 8-bits since there never that many + players online. The "manager" components are on channel 1, and each player has a channel. + + + + + Should the network transport layer accept incoming connections? + If both the queue and connected slots are full then incoming connections are ignored. + + + + + includeQueuedPlayers ensures player won't be kicked because someone on the same IP joined after them. + + + + + Find player in the queue associated with a client connection. + + + + + Find player associated with a client connection. + + + + + Find net transport layer connection associated with a client steam id. This could be a pending player in the + queue, or a fully connected player. + + + + + Find player steam id associated with connection, otherwise nil if not found. + + + + + If there's space on the server, asks player at front of queue for their verification to begin playing. + + + + + Called when determining spawnpoint during player login. + + + + + Is client waiting for response to ESteamPacket.CONNECT request? + + + + + Realtime that client sent ESteamPacket.CONNECT request. + + + + + Nelson 2023-08-09: adding because in some cases, namely workshop download and level loading, + we can't properly handle client transport failures because these loading systems don't + currently support cancelling partway through. (public issue #4036) + + + + + Manages client to server communication. + + + + + Manages server to client communication. + + + + + Connect to server entry point on client. + Requests workshop details for download prior to loading level. + Once workshop is ready launch() is called. + + + + + Callback once client transport is ready to send messages. + + + + + Callback when something goes wrong and client must disconnect. + + + + + Multiplayer load level entry point on client. + Called once workshop downloads are finished, or we know the server is not using workshop. + Once level is loaded the connect packet is sent to the server. + + + + + Event for plugins prior to kicking players during shutdown. + + + + + Set on the server when initializing Steam API. + Used to notify pending clients whether VAC is active. + Set on clients after initial response is received. + + + + + Set on the server when initializing BattlEye API. + Used to notify pending clients whether BE is active. + Set on clients after initial response is received. + + + + + Client should call RequestDisconnect instead to ensure all disconnects have a logged reason. + + + + + Internet server callback when backend is ready. + + + + + If missing map is a curated map then log information about how to install it. + + + + + Was not able to find documentation for this unfortunately, + but it seems the max length is 127 characters as of 2022-09-12. + + + + + Set key/value tags on Steam server advertisement so that client can display text in browser. + + + + + Set key/value tags on Steam server advertisement so that client can display server config in browser. + + + + + Primarily kept for backwards compatibility with plugins. Some RPCs that reply to sender also use this but + should be tidied up. + + + + + Hack to deal with the oversight of reordering the ESteamPacket enum during net messaging rewrite causing + older plugins to send wrong packet type. + + + + + Send to a connected client. + + + + + The server ignores workshop info requests if it's been less than 30 seconds, + so we cache that info for 1 minute in-case we try to connect again right away. + + + + + This information is needed before the level is loaded. + + + + + Advertised server name. e.g., "Nelson's Unturned Server" + + + + + Name of map to load. + + + + + Legacy difficulty mode that should be removed eventually. + + + + + Perspective settings. + + + + + Server's IP from when we originally received response. + Used to test download restrictions. + + + + + Last realtime this cache was updated. + + + + + Hacked-together initial implementation to refuse network messages from specific players. + On PC some cheats send garbage packets in which case those clients should be blocked. + + + + + Close connection, and refuse all future connection attempts from a remote player. + Used when garbage messages are received from hacked clients to avoid wasting time on them. + + + + + Record that a bad packet was received from connection and maybe kick them if rate limit is exceeded. + + + + + Private to prevent plugins from changing the value. + + + + + Should buffers used by plugin network events be read-only copies? + + + + + First four bytes of RPC messages are the channel id. + + + + + Should players be allowed to join this server regardless of whether their version number matches ours? + Useful to allow players to join debug mode servers. + + + + + Is version number supplied by client compatible with us? + + + + + Notify players waiting to join server if their position in the queue has changed. + + + + + Prevent any particular client from delaying the server connection queue process. + + + + + Allows hosting providers to limit the configurable max players value from the command-line. + + + + + Deprecated-ish IPv4 to bind listen socket to. Set by bind command. + + + + + Local address to bind listen socket to. Set by bind command. + + + + + Steam query port. + + + + + If hosting a server, get the game traffic port. + + + + + Called while running + + + + + Used to build packet about each existing player for new player, and then once to build a packet + for existing players about the new player. Note that in this second case forPlayer is null + because the packet is re-used. + + + + + Not exactly ideal, but this a few old "once per player" client->server RPCs. + + + + + Event for plugins when rejecting a player. + + + + + Notify client that they were kicked. + + + + + Notify client that they were banned. + + + + + Player left server by canceling their ticket, or we are disconnecting them without telling them. + Does not send any packets to the disconnecting player. + + + + + Number of transport connection failures on this frame. + + + + + Callback when a pending player or existing player unexpectedly loses connection at the transport level. + + + + + Check whether a server is one of our favorites or not. + + + + + Set whether a server is one of our favorites or not. + + + + + Open URL in the steam overlay, or if disabled use the default browser instead. + Warning: any third party url should be checked by WebUtils.ParseThirdPartyUrl. + + + + + Steam's favorites list requires that we know the server's IPv4 address and port, + so we can't favorite when joining by Steam ID. + + + + + Toggle whether we've favorited the server we're currently playing on. + + + + + Toggle whether we've bookmarked the server we're currently playing on. + + + + + Ping from client to server, measured in milliseconds. + + + + + Number of seconds since January 1st, 1970 GMT as reported by backend servers. + + + + + Current UTC as reported by backend servers. + Used by holiday events to keep timing somewhat synced between players. + + + + + Has the initial backend realtime been queried yet? + Not available immediately on servers because SteamGameServerUtils cannot be used until the actual Steam instance is available. + + + + + Invoked after backend realtime becomes available. + + + + + In here because we want to call this very early in startup after initializing provider, + but with plenty of time to hopefully install maps prior to reaching the main menu. + + + + + This file is of particular importance to the dedicated server because otherwise Steam networking sockets + will say the certificate is for the wrong app. When launching the game outside Steam this sets the app. + + + + + Hackily exposed as an easy way for editor code to check the verison number. + + + + + Has the onApplicationQuitting callback been invoked? + + + + + Moved from OnApplicationQuit when that was deprecated. + + + + + Useful to load files from Steam install of the game while running in the editor. + + + + + Moved from OnApplicationQuit when Application.CancelQuit was deprecated. + + + + + A couple of players have reported the PRO_DESYNC kick because their client thinks they own the gold upgrade, + but the Steam backend thinks otherwise. This option is a bit of a hack to work around the problem for them. + + + + + If specified, all Steam achievements and stats progress is lost. + + + + + If specified, all Steam achievements are unlocked during startup. + + + + + Host has not specified a value. + + + + + Not an actual tag. Used for filtering. + + + + + Host has specified that the server does not sell anything for real money. + + + + + Host has specified that the server does have a real money shop, but does not sell anything which affects gameplay. + + + + + Host has specified that the server does have a real money shop which sells benefits that affect gameplay. + + + + + Server list filter for plugin usage. + + + + + Allows Unity events to send text chat messages from the client, for example to execute commands. + + + + + Text to use when SendDefaultTextChatMessage is invoked. + + + + + All players on the server will see the message. + + + + + Only nearby players will see the message. + + + + + Chat mode to send request in. + + + + + Corresponds to not active and not blending with new weather system. + + + + + Corresponds to transitioning in with new weather system. + + + + + Corresponds to active with new weather system. + + + + + Corresponds to transitioning out with new weather system. + + + + + Corresponds to not active and not blending with new weather system. + + + + + Corresponds to transitioning in with new weather system. + + + + + Corresponds to active with new weather system. + + + + + Corresponds to transitioning out with new weather system. + + + + + Kept for backwards compatibility with mod hooks, plugins, and events. + + + + + Kept for backwards compatibility with mod hooks, plugins, and events. + + + + + [0, 1] used to avoid invoking BlendAlphaChanged every frame. + Compared against globalBlendAlpha not taking into account local volume. + + + + + Hash of lighting config. + Prevents using the level editor to make night time look like day. + + + + + Level designed target fog color. + + + + + Level designed target fog intensity. + + + + + Level designed target atmospheric fog intensity. + + + + + If global ocean plane is enabled then return the worldspace height, + otherwise return the optional default value. Default for volume based + water is -1024, but atmosphere measure uses a default of zero. + + + + + Ticked on dedicated server as well as client so that server can listen for weather events. + + On dedicated server this is always 0xFFFFFFFF. + + + + Reset any global shader properties that may affect the main menu. + + + + + Source effect to group multiple volumes. + + + + + Audio source added to AmbianceAudioGameObject. + + + + + Reset to false before updating volumes. + + + + + Reset to false before updating volumes. + + + + + Reset to zero before updating volumes. If any volume uses distance fadeout, this is the maximum alpha. + + + + + If any volume doesn't use distance fadeout, this is the alpha based on time spent inside.. + + + + + Highest priority of overlapping volumes. + + + + + If any volume doesn't use distance fadeout, this is the minimum of their audio fade-in time. + + + + + If any volume doesn't use distance fadeout, this is the minimum of their audio fade-out time. + Only reset when created so that value is available after leaving all volumes. + + + + + Visualizes reverb zone in-game. + + + + + Can horde beacons be placed in the associated bounds? + + + + + Overrides vehicle physics values in bulk without building asset bundles. + + + + + Only RPCs from the server will be allowed to invoke this method. + + + + + RPCs are only allowed to invoke this method if we're running as server. + + + + + Only RPCs from the owner of the object will be allowed to invoke this method. + + + + + Maximum number of calls per-second per-player. + + + + + Minimum seconds between calls per-player. + Initialized from ratelimitHz when gathering RPCs. + + + + + Index into per-connection rate limiting array. + + + + + Backwards compatibility for older invoke by name code e.g. plugins. + + + + + If changing header size remember to update PlayerManager and allocPlayerChannelId. + + + + + How far to shift compressed voice data. + + + + + If true, this object is owned by a locally-controlled player. + For example, some code is not run for "remote" players. + Always true in singleplayer. Always false on dedicated server. + + + + + Use on server when invoking client methods on the owning player. + + + + + Replacement for ESteamCall.NOT_OWNER. + + + + + Don't use this. Originally added so that Rocketmod didn't have to inject into the game's assembly. + + + + True if the call succeeded, or false if the sender should be refused. + + + + Don't use this. Originally added so that Rocketmod didn't have to inject into the game's assembly. + + + + + Calls array needs rebuilding the next time it is used. + Should be invoked when adding/removing components with RPCs. + + + + + Does array of RPCs need to be rebuilt? + + + + + Find methods with SteamCall attribute, and gather them into an array. + + + + + Encode byte array of voice data to send. + + + + + Decode voice parameters from byte array. + + + + + If true, light contributes to player spotlight. Defaults to true. + + Can be set to false for modders with a custom light setup. For example, this was added + for a modder who is using melee lights to toggle a lightsaber-style glow. + + + + + 32-bit mask granting server plugins additional control over custom UIs. + Only replicated to owner. + + + + + Enables cursor movement while not in a vanilla menu. + + + + + Disable background blur regardless of other UI state. + + + + + Enable background blur regardless of other UI state. + Takes precedence over NoBlur. + + + + + Enable title card while focusing a nearby player. + + + + + Enable explanation and respawn buttons while dead. + + + + + Enable health meter in the HUD. + + + + + Enable food meter in the HUD. + + + + + Enable water meter in the HUD. + + + + + Enable virus/radiation/infection meter in the HUD. + + + + + Enable stamina meter in the HUD. + + + + + Enable oxygen meter in the HUD. + + + + + Enable icons for bleeding, broken bones, temperature, starving, dehydrating, infected, drowning, full moon, + safezone, and arrested status. + + + + + Enable UseableGun ammo and firemode in the HUD. + + + + + Enable vehicle fuel, speed, health, battery charge, and locked status in the HUD. + + + + + Enable center dot when guns are not equipped. + + + + + Enable popup when in-game rep is increased/decreased. + + + + + Default flags set when player spawns. + + + + + 32-bit mask indicating to the server which admin powers are being used. + Does not control which admin powers are available. + + + + + Player is using spectator camera. + + + + + Player is using barricade/structure transform tools. + + + + + Player is using overlay showing player names and positions. + + + + + Per-player event invoked when admin usage flags change. + + + + + Event invoked when any player's admin usage flags change. + + + + + Used by plugins. + + + + + Invoked on client when a plugin changes the widget flags. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Not rate limited because server tracks number of expected screenshots. + + + + + Request client to open a given URL. + Allows plugins to open web browser, but also gives client the chance to ignore it. + + + + + Tell client to join a specific server. + Disconnects client and sends them to the join server screen. + Only used by plugins. + + + + + Is this player currently in a plugin's modal dialog? + Enables cursor movement while not in a vanilla menu. + + + + + Tell the client whether to be in plugin modal mode or not. + Kept from prior to introduction of pluginWidgetFlags. + + + + + Which admin powers are currently in use by the client. + Reported to the server by the client. + Does not control which admin powers are available. + Note: Hacks can prevent this notification from being sent. + + + + + Called on the client to notify the server of admin usage changes (if any). + + + + + Called on the client to notify the server of admin usage changes (if any). + + + + + Teleport to a random player spawn designated in the level. + + + + + Teleport to bed, if player has set one. + + + + + How many calls to will succeed per second. + + + + + How many rate limited actions have been performed recently. + Increased after performing each rate limited action, and decreased over time. + Cannot perform actions when greater than one. + + + + + Note: new official code should be using per-method rate limit attribute. + This is kept for backwards compatibility with plugins however. + + Call this method before any requests the client can spam to the server. + + Should your code proceed with the rate limited action? + + + + Call every frame to cool down rate limiting. + + + + + This code was in the Start message, and should happen before other initialization. + + + + + Hacky replacement for Start() that runs after net ids are assigned but before sending player state. + + + + + Nelson 2024-11-11: Added to help narrow down if player is destroyed outside of Provider.removePlayer. + (public issue #4760) + + + + + Flag in case levelObject is destroyed. + + + + + Poorly named. Specific to InteractableObjectQuest. + + + + + Directly uses input string for custom message popups. + + + + + Player cannot build on a vehicle with occupied seats. + + + + + Horde beacon cannot be built here. + + + + + Item type is not allowed on vehicles. + + + + + Item must be placed closer to vehicle hull. + + + + + Player cannot build while seated in a vehicle because some vehicles are abusable to stick the camera through a wall. + + + + + Interacting with ladder. + + + + + Popup when equipping housing planner "press T to show items" + + + + + Popup when structure is blocked by something named we can format into the message. + + + + + Notice that freeform buildables are blocked by Allow_Freeform_Buildables. + + + + + Popup when structure is blocked by terrain. + + + + + Vehicle doesn't support spray paints. + + + + + Explaining that some blueprints require workstations. + + + + + Nelson 2024-11-29: Curious to put all the gun stats in one place for easier comparison. Rather rudimentary at + the moment so not including in the update. + + + + + Controls how first-person arms are moved for turrets operated from the driver's seat. + + + + + Default. Pushes first-person arms off-screen while aiming. Originally implemented for the Fighter Jet where + it looks weird if your arms are still visible when the camera zooms in while "aiming." + + + + + Push first-person arms off-screen when equipped. + + + + + No particular use in mind, but included for completeness. + + + + + Default. Plays "Hammer" animation if ammo count was zero. + + + + + Regardless of ammo, does not play "Hammer" animation after reloading. + + + + + Regardless of ammo, will play "Hammer" animation after reloading. + + + + + Sound to play when input is pressed but weapon has a fire delay. + + + + + Maximum distance the gunshot can be heard. + + + + + Override Rangefinder attachment's maximum range. + Defaults to range value. + + + + + Can this weapon instantly kill players by headshots? + Only valid when game config also enables this. + + + + + Can this weapon be fired without consuming ammo? + Some mods use this for turrets. + + + + + Ammo quantity to consume per shot fired. + + + + + Simulation steps to wait after input before firing. + + + + + Can magazine be changed by player? + + + + + Can player ADS while sprinting and vice versa? + + + + + If true, the gun cannot shoot unless the player is aiming. + Note: String action overrides this. + Defaults to true for miniguns. + + + + + If true, the gun will stop aiming regardless of player input. + + + + + Seconds from pressing "aim" to fully aiming down sights. + + + + + If true, Aim_Start and Aim_Stop animations are scaled according to actual aim duration. + + + + + Selects a default magazine, following magazine replacements and spawn table resolution. + + + + + Selects a default magazine, following magazine replacements and spawn table resolution. + + + + + How long in seconds after firing to rechamber the gun by playing the Hammer animation. + Only applicable if RechamberAfterShotCount is >0. + Defaults to 0.25 seconds. + + + + + How long in seconds after hammering to eject a bullet casing. + Defaults to 0.45 seconds. + + + + + How long in seconds after reloading to eject bullet casings. + Only applicable if CasingEjectCountAfterReload is greater than zero. + Defaults to 0.5 seconds. + + + + + Defaults to false. If true, attachments must specify at least one non-zero caliber. + Requested by Great Hero J to block vanilla attachments in VGR. + + + + + Determines whether "Hammer" animation plays after attaching a magazine. + Note: this happens when a magazine replaces another OR fills previously empty slot. + + + + + Determines whether "Hammer" animation plays after detached a magazine. + Note: this happens when a magazine is removed from the gun without a replacement. + + + + + Spread multiplier while sprinting. + + + + + Spread multiplier while crouched. + + + + + Spread multiplier while prone. + + + + + Spread multiplier while swimming. + + + + + Spread multiplier while not grounded. + + + + + Recoil magnitude multiplier while the gun is aiming down sights. + + + + + Recoil magnitude while sprinting. + + + + + Recoil magnitude while crouched. + + + + + Recoil magnitude while prone. + + + + + Recoil magnitude while swimming. + + + + + Recoil magnitude while not grounded. + + + + + [0, 1] percentage of maximum range where damage begins decreasing toward falloff multiplier. + + + + + [0, 1] percentage of maximum range where damage finishes decreasing toward falloff multiplier. + + + + + [0, 1] percentage of damage to apply at damageFalloffMaxRange. + + + + + Seconds before physics projectile is destroyed. + + + + + Is this gun setup to have a change of jamming? + + + + + [0, 1] quality percentage that jamming will start happening. + + + + + [0, 1] percentage of the time that shots will jam the gun when at 0% quality. + Chance of jamming is blended between 0% at jamQualityThreshold and jamMaxChance% at 0% quality. + + + + + Name of the animation to play when unjamming chamber. + + + + + Movement speed multiplier while the gun is aiming down sights. + + + + + If >0, hammer animation plays after shooting this many shots after RechamberAfterShotDelay seconds pass. + Defaults to one for EAction.Pump and EAction.Bolt, zero otherwise. + + + + + If >0, emit particles after hammer after EjectAfterHammerDelay seconds pass. + Only applicable if RechamberAfterShotCount is >0. + Defaults to 1. + + + + + If >0, emit particles after reloading after EjectAfterReloadDelay seconds pass. + Defaults to ammoMax for EAction.Break. + + + + + Please refer to . + + + + + Please refer to . + + + + + The dialogue to go to when a message has no available responses. + If this is not specified the previous dialogue is used as a default. + If neither is available then a default "goodbye" response is added. + + For example, Chief_Police_Doughnuts_Accepted dialogue has a single message + "Let's just keep this between the two of us." shown with "prev" dialogue + set to the NPC's root dialogue asset. + + + + True if primary action was started and stopPrimary should be called in the future. + Useful to allow input to be held until action executes. + + + True if secondary action was started and stopSecondary should be called in the future. + Useful to allow input to be held until action executes. + + + + Does useable have a menu open? + If so pause menu, dashboard, and other menus cannot be opened. + + + + + Common base for barricades and structures. + 2023-01-16: not ideal to be adding this so late in development, but at least it is a step in the right direction. + + + + + If true, this item is eligible for zombies to detect and attack when stuck. + Defaults to true. + + + + + Item or spawn table recovered when picked up below 100% health. + + + + + Minimum number of items to recover when salvaged. + + + + + Maximum number of items to recover when salvaged. + + + + + Minimum number of items to drop when destroyed. + + + + + Maximum number of items to drop when destroyed. + + + + + Item or spawn table dropped when destroyed. + + + + + If non-null, this asset provides the listed crafting tags to nearby players. + + + + + Note: this assumes SalvageItemRef points to an ItemAsset. + + + + + By default a crafting ingredient is salvaged. + + + + + Thanks to Glenn Fiedler for this RK4 implementation article: + https://gafferongames.com/post/integration_basics/ + + + + + Higher values return to the target position faster. + + + + + 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?) + + + + + Nelson 2025-04-09: this acted as both category AND behaviour modifier, so I'm separating it into a custom tag + for categorization and a property for overriding how the blueprint processes input items. + + Nelson 2025-04-10: repair and ammo "types" had a variety of quirks I wanted to sort out: + • Moving amount between items required ammo type blueprint, but some modders expressed interest in non-ammo use. + (I.e., ideally better supporting amount on non-ammo items going forward.) + • Both types ignored output items. Output was used to represent the target item. Similarly, the UI added a fake + extra input item representing target item. + • PlayerCrafting and PlayerDashboardCraftingUI re-implemented some crafting item searching logic for finding + the item to refill or repair that can be converted into input item parameters. + The plan at the moment is to make the last input item the "target" item for operations. Legacy ammo/repair + blueprints will then default to no output item and add an extra input item. (And add a variety of parameters + needed to replicate the specialized item search behaviour.) + + + + + Controls what blueprint does with input items. + Separated from EBlueprintType which acted as both category AND operation. + + + + + No special modification to input items. + + + + + Restore target input item to full quality. + + + + + Transfer amount from input items to target item. + + + + + Can be added to any GameObject with a Dropper, Note, or Quest interactable object in its parents. + + + + + Invoked on authority when interactable object is used successfully. + Only invoked on clients if ShouldReplicate is true. + + + + + If true, the server will replicate the OnUsed event to clients as well. + + + + + If ShouldReplicate is enabled, should the RPC be called in reliable mode? + Unreliable might not be received by clients. + + + + + Applied if greater than zero. Defaults to 128. + + + + True if it's a new claim flag. + + + + Player stealth radius cannot go below this value. + + + + + Deal damage and break legs if speed is greater than this value. + + + + + By default players in singleplayer and admins in multiplayer have a faster salvage time. + This option was requested for maps with entirely custom balanced salvage times. + + + + + Cached result of finding all craftingBlacklists. + + + + + Determines which weather can naturally occur in this level. + Null if empty. + + + + + If set, this weather will always be active and scheduled weather is disabled. + + + + + Audio clip to play in 2D when a player dies. + + + + + Defaults to false because some servers have rules and info on the loading screen. + + + + + Volume weather mask used while not inside an ambience volume. + + + + + Allows level to override skill max levels. + Null if empty, otherwise matches 1:1 with PlayerSkills._skills. + + + + + If false, clouds are removed from the skybox. + + + + + Players are kicked from multiplayer if their skin color is within threshold of any of these rules. + + + + + Optional Unturned extensions to the LOD Group component. + + + + + Could be extended, e.g. to clamp cull size separately from the per-LOD sizes. + + + + + Unturned will adjust per-LOD sizes to counteract LOD bias. + Elver has carefully tuned LOD sizes for the interior of the mall, so LOD bias affecting them is undesirable. + Note that due to a Unity bug only LOD0 can be greater than 100%. + + + + + Is player already waiting to exit their group? + + + + + Add player to exit queue if enabled, or immediately remove. + + + + + Remove player from queue if they're waiting to exit their group. + + + + + Invoked immediately before Destroy vehicle. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + If true, a vehicle asset has been replaced. + + + + + Find vehicle with matching replicated instance ID. + + + + + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Supports redirects by VehicleRedirectorAsset. If paintColor is set that takes priority, otherwise if + redirector's SpawnPaintColor is set, that color is used, + + + + + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Supports redirects by VehicleRedirectorAsset. If paintColor is set that takes priority, otherwise if + redirector's SpawnPaintColor is set, that color is used, + + + + + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Supports redirects by VehicleRedirectorAsset. If paintColor is set that takes priority, otherwise if + redirector's SpawnPaintColor is set, that color is used, + + + + + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Supports redirects by VehicleRedirectorAsset. If paintColor is set that takes priority, otherwise if + redirector's SpawnPaintColor is set, that color is used, + + + + + Added so that garage plugins do not need to invoke RPC manually. + + zero spawns without a battery, ushort.MaxValue indicates the battery should be randomly spawned according to asset configuration, other values force a battery to spawn. + + + + For backwards compatibility. This older method spawns a vehicle with a random paint color. (set paintColor + to zero for a random paint color) + + zero spawns without a battery, ushort.MaxValue indicates the battery should be randomly spawned according to asset configuration, other values force a battery to spawn. + + + + Used by external spawn vehicle methods. + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used, + unless preferredColor.a is byte.MaxValue. + + Owner to lock vehicle for by default. Used to lock vehicles to the player who purchased them. + + + + Client-side request server to toggle headlights. + + + + + As client request server to use bonus feature like towing hook or police sirens. + + + + + Helper for servers with huge numbers of vehicles. + Called with fixed span of indexes e.g. [0, 10), then [10, 20). This function then clamps the final span to the vehicle count. + + + + + Does as few tests as possible while maintaining base game expectations. + + + + + Force remove player from vehicle they were in, if any. + Called when player disconnects to tidy up and run callbacks. + + True if player was in a vehicle, false otherwise. + + + + Remove player from vehicle and teleport them to an unchecked destination. + + + + + Is spawnpoint open for vehicle? + + + + + Try to find a random spawnpoint to spawn a vehicle while server is running. + + + + + Add a new vehicle at given spawnpoint. + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Add a new vehicle at given spawnpoint and replicate to clients. + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Called when deciding whether to respawn a new vehicle, after gameplay has begun. + + + + + Called during level load to determine how many vehicles to create. + + + + + Called on server each frame to slowly damage abandoned vehicle. + + + + + +0 = InteractableVehicle + +1 = root transform + +X = VehicleBarricadeRegion + Asset does not know number of train cars, so we always reserve slack. + + + + + Speed is unsigned, so 8 bits allows a range of [0, 256). + + + + + Velocity is signed, so 9 bits allows a range of [-256, 256). + + + + + Cast a ray from the sky to find highest point. + + + + + Cast a ray from slightly above point so indoor teleport nodes work. + + + + + If set, we are responsible for destroying texture. + + + + + This is a bit of a hack in order to simplify the foliage menu when most of the time editors are either + manually placing foliage or automatically baking it. + + + + + Get brush strength multiplier where strength decreases past falloff. Use this method so that different falloffs e.g. linear, curved can be added. + + Percentage of . + + + + Allows foreach loop to iterate Vector2Int within RegionBoundsInt. + + + + + Kept because lots of modders have been using this script in Unity, + so removing legacy effect id would break their content. + + + + + Hack for modders using grenade component as a way to deal radial damage. Not a good long term solution but + widely requested for the meantime until I get the chance to rewrite some of the health stuff. + + + + + Thanks to Glenn Fiedler for this RK4 implementation article: + https://gafferongames.com/post/integration_basics/ + + + + + Higher values return to the target position faster. + + + + + 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?) + + + + + At low framerate deltaTime can be so high the spring explodes unless we use a fixed timestep. + + + + + Interactable storage barricade to spawn at the drop position. + + + + + Prefab to spawn falling from the aircraft. + + + + + 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. + + + + + Item along positive direction. + Can be multiple on existing saves or if players found an exploit. + + + + + Item along negative direction. + Can be multiple on existing saves or if players found an exploit. + + + + + Item between floors. + Can be multiple on existing saves or if players found an exploit. + + + + + 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. + + + + + Position at the base of the pillar. + + + + + Yaw if placing pillar at this vertex. + + + + + Pillar or post currently occupying this slot. + Can be multiple on existing saves or if players found an exploit. + + + + + Can be zero if pillar is floating, or up to six in the center of a triangular circle. + + + + + Is there a pillar in this slot, and is it full height (not post)? + + + + + Floors must be placed touching the terrain, or a fake-terrain object like a grassy cliff model. + + + + + 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) + + + + + Side length of square and triangular floor/roof. + Walls can be slightly less, but we treat them as if they are the full length. + + + + + Vertical distance from edge center to wall pivot. + + + + + Vertical distance from edge center to rampart pivot. + + + + + If position is nearly equal within this threshold then edges/vertices will connect. + + + + + Maximum distance from player's viewpoint to allow placement. + + + + + How far to search for empty slot best match. + + + + + Cosine of the angle between ray direction and direction toward slot must be greater than this. + + + + + 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. + + + + + Ensure players, vehicles, zombies, animals, etc are not within this distance of pending placement. + + + + + Distance from triangle pivot to apex of triangle. + + + + + Radius of circle within triangle edges. + + + + + Distance from triangle pivot to center of triangle. + + + + + Small threshold to allow placing even with existing barricades on the floor. + + + + + 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. + + + + + 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. + + + + + Called when a housing item is spawned or after moving an existing item. + + + + + Called before a housing item is destroyed or before moving a housing item. + + + + + Search grid for existing vertex at approximately equal position. + Considers adjacent grid cells if near cell boundary to avoid issues with floating point inaccuracy. + + + + + Search grid for existing edge at approximately equal position. + Considers adjacent grid cells if near cell boundary to avoid issues with floating point inaccuracy. + + + + + Find existing edge and add connection, or add new empty edge. + + + + + Find existing vertex and add connection, or add new empty vertex. + + + + + Find existing edge and set associated wall, or add an empty edge at wall's location. + + + + + Find slot occupied by wall and remove if no longer attached to anything. + + + + + Find existing vertex and set associated pillar, or add an empty vertex at pillar's location. + + + + + Find slot occupied by pillar and remove if no longer attached to anything. + + + + + Hack to prevent ignoring floor which might be overlapping pending floor placement. + For example when placing a square floor on the opposite edge of a spot which has a triangular floor + we do not want to ignore the triangular floor during the physics query. + + + + + Used by triangular floor and roof validation to test for collisions. + + + + + Ensure wall fits in an empty slot. + + + + + Ensure pillar fits in an empty slot. + + + + + Nelson 2024-06-26: With structure rotation replicated as a quaternion we need to be smarter about extracting + yaw from model transform. Quaternion.eulerAngles.y isn't necessarily the yaw anymore. + + + + + Working buffer for placement overlap tests. + + + + + Index of the context parameter, if not None. + + + + + Reflected attribute that was used to find this method. + Contains extra information about how to call it. + + + + + True once per frame, false otherwise. + + + + + Item ID of barricade to spawn after landing. + + + + + Barricade to spawn after landing. + + + + + Cargo spawn table legacy ID. + + + + + Kill any players inside the spawned interactable box. + Uses hardcoded size of 4 x 4 x 4. + + + + + Determines how to handle a server if it matches a rule. + + + + + Apply label and continue processing rules. + + + + + Show the server in the list. + + + + + Hide the server from the list. + + + + + Note: Port (if set) refers to the Steam query port. + + + + + If true, negate whether this rule matches. i.e., binary NOT. + + + + + Incremented during server list refresh for each server blocked by this rule. + + + + + Optional image bundled alongside the asset file. + + + + + If true the event will only be invoked in offline mode and on the server. + + + + + Hack to prevent hitting volume rate limit because (at least as of 2022-05-24) we do not have an event for finished dragging. + + + + + Whether this animal was updated in this network tick and needs to be resent. + + + + + Alert this animal that it was damaged from a given position. + Offensive animals investigate the position, whereas other animals run away. + + + + + Alerts this animal that it needs to run away. + + The position to run away from. + + + + Keep for plugin backwards compatibility. + + + + + Reduces frequency of UndergroundAllowlist checks because it can be expensive with lots of entities and volumes. + + + + Unturned_Data folder path + + + + Useful to check whether hashing is causing problems. + + + + + Useful to narrow down why a player is getting kicked for modified resource files when joining a server. + + + + + Only set in play mode for determing if we should cache brute force lengths. + + + + + If set, road properties are taken from this asset instead of the older road properties editor. + + + + + Checkered lines when occluded, solid lines when visible. + + + + + Solid lines regardless of depth. + + + + + In-game debug drawing utility similar to Unity's editor Gizmos. + + + + Local space relative to matrix. + + + + Wireframe grid on the XZ plane. + + + + + Center relative to matrix. + + + + + Center relative to matrix. + + + + + LateUpdate so that the most up-to-date gizmos and main camera position are used. + + + + + Callback to draw in the Unity editor scene view. + + + + + Can be null if nothing has been added at position. + + + + + Does not add new lists to empty cells. + + + + + Number of Lists to preallocate in batches. + (GRID_SIZE * GRID_SIZE) % LIST_POOL_SIZE should be zero leftover. + Reduces constructor performance cost. (public issue #4209) + + + + + Matches the console behavior prior to command IO refactor. + + + + + Add fuel to target. + + + + + Remove fuel from target. + + + + + Whether local client is currently penalized for potentially using a lag switch. Server has an equivalent check which reduces + damage dealt, whereas the clientside check stops shooting in order to prevent abuse of inbound-only lagswitches. For example, + if a cheater freezes enemy positions by dropping inbound traffic while still sending movement and shooting outbound traffic. + + + + + Labels for named locations. + + + + + Contains arena outer circle and inner target points. + + + + + Player avatars. + + + + + Arrow oriented with the local player. + + + + + Convert level-space 3D position into normalized 2D position. + + + + + Convert normalized 2D position into level-space 3D position. + + + + + Temporary to unbind events because this class is static for now. (sigh) + + + + + Manages render queue for transparent materials on non-stationary objects. + Updates one material per frame. + + + + + Callback when camera above/under water changes. + + + + + Material to use during the Christmas event instead. + + + + + Material to use during the Halloween event instead. + + + + + Material to use during the April Fools event instead. + + + + + Nelson 2024-08-19: This link has been checked with WebUtils.CanParseThirdPartyUrl, but is not the + potentially altered link to go through Steam's link filter. This way the UI shows the original link. + + + + + Unturned wrapper for Debug.Log, Debug.LogWarning, Debug.LogError, etc. + + + + + Log an exception with message providing context. + + + + + Recursively logs inner exception. + + Should only be called by itself and exception because notifications + to CommandWindow would otherwise get re-sent here as errors. + + + + + This is the ONLY place Unturned should be binding logMessageReceived. + + This gives us greater control over how logging is handled. In particular, Unity's + headless builds route logs (including stack traces) through stdout which is undesirable + for dedicated servers, so we only call Debug.Log* in the editor and development builds. + + + + + Log an exception with message providing context. + + + + + Get SteamID of vehicle's driver, or nil if not driven. + + + + + Crashed into something, if applicable take self damage from collision. + + + + + Remove all color rich formatting so that shadow text displays correctly. + + + + + Shadow text needs the color tags removed, otherwise the shadow uses those colors. + + + + + Wrap text with color tags. + + + + + Wrap text with color tags. + + + + + Wrap text with color tags. + + + + + Replace br tags with newlines. + + + + + Should player be allowed to write given text on a sign? + Keep in mind that newer signs use TMP, whereas older signs use uGUI. + + + + + Disable style, align, and space because they make server list unfair. + + + + + 2023-01-25: fixing killing self with explosive to track kill under + the assumption that this is only used for tracking stats. (public issue #2692) + + + + + "Single-Render" scope as opposed to "Dual-Render" (rendering the scene a second time with a zoomed-in camera). + Blits middle square of the player's view into the viewmodel scope material's render target. + + + + + Finds an existing "{{Cargo/name" (if any), otherwise adds a new one. + + + + + Adds a new "{{Cargo/name" even if one already exists. + + + + + Helper for wiki writers to dump game data into a useful format. + + + + + Non-item replacement for SleekJars. + Arranges children in an equally-spaced ring around the center. + + + + + Actual unfiltered text. + Kept because plugins might be referencing, and game should use directly once state byte array is refactored. + + + + + If profanity filter is enabled this filtered text is displayed on the 3D sign and in the note UI. + Null or empty on the dedicated server. + + + + + Legacy uGUI text on canvas. + + + + + Legacy uGUI text on canvas. + + + + + Splits string and compares substrings ignoring case. + Tokens containing a colon ':' are ignored so that they can represent special filters like MasterBundleSearchFilter. + + + + + Should the RPC be called in reliable mode? Unreliable effects might not be received. + + + + + Applied if greater than zero. Defaults to 128. + + + + + Extra text added to tooltip. + + + + + Internal struct menu uses to sort items in box. + + + + + Item definition id. + + + + + Rarity used to sort mythical > legendary > epic > rare. + + + + + [0, 1] calculated chance of this item being unboxed. + Shown to player in item tooltips. + + + + + Sorts box entries from highest to lowest rarity. + + + + + Format qualityRarities as ##.# + Does not use 'P' format because localized strings unfortunately already had % sign. + + + + + Items server told us we unboxed, but we wait for the animation to finish before showing. + Typically one, but some newer boxes have bonus items occassionally. + + + + + Is one of the unboxed items mythical rarity? + + + + + Items in the box. + + + + + Skip unboxing animation. + Initial call rotates to just before the item, next call skips entirely. + + + + + Does client know about all the granted items? + If not, either something is bad in the econ config (uh oh!) or client is out of date. + + + + + Relatively efficiently find mesh components, and log an error if their mesh is missing, among other checks. + + + + + Unity warns about renderers registered with more than one LOD group, so we do our own validation as part of + asset loading to make it easier to find these. + + + + + Replaced by ServerMethodHandle. + + + + + Replaced by ClientInstanceMethod.InvokeAndLoopback or ClientStaticMethod.InvokeAndLoopback. + + + + + Replaced by ClientMethodHandle invoked with Provider.EnumerateClients_Remote. + Unlike ESteamCall.CLIENTS this is not loopback invoked. + + + + + Replaced by ClientMethodHandle invoked with SteamChannel.GetOwnerTransportConnection. + + + + + Replaced by ClientMethodHandle invoked with SteamChannel.EnumerateClients_RemoteNotOwner. + + + + + Replaced by ClientMethodHandle invoked with Provider.EnumerateClients. + Unlike ESteamCall.OTHERS this will be loopback invoked in singleplayer or listen server. + + + + + May have been used by voice in early versions, but has been completely removed. + + + + + Parses -X=Y from command-line. + Ideally we could do "where T : TryParse" but for the meantime there are specialized subclasses. + + + + + Maps region coord to a list of sub-road renderers in that region. + Unlike older "region" features, coord can be outside of the old bounds. + Not used in the editor or the dedicated server. + + Nelson 2025-03-28: experimenting with this to see whether it reduces time spent culling far-away road + renderers on Rio de Janeiro Remastered. (Lots of roads on this map.) + + + + + Max draw distance outside editor. + + + + + Called by navmesh baking to complete pending object changes that may affect which nav objects are enabled. + + + + + Allows Unity events to broadcast Event NPC rewards. + + + + + Event ID to use when SendDefaultEventId is invoked. + + + + + The event messenger can only be triggered on the authority (server). + If true, the server will replicate the event to clients. + + + + + Interface between the dedicated server command I/O and per-platform console. + + + + + Called when this implementation is setup by command window. + + + + + Called when this implementation is deleted or application quits. + + + + + Called each Unity update. + + + + + Broadcasts when the enter key is pressed. + + + + + Print white message. + + + + + Print yellow message. + + + + + Print red message. + + + + + July 7th! + + + + + This is the only /required/ override of text writer. + + + + + Can be added to certain entities to modify which crafting tags they make available to players. + At the time of writing (2025-04-08) the compatible entities are: + • Barricade + • Structure + • Vehicle + • Resource + • Object + + + + + Each specified component modifies tags. + + + + + If true then level should convert old node types to volumes. + + + + + If true then level should convert old non-volumes types to devkit objects. + + + + + Hash of nodes file. + Prevents using the level editor to make noLight nodes visible. + + + + + Code common to and . + + + + + Nelson 2025-05-13: replacing the "workshop request log" which used transport connection hash code with this + more recent IP address and Steam ID rate limiter. + + + + + Manually placed from the asset browser or old editor. + + + + + Spawned by foliage baking system. + + + + + Brushed on with the foliage tool. + + + + + Utilities for calling workshop functions without worrying about client/server. + This could be nicely refactored into a client and server interface, but not enough time for that right now. + + + + + Client/server safe version of GetQueryUGCNumKeyValueTags. + + + + + Client/server safe version of GetQueryUGCKeyValueTag. + + + + + Search for the value associated with a given key. + + + + + Client/server safe version of GetQueryUGCResult. + + + + + Is file banned? + + + + + Originally this was only in the uGUI implementation, but plugins can create uGUI text fields + regardless of which glazier is used. + + + + + Stockpile item definition id with rev-share for the level creators. + Randomly selected from associated items list. + + + + + Other menus can modify DevkitSelectionToolOptions so we need to sync our menu when opened. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Remove structure instance on server and client. + + + + + Used by ownership change and damaged event to tell relevant clients the new health. + + + + + Legacy function for UseableStructure. + + + + + Spawn a new structure and replicate it. + + + + + Not an instance method because structure might not exist yet, in which case we cancel instantiation. + + + + + Not ideal, but there was a problem because onLevelLoaded was not resetting these after disconnecting. + + + + + Maps prefab unique id to inactive list. + + + + + 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! + + + + + +0 = StructureDrop + +1 = root transform + + + + + Invoked when askUseObjectQuest succeeds. + + + + + When a client method is called on a target object that does not exist yet this class is responsible for + deferring the invocation until the instance does exist. For example until finished async loading. + + + + + Called by generated methods when target object does not exist. If target object has been marked deferred + then the method will be invoked after it exists. + + + + + Add list of deferred invocations for key. Otherwise messages will be discarded assuming it was canceled. + + + + + Remove pending invocations. + + + + + Invoke all deferred calls. + + + + + Invocations are grouped by net id block to ensure order is preserved between related objects. + + + + + Not a member of ClientMethodInfo because it does not need to be looked up using reflection. + + + + + Called before loading level. + + + + + Update currency and owned items if inventory has changed and menu is open. + + + + + Update currency or experience depending what the vendor accepts. + + + + + Nelson 2025-06-10: new code should favor Vector2Int. We don't want to introduce further uint8 region usage. + + + + + Get net ID only if transform is directly registered, not if transform is the child of a registered transform. + + + + + Log every registered pairing. + + + + + Called before loading level. + + + + + Reverse pairing specifically for building net id + relative path name. + + + + + Write header common to both static and instance methods, and return writer. + + + + + Valid when opened in Begin or End mode. + + If the quest is ready to complete the UI is opened in End mode to allow + the player to see what rewards they will receive after clicking continue. + Otherwise, in Begin mode the UI is opened to allow the player to review + the conditions before accepting or declining the request. + + If the player cancels the pending response is NOT chosen. + + + + + Valid when opened in Begin or End mode. + The player clicked pendingResponse in this dialogue to open the quest UI. + + + + + It is useful to be able to reference transforms generically over the network, for example to attach a bullet + hole to a tree or vehicle without tagging it as a tree or vehicle, but most entities placed in the level do not + have unique IDs. To work around this we count downward from uint.MaxValue for level objects to avoid conflicts + with server-assigned net ids. + + + + + Nelson 2025-06-10: this is used by older level file formats, but with placement of trees outside legacy + bounds now supported we use only the index in that case with GetTreeNetIdV2. + + Each region can have ushort.MaxValue trees, and we reserve that entire block so that a region can be slightly + modified on the client or server without breaking all netids in the level. + + + + + Each region can have ushort.MaxValue objects, and we reserve that entire block so that a region can be slightly + modified on the client or server without breaking all netids in the level. + + + + + Devkit instance IDs should already be fairly stable. There is no way any level is using more than 30 bits + for the instance ID, so it should be safe to set those bits to prevent collisions with server net IDs. + + + + + Struct interface so that for transient asset bundles (older workshop mods) they can be preloaded + and retrieved as-needed, but for master bundles the asset loading can be deferred until needed. + + + + + Legacy implementation that preloads assets. + + + + + Save a reference to an object in the asset bundle, but defer loading it until requested by game code. + + + + + Has a new announcement been posted by the developer? + If so, it is given priority over the featured workshop item. + + + + + Called after newsResponse is updated from web request. + + + + + Read News.txt file from Cloud directory to preview on main menu. + + + + + Helper for handlePopularItemResults. + If player has not dismissed item at index then proceed with query and return true. + + + + + Nelson 2024-04-23: A concerned player raised the issue that mature content could potentially be returned in + popular item results. Steam excludes certain mature content by default, but just in case, we check for these + words and hide if contained in title. + + + + + Successfully queried popular workshop items. + Tries to decide on an item that player has not dismissed. + + + + + Response about the item we decided to display. + + + + + Submit query for recently trending popular workshop items. + + + + + Entry point to deciding which workshop item is featured above recent announcements. + + + + + Ensures workshop files are not refreshed more than once per main menu load. + + + + + Synchronize widgets with their values. + + + + + Represents an item the vendor is buying from players. + + + + + Zero is treated as unset. + + + + + Has the contained been animated into visibility on-screen? + Used to disable animating out if disabled. + + + + + Allow Unity events to forcefully remove any barricades inside a sphere. + + + + + Prevents static member from being initialized during MonoBehaviour construction. (Unity warning) + + + + + Mesh Replacement Details + .dat Flags: + Has_1P_Character_Mesh_Override True Bool + Character_Mesh_3P_Override_LODs # Int + Has_Character_Material_Override True Bool + Asset Bundle Objects: + Character_Mesh_1P_Override_# GameObject with MeshFilter (mesh set to a skinned mesh) + Character_Mesh_3P_Override_# GameObject with MeshFilter (mesh set to a skinned mesh) + Character_Material_Override Material + + + + + Replacements for the main 1st-person character mesh. + + + + + Replacements for the main 3rd-person character mesh. + + + + + Replacement for the main character material that typically has clothes and skin color. + + + + + Sort servers by name A to Z. + + + + + Sort servers by name Z to A. + + + + + Sort servers by map name A to Z. + + + + + Sort servers by map name Z to A. + + + + + Sort servers by player count high to low. + + + + + Sort servers by player count low to high. + + + + + Sort servers by max player count high to low. + + + + + Sort servers by max player count low to high. + + + + + Sort servers by normalized player count high to low. + + + + + Sort servers by normalized player count low to high. + + + + + Sort servers by ping low to high. + + + + + Sort servers by ping high to low. + + + + + Information about a game server retrieved through Steam's "A2S" query system. + Available when joining using the Steam server list API (in-game server browser) + or querying the Server's A2S port directly (connect by IP menu), but not when + joining by Steam ID. + + + + + Join server by IP. + + + + + Server is not using an anycast proxy. + + + + + Server host indicated an anycast proxy is in use. + + + + + Moderator flagged server as using an anycast proxy. (EHostBanFlags.QueryPingWarning) + + + + + Ping time measured in milliseconds. + + + + + ID of network transport implementation to use. + + + + + Known plugin systems. + + + + + Probably just checks whether IP is link-local, but may as well use Steam's utility function. + + + + + Active player count divided by max player count. + + + + + Nelson 2024-08-20: This score is intended to prioritize low ping without making it the be-all end-all. The + old default of sorting by ping could put near-empty servers at the top of the list, and encouraged using + anycast caching to make the server appear as low-ping as possible. + + + + + Nelson 2024-08-20: This score is intended to prioritize servers around 75% capacity. My thought process is + that near-empty and near-full servers are already easy to find, but typically if you want to play online you + want a server with space for you and your friends. Unfortunately, servers with plenty of players but an even + higher max players make a 50% score plenty good. + + + + + Nelson 2024-08-20: This score is intended to balance out the downside of the fullness score decreasing for + servers with very high max player counts, and over-scoring servers with low max players. + + + + + Called before inserting to server list. + + + + + Parses value between two keys thing would parse thing + + + + + If set, this server was denied by a server curation list. + + + + + Disables Unity native systems unused by Unturned. + + + + + Enabled for effects held by guns and sentries. + + + + + Listen for OnDestroy callback because mods may be destroying themselves in unexpected ways (e.g., Grenade + component) and still need to be cleaned up. + + + + + Seconds after placement before damage can be dealt. + + + + + Seconds interval between damage dealt. + i.e., will not cause damage if less than this amount of time passed since the last damage. + + + + + UITK implementation consists of a container element which respects the regular position and size + properties, and a child content element which fits itself in the container. + + + + Start Vertex + Start Vertex + Start Tangent + End Vertex + End Tangent + End Vertex + + + Start Vertex + Start Vertex + Start Tangent + End Vertex + End Tangent + End Vertex + + + Start Vertex + Start Vertex + Start Tangent + End Vertex + End Tangent + End Vertex + + + Start Vertex + Start Vertex + Start Tangent + End Vertex + End Tangent + End Vertex + World units length along curve. + Spacing between points. + Max estimate distance from uniform interval before we have to retry. + How many times to retry if the estimate is too far off. + If length is already known pass it in, otherwise it's recalculated. + Time along curve. [0-1] + + + Start Vertex + Start Vertex + Start Tangent + End Vertex + End Tangent + End Vertex + Spacing between points. + Max estimate distance from uniform interval before we have to retry. + How many times to retry if the estimate is too far off. + + + + Single percentage randomness with two outcomes. + + + + + If true the event will only be invoked in offline mode and on the server. + + + + + Percentage chance of event occurring. + + + + + Invoked when random event occurs. + + + + + Invoked when random event does NOT occur. + + + + + Whether the pointer is currently in a spot that can be painted. + + + + + Get brush strength multiplier where strength decreases past falloff. Use this method so that different falloffs e.g. linear, curved can be added. + + Percentage of . + + + + Allows pooling elements. + If set, this is called rather than removing element from scroll view. + + + + + Kind of hacky... Used by player list for group connections. + + + + + Read commands from standard input, and write logs to standard output. + + + + + Broadcast the inputCommited event. + + + + + Synchronize console's title bar text. + Virtual because at one point Win32 SetTitleText was required. + + + + + Intercept the Ctrl-C or Ctrl-Break termination. + + + + + Handle Ctrl-C or Ctrl-Break on the game thread. + + + + + Has Ctrl-C or Ctrl-Break signal been received? + + + + + Is the Ctrl-C or Ctrl-Break signal being handled? + + + + + Names of achievements that can be granted by NPC rewards. + + + + + Name of promo level to additively load. + + + + + UTC when to begin load promo level. + + + + + UTC when to stop loading promo level. + + + + + Folder name of the map when it was in the game. + + + + + Published steam id for the file after it was moved to the workshop. + + + + + Dependencies to subscribe to when subscribing through the in-game menu. + e.g. Hawaii's assets are stored separately on the workshop. + + + + + Only applies if player is not subscribed to the workshop file. + Should an advertisement be shown in the Menu > Singleplayer > Curated list? + + + + + Published steam id to subscribe to. + + + + + If logging in after this point, subscribe. + + + + + If logging in before this point, subscribe. + + + + + Maps not installed by default, but recommended from maps list. + + + + + Maps to install to automatically. + Used early in startup to hopefully install before reaching main menu. + + + + + When moving between physics materials we need to continue any previous tire kickup particles until they expire. + This class manages the individual effect per-physics-material. Each wheel can have multiple at once. When the + particles have despawned and the effect is no longer needed, the effect game object is returned to the effect + pool and this class is returned to . + + + + + Name from . + + + + + Instantiated effect. Null after returning to pool. + + + + + Effect's transform. Null after returning to pool. + + + + + Component on gameObject. Null after returning to pool. + + + + + Whether this effect should be emitting particles. False stops the particle system immediately, whereas true + only starts playing on the next frame to avoid filling a gap between positions, e.g., after a jump. + + + + + Prevents repeated lookups if asset is null, while allowing asset to be looked up each time this effect + becomes active so that it can be iterated on without restarting the game. + + + + + Does this wheel affect brake torque? + + + + + Turn on/off physics as needed. Overridden by isAlive. + + + + + [0.0, 1.0] normalized position of wheel along suspension. + + + + + [0.0, 1.0] normalized position animated toward replicatedSuspensionState. + + + + + Model position interpolated toward animatedSuspensionState according to modelSuspensionSpeed. + + + + + [0, 360] angle of rotation around wheel axle. Measured in degrees because Quaternion.AngleAxis takes degrees. + + We track rather than using GetWorldPose so that we can alternate between using replicated and simulated + results without snapping transforms. + + + + + List is created if this wheel has a collider and uses collider pose. Null when vehicle is destroyed to + prevent creation of more effects. + + + + + Instance corresponding to current ground material. Doesn't necessarily mean the particle system is active. + + + + + Called after construction and on all clients and server when a player stops driving. + + + + + Called when vehicles explodes. + + + + + Called during FixedUpdate if vehicle is driven by the local player. + + + + + Calculate suspension state from GetWorldPose result. + + Nelson 2024-03-25: Originally we used the result of GetWorldPose for the model transform and calculated + the suspension state from it because I thought Unity was internally using the spring position that isn't + (currently) exposed to the API. Whether or not it is, it seems fine to calculate the spring position using + the ground hit point instead. We switched entirely away from GetWorldPose so that the wheel can retain + its roll angle when transitioning between locally simulated and replicated. + + + + + Called during Update on dedicated server only if replicated suspension state is enabled. + + + + + Set replicated suspension state AND animated suspension state when vehicle is first received. + + + + + + Supported when locally simulated and on remote clients. + + + + + Called during Update on client. + + + + + Called during Update if vehicle is driven by the local player. + + + + + Called during Update on the server while vehicle is driven by player. + + + + + Seamlessly teleports player to an equivalent position at the destination upon contact. + + + + + Target position and rotation. + + + + + Only used in the Unity editor for visualization. + + + + + If true, PopulateAsset can modify data. For example, to replace deprecated properties. + Only true if asset re-saving and asset metadata parsing are enabled, and asset origin allows re-saving. + Modifications are not saved if asset has any errors in order to avoid losing data. + + + + + If true, an asset with the same ID or GUID has been added to the current asset mapping, replacing this one. + + + + + If true, errors related to this asset were reported during loading. + + + + + Null or empty if created at runtime, otherwise set by when loading. + + + + + Contents of file this asset was loaded from. Only kept if data re-saving is enabled. (So that this memory + is collected after populating the asset.) + + + + + Master bundle this asset loaded from. + + + + + Were this asset's shaders set to Standard and/or consolidated? + Needed for vehicle rotors special case. + + + + + Should texture non-power-of-two warnings be ignored? + Unfortunately some third party assets have odd setups. + + + + + Should read/write texture warnings be ignored? + + + + + Hash of the original input file. + + + + + Maybe temporary? Used when something in-game changes the asset so that it shouldn't be useable on the server anymore. + + + + + Most asset classes end in "Asset", so in debug strings if asset is clear from context we can remove the unnecessary suffix. + + + + + Remove "Asset" suffix and convert to title case. + + + + + e.g. Canned Beans (Consumeable Item) + + + + + Perform any initialization required when PopulateAsset won't be called. + + + + + Planning ahead to potentially convert the game to use Unity's newer Addressables feature. + + + + + 2023-04-17: suggestion is to have a hardcoded list of hate speech that gets filtered + regardless of whether profanity filter is enabled. (https://forum.smartlydressedgames.com/t/22477) + + + + + Special asset type that isn't (shouldn't be) returned by asset Find methods. Instead, if found when resolving + an asset legacy ID or GUID, Find is called again with the target specified by this asset. + + + + + Enumerate elements that are not in the pool. + + + + + Sanity check all returned elements have a gameObject. + + + + + Map creator can specify a constant weather mode. + + + + + Associates a train vehicle ID with the index of a road path to spawn it on. + The level only spawns the train if this vehicle ID isn't present in the map yet, so every train on the map has to be different. + + + + + Should underwater bubble particles be activated? + + + + + Should positions underground be clamped above ground? + Underground volumes are used to whitelist valid positions. + + + + + If true, certain objects redirect to load others in-game. + + + + + If true, electric objects are always powered, and generators have no effect. + + + + + Display version in the format "a.b.c.d". + + + + + Version string packed into integer. + + + + + Number of custom tips defined in per-level localization file. + Tip keys are read as Tip_# + + + + + LevelBatching is currently only enabled if map creator has verified it works properly. + + + + + Overrides maximum size of textures included in LevelBatching atlas. + When using this, be mindful the combined texture doesn't exceed some reasonable size (~4k?) + + + + + If true, map creator has verified the clutter option works as-expected. + + + + + Absolute path to the map folder. + + + + + Whether unity analytics should track this map's name. Don't want to burn all the analysis points! + + + + + Maps included with the game only, separate from category because arena maps are misc. + Category is set as part of the config file. This is only mainly used to enable unity analytics tracking for map name. + + + + + Only used for play menu categories at the moment. + + + + + SHA1 hash of the Level.dat file. + + + + + Test whether this map's workshop file ID is in the curated maps list. + + + + + Web URL to map feedback discussions. + + + + + If true, this info is out-of-date and may have been renamed or deleted. + + + + + Preview.png should be 320x180 + + + + + Get a random file path in the /Screenshots folder, or fallback to Level.png if it exists. + + + + + Get a random file path in the /Screenshots folder + + + + + When adding or removing entries remember to update NetMessages size and regenerate NetCode! + + + + + Client requesting workshop files to download. + + + + + Client has loaded the level. + + + + + Client providing Steam login token. + + + + + Client sending BattlEye payload to server. + + + + + Client sent a ping. + + + + + Client responded to our ping. + + + + + Client calling an RPC. + + + + + Client providing asset GUIDs with their file hashes to check integrity. + + + + + Client intends to disconnect. It is fine if server does not receive this message + because players are also removed for transport failure (e.g. timeout) and for expiry + of Steam authentication ticket. This message is useful to know the client instigated + the disconnection rather than an error. + + + + + Error code that the server exited with. + 0 is succesful, anything else is an error. + + + + + Empty if successful, + otherwise an explanation of the first error encountered. + + + + + Register all built-in asset and useable types. + + + + + Can be added to any GameObject to receive weather events for a specific custom weather asset. + + + + + GUID of custom weather asset to listen for. + + + + + Invoked when custom weather is activated, or immediately if weather is fading in when registered. + + + + + Invoked when custom weather finishes fading in, or immediately if weather is already fully active when registered. + + + + + Invoked when custom weather is deactivated and begins fading out. + + + + + Invoked when custom weather finishes fading out and is destroyed. + + + + + GUID parsed from WeatherAssetGuid parameter. + + + + + Default. Create a material instance for child renderer of Toggle game object. + Downside of this is exclusion from level batching texture atlas. + + + + + Object does not have any toggleable emissive materials. + + + + + Prevents calling getOrLoad redundantly if asset does not exist. + + + + + If set, overrides model prefab in the level editor. + + + + + Clip.prefab + + + + + Object.prefab + + + + + If true, object will be hidden when rendering GPS/satellite view. + Defaults to true if is set. + + + + + If true, Nav game object will be instantiated in singleplayer and on dedicated server. Useful for objects + which need to affect navmesh baking without colliding with zombies during gameplay. + Defaults to true for "medium" and "large" objects. + + + + + If true, Nav game object will be instantiated in the level editor. Useful for objects which need collision + with zombies during gameplay without affecting navmesh baking. + Defaults to true for "medium" and "large" objects. + + + + + Should landing on this object inflict fall damage? + + + + + If true, object is not loaded when clutter is turned off in graphics menu. + + + + + Property is not exposed at the moment because interactability properties should really be moved into some + sort of sub-asset. + + + + + Same as interactabilityDialogueRef, not public because it really needs to be cleaned up. :( + + + + + Effect played when single segment is destroyed. + + + + + Effect played when all segments are destroyed. + + + + + Weapon must have matching blade ID to damage object. + Both weapons and objects default to zero so they can be damaged by default. + + + + + [0, 1] probability of dropping any rewards. + + + + + If true, zombies can attack this object if it's blocking them. Defaults to false. + + + + + Multiplier for damage from zombies if RubbleCanZombiesDamage is true. + + + + + Controls how rubble affects Nav game object. + + + + + If set (>0), alerts nearby entities when an individual section is destroyed. + + + + + If set (>0), alerts nearby entities when all sections are destroyed. + + + + + Should colliders in the Triggers GameObject with "Kill" name kill players? + If Triggers GameObject is not set, searches Object instead. + + + + + Should this object only be visible if gore is enabled? + Allows pre-placed blood splatters to be hidden for younger players. + + + + + Only activated during this holiday. + + + + + Object to use during the Christmas event instead. + + + + + Object to use during the Halloween event instead. + + + + + Get asset ref to replace this one for holiday, or null if it should not be redirected. + + + + + If any conditions use flags they will be added to a set, + otherwise null is returned. + + + + + Recursively change all children including root from oldTag to newTag. + Aborts if a child doesn't match the old tag because it might be something we shouldn't change the tag of. + True if tags were all successfully changed. + + + + + Recursively change all children including root from oldLayer to newLayer. + Aborts if a child doesn't match the old layer because it might be something we shouldn't change the layer of. + True if layers were all successfully changed. + + + + + Called if we have a valid Nav GameObject. + Recast requires any meshes used on the Nav objects to be CPU readable, so we log errors here if they're not marked as such. + + + + + Should zombie(s) of the required type be spawned when player enters the area? + + + + + How many to spawn if spawning is enabled. + + + + + If greater than zero, find this zombie type configured in the level editor. For example, if the level editor + lists "0 Fire (4)", then 4 is the unique ID, and if assigned to this condition a zombie from the "Fire" + table will spawn. + + + + + Navmesh index player must be within. If set to byte.MaxValue then anywhere on the map is eligible. + + + + + Only kills within this radius around the player are tracked. + + + + + Only kills outside this radius around the player are tracked. + NSTM requested this for a sniping zombies quest. + + + + + If spawning is enabled, whether to use the timer between spawns. + + + + + Shows inspect buttons for each item mentioned in purchasable box or bundle's description text. + + + + + Manages global post-process volumes. + + + + + Callback when in-game graphic settings change. + + + + + Callback when player changes perspective. + + + + + Unfortunately EditorPrefs cannot be used in constructor. + + + + + Represents whether a player can craft a provided blueprint. If yes, which items to use, if no, why not. + Previously, some of this data was (confusingly) stored in the blueprint definition. + For performance, caller should re-use a list of BlueprintStatus and *not* discard unused results. + + + + + Total number of missing required nearby crafting tags. + + + + + Total required input item count minus available input item count. + + + + + Currently only used by housing planner. + Doesn't work with NPC conditions / rewards. + + + + + Currently only used by housing planner. + Doesn't work with NPC conditions / rewards. + + + + + Used to sort blueprints from "most craftable" (1) to "least craftable" (0). + + + + + Reset values set by PlayerCrafting.UpdateBlueprintDynamicStatus. + + + + + If not zero, use this amount instead of . + Used by as amount of ammo needed. + + + + + If true, cancel updating status as soon as anything goes wrong. + False for client UI where all info about blueprint is needed for display. + True on server where extra processing is a waste. + + + + + If set, log errors here. + + + + + Is current UTC time within this time span, and player has not dismissed? + + + + + Has the current time span been dismissed? + For example, player may have dismissed a previous event but not this current one. + + + + + Is current UTC time within this time span? + + + + + Allows file name to be included in kick message that client would otherwise not know. + + + + + Actual max value is plus one because message never contains zero items. + + + + + Has player dismissed the given workshop item? + + + + + Track that the player has dismissed the given workshop item. + + + + + Has player already auto-subscribed to the given workshop item? + + + + + Track that the player has auto-subscribed to the given workshop item. + + + + + Find colliders in gameObject and encapsulate their bounding boxes together. + + True if bounds were determined, false otherwise. + + + + Find colliders in gameObject and the point closest to position, otherwise use gameObject position. + + Collider is only included if its layer is enabled in layer mask. + + + + Does sphere overlap anything? + + + + + Allows foreach loop to iterate renderers defined in lod group. + + + + + Counts hits per-IPv4 address (if available) and per-SteamID (if available). + Connection is blocked if more than "threshold" hits occur within category (IPv4/SteamID). + Hit count resets when "window" seconds have passed since last hit. + + + + + If hit is within this many seconds of previous hit, it counts. Otherwise, counter is reset. + + + + + If more than this many hits occur the limit is reached. + + + + + Hack, we put this string on a newline for box probabilities. + + + + + Called on the client after a new message is inserted to the front of the list. + + + + + Called on the server when preparing a message to be sent to a player. + Allows controlling how %SPEAKER% is formatted for the receiving player. + + + + + Called on the server when formatting a player's message before sending to anyone. + Allows structuring the message and where the player's name is, for example: '[CustomPluginRoleThing] %SPEAKER% - OriginalMessageText' + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Add a newly received chat message to the front of the list, + and remove an old message if necessary. + + + + + Previous messages sent to server from this client. + Newest at the front, oldest at the back. Used to repeat chat commands. + + + + + Send a request to chat from the client to the server. + + + + + Allows Unity events to send text chat messages from the client, for example to execute commands. + Messenger context is logged to help track down abusive assets. + + + + + Allows Unity events to broadcast text chat messages from the server. + Messenger context is logged to help track down abusive assets. + + + + + Server send message to specific player. + Used in vanilla for the welcome message. + Should not be removed because plugins may depend on it. + + + + + Server send message to specific player. + Used in vanilla by help command to tell player about command options. + Should not be removed because plugins may depend on it. + + + + + Server send message to all players. + Used in vanilla by some alerts and broadcast command. + Should not be removed because plugins may depend on it. + + + + + Serverside send a chat message to all players, or a specific player. + + Contents to display. + Default text color unless rich formatting overrides it. + Player who sent the message (used for avatar), or null if send by a plugin. + Send message to only this player, or all players if null. + Mostly deprecated, but global/local/group may be displayed. + URL to a 32x32 .png to show rather than a player avatar, or null/empty. + Enable rich tags e.g., bold, italics in the message contents. + + + + Nelson 2024-10-14: We might want to elaborate on this with "client-side chat commands" in the future, but + for the meantime I've hacked in this one command. + + + + + If set, find a child meshrenderer with this name and change its material to the character hair material. + + + + + If non-zero, legacy ID of final Asset to return. + + + + + If non-zero, legacy ID of SpawnAsset to resolve. + + + + + If both legacy IDs are zero this GUID will be used. If the target asset is + a SpawnAsset it will be further resolved, otherwise the found asset is returned. + + + + + Can be enabled by spawn tables that insert themselves into other spawn tables using the roots list. + If true, zeros the weight of child tables in the parent spawn table. + + + + + Has this spawn been added as a root of its child spawn table? + Used for debugging spawn hierarchy in editor. + + + + + Helper method for plugins because IDs are internal. + + + + + Parent spawn assets this would like to be inserted into. + + + + + Zero weights of child spawn tables. + Called when inserting a root marked isOverride. + + + + + Do tables need to be sorted and normalized? + + + + + Sort children by weight ascending, and calculate their normalized chance as a percentage of total weight. + + + + + Remove from roots, and if reference is valid remove us from their children. + + + + + Remove from tables, and if referencing a child table remove us from their roots. + + + + + Spawns an animal into the world. + + The ID of the animal. + Position to spawn the animal. + Angle to spawn the animal. + Whether the animal is dead or not. + + + + Gets the animal at a specific index. + + The index of the animal. + + + + + Find replacement spawnpoint for an animal and teleport it there. + + + + + Used in arena mode to reset all animals to dead. + + + + + Stripped-down version of structure prefab for previewing where the structure will be spawned. + + + + + Whether preview object is currently highlighted positively. + + + + + Time when "Use" animation clip started playing in seconds. + + + + + Length of "Use" animation clip in seconds. + + + + + True when animation starts playing, false after placement sound is played. + + + + + Whether the "Use" animation clip started playing. + + + + + If running as server, whether ReceiveBuildStructure has been called yet. + + + + + Whether basic range and claim checks passed. + + + + + Position the item should be spawned at. + + + + + Rotation the item should be spawned at. + + + + + Interpolated toward customRotationOffset. + + + + + Allows players to flip walls. + + + + + Vertical offset using scroll wheel. + + + + + Whether enough time has passed for "Use" animation to finish. + + + + + Whether animation has reached the time when placement sound should play. + + + + + Used to aid backwards compatibility as much as possible when transitioning Unity versions breaks asset bundles. + + + + + Unity 5.5 and earlier per-asset .unity3d file. + + + + + When "master bundles" were first introduced in order to convert older Unity 5.5 asset bundles in bulk. + + + + + Unity 2018 needed a new version number in order to convert materials from 2017 LTS asset bundles. 2019 did not need a + new version number, but in retrospect it seems unfortunate that we cannot distinguish them, so 2020 does have its own. + + + + + 2021 LTS+ + + + + + The first time asset loading finishes it will load the main menu. + + + + + If true, either loading during initial startup or full refresh. + + + + + If true, currently searching locations added after initial startup loading. + + + + + Has initial client UGC loading step run yet? + Used to defer asset loading for workshop installs that occured during startup. + + + + + Has initial map loading step run yet? + Used to defer map loading for workshop installs that occured during startup. + + + + + Calling this "legacy" is a bit of a stretch because even most of the vanilla assets are + built around the 16-bit IDs. Ideally no new code should be relying on 16-bit IDs however. + + + + + Incremented when assets are added or removed. + Used by boombox UI to only refresh songs list if assets have changed. + + + + + In singleplayer and the level editor this is the same as defaultAssetMapping, + but when playing on a server a subset of assets based on the server's workshop files is used. + + + + + Should folders be scanned for and load .dat and asset bundle files? + Plugin developers find it useful to quickly launch the server. + + + + + Do we want to enable shouldDeferLoadingAssets? + + + + + Should extra validation be performed on assets as they load? + Useful for developing, but it does slow down loading. + + + + + Should asset file metadata such as line numbers and comments be parsed? + Useful for development (e.g., error messages), but may slow down loading and increases RAM usage. + + + + + Should asset files be re-saved after all loading is finished? + Requires asset metadata. Useful for automatically upgrading .dat/.asset files. + + + + + Should some specific asset types which opt-in be allowed to defer loading from asset bundles until used? + Disabled by asset validation because all assets need to be loaded. + + + + + Should workshop asset names and IDs be logged while loading? + Useful when debugging unknown workshop content. + + + + + Should a JSON report of all the game's assets be exported? + + + + + Should GC and clear unused assets be called after every loading frame? + Potentially useful for players running out of RAM, refer to: + https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/1352#issuecomment-751138105 + + + + + Should modded spawn tables being inserted into parents be logged? + Useful for debugging workshop spawn table problems. + + + + + Loaded master bundles. + + + + + Loading master bundles. + + + + + Master bundle from root /Bundles directory containing vanilla assets. + + + + + While an asset is being loaded, this is the master bundle for that asset. + Used by master bundle pointer as a default. + + + + + This method supports . + + + + + Find an asset by GUID reference. + This method supports . + + Asset with matching GUID if it exists, null otherwise. + + + + Find an asset by GUID reference. + This method supports . + Maybe considered a hack? Ignores the current per-server asset mapping. + + Asset with matching GUID if it exists, null otherwise. + + + + Find an asset by GUID reference. + This method supports . + Maybe considered a hack? Ignores the current per-server asset mapping. + + Asset with matching GUID if it exists, null otherwise. + + + + Load content from an assetbundle. + + + + + Find an asset by GUID reference. + This method supports . + + Asset with matching GUID if it exists, null otherwise. + + + + Find an asset by GUID reference. + This method supports . + + Asset with matching GUID if it exists, null otherwise. + + + + This method supports . + + + + + This method supports . + + + + + This method supports . + Note: this method doesn't handle redirects by VehicleRedirectorAsset. + + + + + This method supports . + Note: this method doesn't handle redirects by VehicleRedirectorAsset. + + + + + This method supports . + + + + + This method supports . + + + + + Useful if GUID can reference a different asset type than legacy ID. For example, gun magazine GUID can + reference a SpawnAsset while its legacy ID cannot. + This method supports . + + + + + Append assets that extend from result type. + + + + + Maybe considered a hack? Ignores the current per-server asset mapping. + Append assets that extend from result type. + + + + + While playing on server the client will use the same dictionary/list of assets the server uses in order + to reduce issues with ID conflicts. + + 2023-05-27: server now ALSO uses the same logic to ensure IDs are applied in consistent order regardless + of multi-threaded loading order. + + + + + Search all loaded master bundles for one in path's hierarchy. + + + + + Find loaded master bundle by name. + + + + + Unload all asset bundles from memory, and empty known list. + Called when reloading assets. + + + + + Catches exceptions thrown by LoadFile to avoid breaking loading. + + + + + Called when a new workshop item is installed either on client or server. + + + + + Reload assets in given folder. + + + + + Do we have any new spawn assets that have not been linked yet? + Used to skip linking spawns if not required when downloading assets. + + + + + Can now be safely called multiple times on client in order to handle spawns for downloaded maps. + Spawn tables have "roots" which allow mods to insert custom spawns into the vanilla spawn tables. + This method is used after workshop assets are loaded on client, or after the dedicated server is done downloading workshop content. + + + + + Look through all item blueprints and log errors if there are duplicates. + + + + + Look through all dialogue and check that their referenced + dialogueID or vendorID is an actual loaded asset. + + + + + Manually run asset unload and garbage collection in the hope + that it will minimize RAM allocated during loading. + + + + + Helper for Assets.init. + Load all non-map assets from: + /Bundles/Workshop/Content + /Servers/ServerID/Workshop/Content + /Servers/ServerID/Bundles + + + + + Helper for Assets.init. + Load all non-map assets from subscribed UGC. + + + + + Helper for modders creating workshop content. + Loads folders in the "Sandbox" directory the same way workshop files are loaded. + + + + + Helper for Assets.init. + Load all assets in each map's Bundles folder, and content in map's Content folder. + + + + + Not the tidiest place for this, but it allows startup to pause and show error message. + Occasionally there have been reports of the steamclient redist files being out of date on the dedicated + server causing problems. For example: https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/2866#issuecomment-965945985 + + + + + Note: inventory service does not support exchanging multiple items simultaneously. + + + + + Optional parameter for error logging and responding to the invoker. + + + + + Wraps audio source to prevent caller from meddling with it, and to allow the implementation + to change in the future if necessary. + + + + + 2D audio. + + + + + Optional parent transform to attach the audio source to. + + + + + 0 = 2D, 1 = 3D + + + + + Associates an ID with the instance of the sound being played. This ensures that if Stop() is called + on an old handle it will not stop playing the audio if the component has already been recycled. + + + + + True while inactive, false while playing. + + + + + Timer needs playId as well in case source has been recycled by the time duration expires. + + + + + Not extendable until transport API is better finalized. + + + + + How many seconds message should popup. + + + + + Which item ID we thought was there. If the item ID currently at the coordinates doesn't match we clear this hotkey. + + + + + Start/Stop input is encoded as 2 bits, 1 bit for Start flag and 1 bit for Stop flag. + + Prior to 2023-03-16 it was a single bit. The server would Start if true and the previous frame was false, + and vice versa call Stop if false and the previous frame was true. The problem with that approach was when + the client FPS is higher than the simulation FPS a series of repeated attack presses would be treated as a + continuous held attack input. Semi-auto guns were difficult to shoot at their max rate of fire. Sending both + allows the server to theoretically call Start every simulation frame as opposed to only half. + + First approach was to OR Start if held, otherwise OR Stop. This doesn't work because for example when Aim is + pressed the Stop flag will already be enabled, so the gun Starts aiming, Stops aiming, Starts aiming, and then + stays aiming rather than just Start and stay aiming. Instead we only want Stop to be sent once. + + + + + Wants to "start" primary or secondary input. (e.g., Useable.startPrimary) + + + + + Wants to "stop" primary or secondary input. (e.g., Useable.stopPrimary) + + + + + Invoked from tellEquip after change. + + + + + Skin applied to the currently equipped useable. + + + + + Does equipped useable have a menu open? + If so pause menu, dashboard, and other menus cannot be opened. + + + + + For aiming toggle input. + + + + + Get ragdoll effect to use when the current weapon deals damage. + + + + + It should be safe to call this immediately because hotkeys are loaded in InitializePlayer. + + + + + Prevent multiple hotkeys from referencing the same item. + + + + + Left-handed characters need the stat tracker to be flipped on the X axis so that the text reads properly. + ItemTool doesn't know about left/right handedness, so for the moment that's handled here because only players need this fixed up. + + + + + Match stat tracker gameobject's isActive to whether skins are visible. + + + + + Match all stat tracker visibilities to whether skins are visible. + + + + + Called clientside to ask server to equip an item in the inventory. + + + + + Hacked-in to bypass regular clientside checks when client would predict the item at given coords. + + + + + Remove the item from inventory so that if we die before the item isn't dropped + + + + + Finish dequipping from + + + + + Invoked before dealing damage regardless of whether the punch impacted anything. + + + + + (Temporarily?) separated out from simulate to try and get a better exception call stack. + + + + + (Temporarily?) separated out from simulate to try and get a better exception call stack. + + + + + (Temporarily?) separated out from simulate to try and get a better exception call stack. + + + + + Allow UI to process input [0, 9] key press when cursor is visible. + + + + + Process input [0, 9] key press. + + + + + If equipped item is bound to a hotkey, return the button [0, 9] associated. + Otherwise, return -1. + + + + + Called by input when preparing for simulation frame. + + + + + Called once by Setup. + + + + + Extension method for Thread class. + Plugins use this. + I might have accidentally removed it due to zero refs and Pustalorc was mad: + https://github.com/SmartlyDressedGames/Unturned-3.x-Community/discussions/4131 + + + + + Throw an exception if current thread is not the game thread. + + + + + Only on dedicated server: throw an exception if current thread is not the game thread. + + + + + Search loaded assets for blueprints that output a single structure item and are + available on the current map. + + + + + Update status of all relevant blueprints. + + + + + Currently saved craftableBlueprint for asset may have become uncraftable, + in which case we try finding a craftable replacement. + + + + + Get a blank status from the pool or construct a new one. + + + + + Search inventory for housing items, count the quantity of each, and remove + duplicate entries from the list because it is used for the UI. + + + + + Stripped-down version of structure prefab for previewing where the structure will be spawned. + + + + + Whether preview object is currently highlighted positively. + + + + + Position the item should be spawned at. + + + + + Rotation the item should be spawned at. + + + + + Interpolated toward customRotationOffset. + + + + + Allows players to flip walls. + + + + + Vertical offset using scroll wheel. + + + + + Box in the HUD with selected item name and quantity. + + + + + Blueprints which create a structure item. + + + + + One craftable blueprint per potential structure item. + + + + + Recycled blueprint statuses. + + + + + Steam currency codes seem to be ISO 4217, however the documentation (as of 2021-01-29) does not say so. + + + + + 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. + + + + + Windows-specific extensions of Windows console input. + Uses the Win32 API to force a console to be created and destroyed. + + + + + Directory the game files are installed in. For the editor this is the /Builds/Shared directory. + Windows and Linux: contains the executable and the Unturned_Data directory. + MacOS: contains the Unturned.app bundle. + + + + + Handles VehicleRedirectorAsset (if any) and returns actual vehicle asset (if any). + + + + + Handles VehicleRedirectorAsset returning load paint color override (if any) and returns actual vehicle asset (if any). + + + + + Handles VehicleRedirectorAsset returning spawn paint color override (if any) and returns actual vehicle asset (if any). + + + + + Handles VehicleRedirectorAsset (if any) and returns actual vehicle asset (if any). + + + + + Handles VehicleRedirectorAsset returning load paint color override (if any) and returns actual vehicle asset (if any). + + + + + Handles VehicleRedirectorAsset returning spawn paint color override (if any) and returns actual vehicle asset (if any). + + + + + Handles VehicleRedirectorAsset (if any) and returns actual vehicle asset (if any). + + + + + Handles VehicleRedirectorAsset returning load paint color override (if any) and returns actual vehicle asset (if any). + + + + + Handles VehicleRedirectorAsset returning spawn paint color override (if any) and returns actual vehicle asset (if any). + + + + + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + + + + Supports redirects by VehicleRedirectorAsset. If redirector's SpawnPaintColor is set, that color is used. + + true if matching vehicle asset was found. (Not necessarily whether vehicle was spawned.) + + + + Tools like carjacks and tires can be used in safezone by admins for maintenance. + + + + + Create glazier implementation. Invoked early during startup. + + + + + Multiplier for the maximum distance the gunshot can be heard. + + + + true if key existed and was removed. + + + true if key existed and was removed. + + + + Unturned equivalent of unity's PlayerPrefs. + Convenient for saving one-off key-value pairs. + + + + + String table specifically for Unity physics material names. + Implemented so that tires can more efficiently replicate which ground material they are touching. + + + + + Get an ID that can be used to reference a physics material name over the network. If given material name + isn't supported (e.g., not registered in a PhysicsMaterialAsset or over max material limit) returns + instead. + + + + + Get name of a physics material from network ID. Returns null if ID is null, e.g., if the sent name wasn't + registered or was over the max material limit. + + + + + Called when resetting network state. + + + + + Called on server and singleplayer before loading level. + + + + + Number of bits needed to replicate PhysicsMaterialNetId. + + + + + Implemented by components to support taking damage from explosions. + Not intended for external use (yet?) and may need to change. + + + + + Used to exclude dead entities from further evaluation. + + + + + Used to sort damage from nearest to furthest. + + + + + Intended for internal use only. + + + + + Data that we pool to reduce allocations, but needs to be separate per-invocation of explosion in case it's + invoked recursively. (for example, by blowing up a vehicle) + + + + + Replacement for playerDamaged. + + + + + Replacement for zombieDamaged. + + + + + Replacement for animalDamaged. + + + + + Refer to ExplosionPoolData for pooling explanation. + + + + + Was necessary when structures were children of level transform. + + + + + Was necessary when trees were children of ground transform. + + + + + Somewhat hacked-together to find owner of a vehicle, barricade, or structure descendant. + + + + + Get average explosionArmor of player's equipped clothing. + + + + + Refer to getPlayerExplosionArmor for explanation of total/average. + + + + + Do damage to a zombie. + + + + + Legacy function replaced by damageZombie. + + + + + Legacy function replaced by damageZombie. + + + + + Do damage to an animal. + + + + + Legacy function replaced by damageAnimal. + + + + + Legacy function replaced by damageAnimal. + + + + + This unwieldy mess is the original explode function, but should be maintained for backwards compatibility with plugins. + + + + + Used if explosion won't damage anything. + + + + + Do radial damage. + + + + + Server spawn impact effect for all players within range. + + + + + Server spawn impact effect for all players within range. Optional "spectator" receives effect regardless of distance. + + + + + Server spawn effect by ID for all players within range. Optional "spectator" receives effect regardless of distance. + + + + + Server spawn effect for all players within range and instigator receives effect regardless of distance. + + + + + parent should only be set if that system also calls ClearAttachments, otherwise attachedEffects will leak memory. + + + + + Nelson 2025-03-10: This aims to avoid messing with Magazine transform IsActive unless skin already did. + + + + + Nelson 2024-11-15: By default, attachments use their corresponding "hook" transform. For example, magazines + use the "Magazine" transform as their parent. If a child of the hook transform matches a caliber in the + attachment's caliber list that is used instead. + + + + + Should the buying and selling lists be alphabetically sorted? + + + + + This prevents identical tag provider setups from listing in the UI. + For example, two workbenches providing the same tags shouldn't show two UI listings. + + + + + Player does not want to see this blueprint. + + + + + Player wants to save this blueprint in a special category. + + + + + Find nearby crafting tag providers and query their tags. + + + + + Tests whether nearby tags include specified tag. + Doesn't update nearby tags, so call UpdateAvailableCraftingTags if out-of-date. + + + + + Requested for plugin use. + Notifies owner they should refresh the crafting menu. + + + + + Update anything that will not change as blueprint is invoked repeatedly on server. + + + + + Update anything that can change as blueprint is invoked repeatedly on server. + + + + + Returns true if should exit early. + If updating behavior here please remember to update . + + + + + Find all item assets available to the player for crafting. + Used to more quickly identify blueprints that might be craftable, rather than testing all blueprints. + If updating behavior here please remember to update . + + + + + Allows housing planner to craft without playing effect, without also allowing + cheaters to craft without playing effect. (if it were an RPC param) + + + + + Get local player's per-blueprint preferences. + + + + + Set local player's per-blueprint preferences. + This is helpful both to prevent accidentally crafting certain blueprints (like blindfolds) when click to + craft is enabled, and to save frequently used blueprints. + + + + + Why isn't tags list public visibility? Because if adding features to (for example) consume a resource when + crafting tag provider is used that will require an API change. + + + + + Extensions to the built-in Screen class. + We have run into multiple problems with the Screen.resolutions property over the years, so this class aims to + protect against bad data. + + + + + Work-in-progress plan to allow modders to create custom physics effects. + + + + + Can crops be planted on a given material? + + + + + Can oil drills be placed on a given material? + + + + + Original width field is misleadingly named. It represents half the width of the flat section of the road. + + + + + Original depth field is misleadingly named. It represents half the "up" size of the road. + + + + + Distance along the terrain surface normal to move each road vertex. + + + + + New code should not use this. Only intended for backwards compatibility. + + + + + Ideally the interactable components should have a reference to their barricade, but that will maybe happen + after the NetId rewrites. For the meantime this is to avoid calling FindBarricadeByRootTransform. If we go + the component route then FindBarricadeByRootTransform will do the same as this method. + + + + -1 if table was not found. + + + + By default, clickable only responds to LeftMouse without the Control modifier. + Unturned (currently) filters left/right mouse and modifiers outside Glazier, + so add activators for left/right and control modifier to all clickables. + + + + + USS best practices mentions inline styles have a higher memory overhead, so we + only apply an inline value if it doesn't match the default :root font style. + + + + + USS best practices mentions inline styles have a higher memory overhead, so we + only apply an inline value if it doesn't match the default :root text alignment. + + + + + Ehh kind of a stretch to mark this obsolete or for backwards compatibility. Introducing it for road assets + which specify the PhysicMaterial to assign to the colliders. Specifying an asset path is available, but + for the common case we will use the built-in vanilla resources. + + + + + Get legacy enum corresponding to Unity physics material object name. + Moved from obsolete checkMaterial method. + + + + + If collider and its physics material are not null, get the physics material's name. Null otherwise. + + Nelson 2025-04-22: this method may seem silly on first glance. However, I tracked down some every-frame + memory allocation to getting the PhysicMaterial.name property. This method caches the instance ID to + name lookup in a dictionary to avoid that. Note: we don't worry about clearing the dictionary because + there aren't very many physics materials. + + + + + Base class for uGUI implementations of primitive building block widgets. + + + + + Called after constructor when not populating from component pool. + + + + + Called after constructor when re-using components from pool. + + + + + Synchronize uGUI component colors with background/text/image etc. colors. + Called when custom UI colors are changed, and after constructor. + + + + + Synchronize uGUI component sprites with theme sprites. + Called when custom UI theme is changed, and after constructor. + + + + False if element couldn't be released into pool and should be destroyed. + + + + Unity recommends enabling components after parenting into the destination hierarchy. + + + + + RectTransform children should be attached to. Overridden by ScrollView content panel. + + + + + This helper property's purpose is to: + - Ensure other properties don't accidentally remove LayoutElement if others need it. + - Ensure LayoutElement is destroyed before returning to pool. + + + + + Parameters for connecting to a game server. + + Admittedly there are other parameters to the Connect method, + but those are for detecting advertisement discrepencies and can be null. + + + + + Server's public IP address of a Steam "Fake IP" address. + + + + + Port for Steam's "A2S" query system. This the port we refer to when + sharing a server's address (e.g., 127.0.0.1:queryport). + + + + + Port for game traffic. i.e., Steam manages the query port socket while + we manage the connection port socket. The game assumes it's the query + port plus one. NOTE HOWEVER after the introduction of "Fake IP" support + (2023-12-07) the connection port is the same as the query port for fake + IPs. In keeping with the spirit of fake values to simplify existing code, + we act as if the connection port is plus one except in the appropriate + ClientTransport code when the fake IP is detected. + + + + + Referred to as "Server Code" in menus. + Used if address is zero. + + + + + If -1, this region is finished activating/deactivating. + Otherwise, incremented once per frame until per-region count is reached. + + Per-region data is removed when isInsideMask is false and progressIndex is -1. + + + + + If true, this region is within MaxDistance of current CameraCoord. + + + + + Tracks activation and deactivation of Regions as camera moves around the level. + + + + + Mark all cells as finished loading and remove cells outside the camera view. + Used after teleporting or loading. + + + + + Caller passes an empty dictionary to be filled with update info. + Increments progressIndex for each returned region. + If region is finished updating, call NotifyRegionFinishedUpdating. + + + + + Called when progressIndex has reached end of given region. + + + + + Fill output set with mask offsets applied to current camera coordinate. + + + + + Find changes between old and current coordinate sets to mark regions in/out of mask. + + + + + Reset region's progress counter and change inside/outside status. + + + + + Allows Unity events to spawn effects. + + + + + GUID of effect asset to spawn when SpawnDefaultEffect is invoked. + + + + + If true the server will spawn the effect and replicate it to clients, + otherwise clients will predict their own local copy. + + + + + Should the RPC be called in reliable mode? Unreliable effects might not be received. + + + + + Transform to spawn the effect at. + If unset this game object's transform will be used instead. + + + + + Applied if greater than zero. Defaults to 128. + + + + + Marker for counting number of tips. + + + + + Camera used while transitioning between scenes to prevent the "no cameras rendering" warning. + + + + + Shown when game connection ping is significantly higher than server browser ping. At the time of writing + (2025-01-17) this is likely because the server is using an "anycast proxy" in front of Steam A2S cache. + + + + + Set to Time.frameCount + 1 while loading. + In the past used realtime, but that was unreliable if an individual frame took too long. + + + + + Select a loading image while on the startup screen or a level without any images. + + + + + Convert world-space point into region coordinates that may be out of bounds. + + + + + Convert world-space position into a region coordinate that may be out-of-bounds. + + + + + Returns true if coord is within legacy range. + + + + + Clamp position into the maximum bounds expected by the game, not necessarily the level bounds. + + True if position was modified. + + + + Kick players maybe trying to impersonate me. I guess nobody else named Nelson is allowed in the game! + 2023-09-19: relaxed this a bit by trimming names and using Equals/Starts/Ends rather than Contains + because there was a player with Nelson in their username. + + + + + GUID of the asset this is referring to. + + + + + Whether the type has been asigned. Note that this doesn't mean an asset with exists. + + + + + True if resovling this type reference would get that type. + + + + + Maximum count of naturally spawned boss zombies. Unlimited if negative. + Game will not spawn/respawn boss zombie types passing this limit, but quest spawns can bypass it. + + + + + Base class for UIToolkit implementations of primitive building block widgets. + + + + + Set by child. + + + + + Synchronize control colors with background/text/image etc. colors. + Called when custom UI colors are changed, and after constructor. + + + + + If set, takes priority over VehicleRedirectorAsset's paint color and over VehicleAsset's default paint color. + + + + + Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the + vehicle spawner requires to properly set paint color. + + + + + Plugin-only event when throwable is spawned on server. + + + + + Allows NPCs to trigger plugin or script events. + + + + + instigatingPlayer can be null. For example, if instigated by NpcGlobalEventMessenger. + + + + + Circular mask for 2D distances in meters on a 2D cell grid. + Includes a cell if the meters distance between the center cell + and the closest point on test cell is within radius. + + + + + World space distance in meters. + + + + + Region cell size in meters. + + + + + Data in common between list downloaded from a GET request and a ServerListCurationAsset. + + + + + Optional web image path if icon isn't included. + + + + + Incremented during server list refresh for each server blocked by this rule. + + + + + Starting position when the bullet was fired. + + + + + Only available on the server. For use by plugins developers who want to analyze deviation between approximate + start direction and final hit position using and + per public issue #4450. Note that origin and direction on server are not necessarily exactly the same as on + the client for a variety of reasons, including that bullets on the client can be spawned between simulation + frames when the aim direction was different. (Aim direction is updated every drawn frame on the client as + opposed to every simulation frame on the server.) Rather than kicking for one particularly large deviation + we would recommend tracking stats for each shot's actual deviation vs max theoretical deviation. Remember + to account for bullet drop and that aim spread is relative to this direction. (For example, a shotgun may + fire ~8 pellets in a cone around this direction.) Note also that in third-person the bullet can turn up to + 90 degrees from the aim direction if the camera is up against a wall. + + + + + Combination of gun and attachments' bullet gravity multipliers. + + + + Whether plugin allowed attachment. + + + + Plugin-only event when bullet is fired on server. + + + + + Plugin-only event when bullet hit is received from client. + + + + + Plugin-only event when projectile is spawned on server. + + + + + reticuleHook.localPosition after instantiation, or zero if null. + + + + + True if startPrimary was called this simulation frame. + Allows gun to shoot even if stopPrimary is called immediately afterwards. + + + + + Remaining calls to tock before firing. + + + + + Shot counter used by needsRechamber and RechamberAfterShotCount. + + + + + Is the tactical attachment toggle on? + e.g. True when the laser is enabled. + + + + + Should stat modifiers from the current tactical attachment be used? + + + + + Factor e.g. 2 is a 2x multiplier. + Prior to 2022-04-11 this was the target field of view. (90/fov) + + + + + Zoom multiplier in third-person. + + + + + Whether main camera field of view should zoom without scope camera / scope overlay. + + + + + Original barrel and magazine assets are supplied because they may have already been deleted. Barrel is only + valid if quality was greater than zero. + + + + + Called on server and owning client. + + + + + Calculate damage multiplier for individual bullet. + + + + + Requested for plugin use. + + + + + Request from the server to play a gun jammed animation. + Since client can't predict chamber jams we fixup the predicted ammo count. + + + + + Note: This is the m/s² acceleration, not the multiplier. + + + + + This is a bit of a hack... aimAccuracy is [0, maxAimingAccuracy] and changed during each FixedUpdate call, + but was used in some gameplay display features like holo sight, laser, ADS, etc. (yes, should + be de-coupled from FixedUpdate but that is its own issue) To smooth this out we interpolate + slightly behind the aimAccuracy value depending on the time since FixedUpdate. + + + + + Holographic sights follow the true aiming direction regardless of viewmodel animation. + + + + + Note: This is the multiplier, not the m/s² acceleration. + + + + + Code common for regular gun and sentry gun. + + + + + Consolidates parameters for older, separate inventory search methods. + + The "player" part of the name refers to the PlayerInventory-specific parameters. It can still be used to search + the Items class, in which case those parameters do not apply. + + + + + List to populate with matching items. + + + + + If true, search player's primary and secondary weapon slots. + Only applicable when used with PlayerInventory class. (I.e., not Items class.) + + + + + If true, search storage container player is currently interacting with (if any). + Only applicable when used with PlayerInventory class. (I.e., not Items class.) + + + + + If greater than zero, search exits early once Results count meets MaxResultCount. + + + + + If set, item must be this type to match. + + + + + If set, AssetRef must be a reference to item's asset to match. + Replaces older "id" parameter which matched if item's legacy asset ID was the same. + + + + + If true, items with amount of zero can match. Otherwise, they are ignored. + Replaces older "findEmpty" parameter which matched if (findEmpty || amount > 0). + + + + + If true, items with an "amount" >= their MaxAmount are ignored. Otherwise, they can match (default). + + + + + + If set, item must be of type ItemCaliberAsset. Asset's caliber list must either: + • Contain this caliber ID. + • Or, if empty, IncludeUnspecifiedCaliber must be true. + Otherwise, item is ignored. + + + + + If set, item must be of type ItemCaliberAsset. Asset's caliber list must either: + • Contain one of these caliber IDs. + • Or, if empty, IncludeUnspecifiedCaliber must be true. + Otherwise, item is ignored. + + + + + Only applicable if CaliberId or AnyCaliberIds is set. + If true, assets with an empty calibers list can match. Otherwise, they are ignore.d + + + + + If set, do not include this specific item instance in search results. + Kind of hacked-in for ignoring "target item" as a potential input item. + + + + + Nearly identical to InventorySearch aside from: + • Struct instead of class to improve garbage collection performance in pooled lists. + • More understandable name. + • Provides reference to Items holding "Jar." Longer-term this should be preferred over the "Page" property. + + + + + Serverside delete an amount of this item. + + False for crafting where original item can be kept, true when selling to vendors. + Total amount deleted. + + + + -1 if no eligible item is found. + If includeMaxQuality is true an item with quality of 100 can be "lowest quality", otherwise item has to + be less than 100 quality. + + + + + Please use PlayerInventorySearchResultV2 for better performance! + + + + + Serverside delete an amount of this item. + + Total amount deleted. + + + + Used by the server to validate client Unity player files (assemblies and resources). + + + + + Should players be allowed to join this server regardless of whether their DLL hash matches ours? + Useful to allow players to join debug mode servers. + + + + + Should players be allowed to join this server regardless of whether their resources hash matches ours? + Useful to allow players to join debug mode servers. + + + + + Experience to add or subtract when used. Defaults to zero. + + + + + Canned beans have skins from April Fools. + + + + + Note: if calling ItemRef.Get() please use FindItemAsset instead to avoid redundant asset lookups. + + + + + Does this blueprint output create the specified item? + + + + + Reset dragging handle and register transformation. + + + + + If true, vest and backpack spawn System_Area instead of System_Hook. + + + + + Sets the point to lerp from, should be called after resetting position or things like that. + + + + + Logs enabled when WITH_NSB_LOGGING is defined. + Tracking down an issue where snapshot buffer stops working for groups of networked objects. + + + + + When adding or removing entries remember to update NetMessages size and regenerate NetCode! + + + + + Server sent a ping. + + + + + Server replying to our ping. + + + + + Server is shutting down shortly. + + + + + Create game object for player. + + + + + Destroy game object for player. + + + + + Download these files before loading the level. + + + + + Server wants additional info before accepting us. + + + + + Server has accepted us and will create a player game object. + + + + + Server rejected us, we will go back to the menu. + + + + + Banned either during connect or gameplay. + + + + + Kicked during gameplay. + + + + + Should be converted to an RPC. Leftover from prior to net messaging code. + + + + + Should be converted to an RPC. Leftover from prior to net messaging code. + + + + + Server sending BattlEye payload to client. + + + + + Infrequent notification of queue position. + + + + + Server calling an RPC. + + + + + Allow Unity events to apply damage in a sphere. (doesn't have any visual effects) + Intended to replace unsupported/unintentional use of "Grenade.cs" and "Rocket.cs" scripts. + + + + + Zombie explosion types have slight variations e.g. lighting zombies on fire. + + + + + If greater than -0.5, overrides default radius zombies and animals will be alerted within. + + + + + If true, per-surface effects like blood splatter are created. + + + + + If true, explosion damage passes through Barricades and Structures. + + + + + Speed to launch players away from blast position. + + + + + Overrides how fall damage is calculated when landing on this game object or its descendants. + + + + + Could be extended in the future to increase, decrease, or set fall damage. + + + + + Potentially useful for an event to toggle the override. + + + + + Character will not take any fall damage. + + + + + Payload for the DamageTool.damageZombie function. + + + + + Should game mode config damage multiplier be factored in? + + + + + Equivalent to the "armor" parameter of the legacy damage function. + + + + + Defaults to 1. + + + + + If not null and damage is applied, is called with this position (startle: true). + + + + + If non-zero, NPC name is shown as ??? until bool flag is true. + + + + + This value is confusing because in the level editor it is the normalized radius, but in-game it is the square radius. + + + + + Returning an Asset rather than the older IDs allows GUIDs to be used. + legacyTargetAssetType is required for compatibility with spawn tables using legacy 16-bit IDs. If set to + None and the spawn asset uses legacy IDs a warning is logged explaining GUIDs are necessary. + + + + + + Doesn't support spawn assets with legacy 16-bit IDs. + + + + + For backwards compatibility with features that still need a legacy ID rather than asset. + + + + + For backwards compatibility with features that still need a legacy ID rather than asset. + + + + + For backwards compatibility with features that still need a legacy ID rather than asset. + + + + + If using a map or mods from the workshop, this class monitors them for changes so the server can be restarted. + + + + + Request status of workshop items. + + + + + Called the next tick after update(s) detected. + + + + + Called when a queried item's update timestamp is newer than our initially loaded version. + + + + + Called when results from a call to submitQueryRequest are available. + + + + + Called once timer reaches interval. + + + + + Were update(s) detected that should be handled on next tick? + + + + + Are we done monitoring? + Default finished once an update is detected. + + + + + Interval between query submissions. + + + + + Accumulated time before submitting query after passing interval. + + + + + Callback from Steam when results from a call to submitQueryRequest are available. + + + + + Slightly interpolated copy of actual spread angle to smooth out sharp changes like crouch/prone. + + + + + Allows interpolatedSpread to snap to target value when crosshair becomes visible. + + + + + Deserialize JSON onto an existing object instance. + + + + + Potentially useful for players with corrupted cloud storage. + https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/2756 + + + + + Introduced much later (2020) than most of the other methods in this class (2014) in order to properly handle + BOM/preamble of text files. Matches somewhat undesirable legacy behavior like creating directories. + + + + + NOTE: From and to are both relative to PATH. + + + + + Read GUI texture from a .jpg or .png file. + + + + + Read GUI texture from a .jpg or .png file. + + + + + Windows-specific extensions of console input. + Uses the Win32 API to force a console to be created and destroyed. + + + + + Called by navmesh baking to complete pending object changes that may affect which nav objects are enabled. + + + + + Hide culling volume by default because new mappers might wonder what these purple boxes + are and why their number goes away after moving objects. + + + + + Check a fixed number of volumes for visibility updates per frame. + + + + + Any volumes in the process of enabling/disabling get updated once per frame. + + + + + True for the next update after the player is teleported. + + + + + Associates items of the same currency, e.g. dollars or bullets. + + + + + Should this item/value be shown in the list of vendor currency items? + Useful to hide modded item stacks e.g. a stack of 100x $20 bills. + + + + + String to format value {0} into. + + + + + String to format value {0} of total {1} into if not otherwise specified in NPC condition. + + + + + Sum up value of each currency item in player's inventory. + + + + + Does player have access to items covering certain value? + + + + + Add items to player's inventory to reward value. + + + + + Remove items from player's inventory to pay required value. + + + + + Sort currency entries by value. + + + + + Temporary replacement for static block member because plugins might depend on it. + + + + + Parses fv:X from input string and loads X.txt from game folder. + + + + + Called after lod bias may have changed. + + + + + Can be added to any GameObject with an interactable binary state in its parents. + + If players should not be allowed to interact with the object in the ordinary manner, + add the Interactability_Remote flag to its asset to indicate only mod hooks should control it. + + + + + When a state change is requested in singleplayer it should be treated as if running as a client on a server. + This is the default to match behavior from before this option was added. + + + + + When a state change is requested in singleplayer it should be treated as if running as a dedicated server. + + + + + Invoked when interactable object enters the Used / On / Enabled state. + + + + + Invoked when interactable object enters the Unused / Off / Disabled state. + + + + + Should the OnStateEnabled and OnStateDisabled events be invoked when the object is loaded, becomes relevant + in multiplayer, and is reset? True is useful when visuals need to be kept in sync with the state, whereas + false is useful for transient interactions. + + + + + Controls how state change requests are performed when running as both client and server ("listen server"). + On the dedicated server, requesting a state change overrides the current state without processing NPC + conditions, whereas when a client requests a state change NPC conditions apply. This option fixes the + inconsistency in singleplayer of whether to treat as server or client. (public issue #4298) + At the time of writing (2024-01-29) listen server only applies to singleplayer. + + + + + Set state to Enabled if currently Disabled. + + On dedicated server this directly changes the state, + but as client this will apply the usual conditions and rewards. + + + + + Set state to Disabled if currently Enabled. + + On dedicated server this directly changes the state, + but as client this will apply the usual conditions and rewards. + + + + + Toggle between the Enabled and Disabled states. + + On dedicated server this directly changes the state, + but as client this will apply the usual conditions and rewards. + + + + + Tests whether current or recent history contains point. + + + + + Half second history at 50 tickrate. + + + + + Not originally supported by networking. Added temporarily during netpak rewrite because the quaternion + compression is so much better for vehicles than three byte Euler rotation. + + + + + Gets barricades both attached to vehicles and not attached to vehicles. + + + + + Nelson 2025-04-08: thank goodness that this didn't use the temperature system! (For some reason?) Makes it + relatively straightforward to convert campfires and ovens to Crafting Tags, and means vanilla has a test + case for the mod hook, too. (This method tests for CraftingHeatTag in radius.) + + + + + Index into Blueprints list. -1 means blueprint name is used instead. + + + + + Name to look for in Blueprints list. + + + + + Other menus can modify DevkitSelectionToolOptions so we need to sync our menu when opened. + + + + + Thanks to Glenn Fiedler for this RK4 implementation article: + https://gafferongames.com/post/integration_basics/ + + + + + Higher values return to the target position faster. + + + + + 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?) + + + + + Should objects that failed to load due to missing assets be saved? + If true, a placeholder transform is created and used to save. + If false, objects without assets are zeroed during save. (old default) + + + + + Hash of Objects.dat + + + + + Called by navmesh baking to complete pending object changes that may affect which nav objects are enabled. + + + + + Stagger regional visibility across multiple frames. + + + + + Caches uint16 ID to ID redirects. + + + + Matches handle returned by request, or -1 if cached. + + + + Revive all trees in a specific region. + + + + + Revive trees worldwide. Used between arena rounds. + + + + + Material instantiated when dual-render scopes are enabled. + Overrides the material of the gun sight attachment. + + + + + Unintuitively (to say the least), a pitch of 0 is up, 90 is forward, and 180 is down. + + + + + Nelson 2025-06-27: previously, stopping aim cancelled the sway offset immediately. When + experimenting with removing the dual-render scope blur this felt jarring. + + + + + Reset to actual fov when first used. + + + + + If true, freecam controls take input priority. + Previously named isOrbiting. + + + + + Should player stats be visible in spectator mode? + + + + + Smoothing adds some initial blend-in which felt nicer for explosion rumble. + + + + + Slightly clamped third-person version of "eyes" value to prevent sweep from hitting floor. + + + + + Get point-of-view in world-space. + + + + + Get point of view in worldspace without the left/right leaning modifier. + + + + + This is only used after capturing dual-render scope, not when exiting scope overlay. + Otherwise the lighting vision may have changed between entering and exiting the scope. + + + + + Clamp _pitch within the [0, 180] range. + + + + + Clamp yaw while seated, and keep within the [-360, 360] range. + + + + + Can spectating be used without admin powers? + Plugins can enable spectator mode. + + + + + Can workzone be used without admin powers? + Plugins can enable workzone permissions. + + + + + Can spectator overlays be used without admin powers? + Plugins can enable specstats permissions. + + + + + Called from the server to allow spectating without admin powers. + Only used by plugins. + + + + + Allow use of spectator mode without admin powers. + Only used by plugins. + + + + + Called from the server to allow workzone without admin powers. + Only used by plugins. + + + + + Allow use of workzone mode without admin powers. + Only used by plugins. + + + + + Called from the server to allow spectator overlays without admin powers. + Only used by plugins. + + + + + Allow use of spectator overlay mode without admin powers. + Only used by plugins. + + + + + Multiple hits are necessary because the first returned hit is not always the closest. + + + + + Sweep a sphere to find collisions blocking the third-person camera. + + Valid world-space camera position. + + + + Replacement for enum origin. + + + + + Hardcoded built-in name, or name of workshop file if known. + + + + + Steam file ID if loaded from the workshop, zero otherwise. + + + + + If true, when added to asset mapping the new assets will override existing ones. + This ensures workshop files installed by servers take priority and disables warnings about overlapping IDs. + + + + + If true, we can re-save .dat/.asset files from this origin. + Defaults to false. Only true for assets in the game install folder. + + + + + Can be added to any GameObject to receive text chat events. + + + + + Message can be in any chat channel. + + + + + Message must be in Global channel. + + + + + Message must be in Local channel. + + + + + Filter to apply to message type. + + + + + Sphere radius (squared) around this transform to detect player messages. + e.g. 16 is 4 meters + + + + + Substring to search for in message. + + + + + Message must start with phrase text. + + + + + Message must contain phrase text. + + + + + Message must end with phrase text. + + + + + Filter to apply to message text. + + + + + Invoked when a player message passes the filters. + + + + + Calculate angle in radians the player would need to offset their aim upward + to hit a target a certain distance away. + + + + + Separate from isEnabled to hide markers when they are outside the scope. + + + + + Used to sync hasLabel visibility. + + + + + True while fading in or fully transitioned in. + + + + + True while fading in, but not at full intensity. + + + + + True while finished fading in. + + + + + True while fading out, but not at zero intensity. + + + + + True while finished fading out. + + + + + True while fading in or out. + + + + Matches handle returned by request, or -1 if cached. + + + + Read commands from standard input, and write logs to standard output. + + + + + Each Update we consume a key press from the console buffer if available. + Unfortunately ReadLine is not an option without blocking output, so we maintain our own pending input. + + + + + Entry in the MenuPlayServerBookmarksUI list. + + + + + Null token. + + + + + Text between tags. + + + + + [b] + + + + + [/b] + + + + + [i] + + + + + [/i] + + + + + [list] + + + + + [/list] + + + + + [olist] + + + + + [/olist] + + + + + [*] value + Nelson 2025-07-02: manually written lists typically don't have a ListItemClose token. + + + + + [/*] + Nelson 2025-07-02: Steam's new visual editor adds closing tokens to list items, but + manually-written list items typically don't have them. + + + + + [h1] + + + + + [/h1] + + + + + [h2] + + + + + [/h2] + + + + + [h3] + + + + + [/h3] + + + + + [url=value] + + + + + [/url] + + + + + [img] + + + + + [/img] + + + + + [previewyoutube=value] + + + + + [/previewyoutube] + + + + + '\n' or "\r\n" + + + + + [quote=value] (value is author) + + + + + [/quote] + + + + + [p] + + + + + [/p] + + + + + [u] + + + + + [/u] + + + + + Steam's new visual editor quotes value in [url=x] tag. If value is not quoted, this method returns as-is. + If it IS quoted, this methods returns without quotation marks. + + + + + Breaks down Steam's version of BBcode into tokens like, "[b]", "[i]", "actual text", etc. + + + + + If true, parse newlines in the input as LineBreak tokens. (default true) + If false, exclude LineBreak tokens from output. + 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. + + + + + Reset to -1 when not chatting. If player presses up/down we get index 0 (most recent). + + + + + Fill chat field with previous sent message. + Useful for repeating commands with minor changes. + + + + + Use the latest hotbar items in the UI. + + + + + Icon uploaded to CDN. + + + + + Icon used in game menus. + + + + + Project-relative asset importer version of + + + + + Icon saved for community members in Extras folder. + + + + + Has the small icon been captured yet? + + + + + Has the large icon been captured yet? + + + + + Moved icon code from MenuTitleUI to here. + + + + + These directories are excluded from source control and Steam depots so they might not exist yet. + + + + + If updating this method please remember to update the support article: + https://support.smartlydressedgames.com/hc/en-us/articles/13452208765716 + + + + + Does name contain rich text tags? + Some players were abusing rich text enabled servers by inserting admin colors into their steam name. + + + + + Used when damaging zombies to override in which situations they are stunned. + + + + + Default stun behaviour determined by damage dealt. + + + + + Don't stun even if damage is over threshold. + + + + + Stun regardless of damage. + + + + + Overrides hat item from zombie table with a specific item ID. + + + + + Overrides gear item from zombie table with a specific item ID. + + + + + If zombie is stuck this was a nearby barricade potentially blocking our path. + + + + + If zombie is stuck this was a nearby structure potentially blocking our path. + + + + + If zombie is stuck this was a nearby vehicle potentially blocking our path. + + + + + If target player is passenger in a vehicle this is their vehicle. + + + + + If zombie is stuck this was a nearby object potentially blocking our path. + + + + + Incremented while stuck. Prevents doing overlap test too frequently. + + + + + Add or remove from ticking list if needed. + Separated from updateTicking in order to move once after first spawn. + + + + + Boss zombies are considered mega as well. + + + + + Yeah it seems kinda ugly to pollute all zombies with this code... zombie rewrite eventually please. + + + + + If damage exceeds this value, stun the zombie. + + + + + Used to kill night-only zombies at dawn. + + + + + Cache difficulty asset (if any) for this zombie's current type and bound. + Allows difficulty assets to override certain zombie behaviors. + Called after bound/type is initialized, and after type changes during respawn. + + + + + Called when zombie does not have a target, but has been stuck for a period. + + + + + Reduces frequency of UndergroundAllowlist checks because it can be expensive with lots of entities and volumes. + + + + + Helper to prevent mistakes or plugins from breaking alive zombie count. + + + + + Helper to prevent mistakes or plugins from breaking alive boss zombie count. + + + + + 2023-01-31: set height to 2 rather than adjusting per-zombie-type. Tall zombies (megas) couldn't + get through doorways, and short zombies (crawlers) could get underneath objects they shouldn't + like gas tanks. Zombies were also stacking on top of eachother a bit too much. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + Ideally in a future rewrite asset overload will become the default rather than the overload taking legacy ID. + + + + + If true, item has 100% quality. If false, item has a random quality. + + + + + Get animal or player damage based on game mode config. + + + + + Get zombie or player damage based on game mode config. + + + + + Allows Unity events to spawn barricades. + + + + + Distance along tree's local up axis to offset debris spawn position. Defaults to 1.0. + + + + + Before had randomization properties (which trees don't currently use + as of 2024-12-11 because rotation/scale aren't saved) each tree has some random rotation and scale variation + based on its position. This property controls the rotation away from upright. + + + + + Amount of experience to reward foraging player. + + + + + Forageable resource message. + + + + + Weapon must have matching blade ID to damage tree. + Both weapons and trees default to zero so they can be damaged by default. + + + + + If true, prevent collisions between falling tree and the stump. (i.e., debris can fall through stump) + Defaults to true. + + + + + Only activated during this holiday. + + + + + Tree to use during the Christmas event instead. + + + + + Tree to use during the Halloween event instead. + + + + + Get asset ref to replace this one for holiday, or null if it should not be redirected. + + + + + Essentially deprecated for now. + + + + + Server response to a non-rejected CONNECT request. Notifies client they are in the queue. + + + + + Rather than creating all SleekItems as once we create a few per frame. + + + + + Reset all items hotkey label. + + + + + Kept because lots of modders have been using this script in Unity, + so removing legacy effect id would break their content. + + + + + Find an item to apply stat tracker tool to. + + + + + Find an item with a stat tracker to remove. + + + + + Find an item with a ragdoll effect to remove. + + + + + Find an item to apply ragdoll effect tool to. + + + + + Toggle button to open/close advanced filters panel. + + + + + On/off checkbox for including description text in filter. + + + + + Switch between sort modes. + + + + + On/off checkbox to reverse sort results. + + + + + On/off checkbox to show only equipped items. + + + + + Container for advanced options. + + + + + Whether to include description text in filter. + + + + + How to sort filtered items. + + + + + Should sorted list be reversed? + + + + + Should only equipped items be shown? + + + + + Remove items that do not match search text. + + + + + Removed items that are not equipped. + + + + + All main menu MTX shop code should be routed through here so that it could theoretically be ported to other + platforms or stores. Obviously this is all very Steam specific at the moment, but at least the UI does not + depend on Steam API here as much as older parts of the game. + + + + + Was this item marked as new in the config? + If new, and not marked as seen, then a "NEW" label is shown on the listing. + + + + + Do we have pricing details for a given item? + Price results may not have been returned yet, or item might not be public. + + + + + Messy, but we only show a menu alert if there was a problem. + + + + + Already filtered to only return locally known items which pass country restrictions. + + + + + Empty if outside new time window. + + + + + Subset of listings. + + + + + Subset of listings. + + + + + Subset of listings. + + + + + Subset of listings. + + + + + Subset of listings. + + + + + May be out of date by one frame. + + + + + Currently used by vehicles to deactivate some rendering features when outside rendering distance. + Uses "frozen" position if applicable, otherwise the camera position from the most recent Update. This means + it could be out-of-date, but for LOD purposes it should be "good enough." + + + + + Reset prior to joining a new server. + + + + + By default if the client submits an asset guid which the server cannot find an asset for the client will + be kicked. This is necessary to prevent cheaters from spamming huge numbers of random guids. In certain cases + like a terrain material missing the server knows the client will be missing it as well, and can register + it here to prevent the client from being kicked unnecessarily. + + + + + Send asset hash (or lack thereof) to server. + + IMPORTANT: should only be called in cases where the server has verified the asset exists by loading it, + otherwise only if the asset exists on the client. This is because the server kicks if the asset does not + exist in order to prevent hacked clients from spamming requests. Context parameter is intended to help + narrow down cases where this rule is being broken. + + + + + Send asset hash to server. + Used in cases where server does not verify asset exists. (see other method's comment) + + + + + Called each Update on the client. + + + + + Called from the server to override salvage duration. + Only used by plugins. + + + + + Override salvage duration without admin. + Only used by plugins. + + + + + Outlined object is not necessarily the focused object, so we track it to disable later if focus is destroyed. + + + + + Search up hierarchy for most specific Target transform. + + + + + Was focus non-null during last update? Used to detect when focus was destroyed. + + + + + Currently used by plugins to identify what damaged a buildable. + + + + + Explosion instigated by . + + + + + Should only be used by . + For example: "Condition_##" where ## is an index. + + + + + If >0 the game will start a coroutine to grant the reward after waiting. + + + + + If true and player has this reward pending when they die or disconnect it will be granted. + + + + + Intended to replace filling data from constructor. + + + + + Intended to replace filling data from constructor. Legacy is for backwards compatibility with Reward_#_Key + format, whereas V2 uses the list and dictionary features. + + + + + Used in a test scene to quickly test UI Toolkit implementation. + + + + + Assigned when a named preset is created. + 0 is the default and should be replaced by a preset when loaded. + -1 indicates the preset was modified. + -2 and below are the default presets. + + + + + Nelson 2024-09-20: Changing default to any (from has players) because the default server list sort will now + push empty servers to the bottom. + + + + + If true, only servers with available player slots are shown. + Nelson 2024-09-20: Changing default to false because the default server list sort will now push them down + from the top a little bit. + + + + + If >0, servers with ping higher than this will not be shown. + + + + True if level was added to the list of maps. + + + + Version before named version constants were introduced. (2023-11-13) + + + + + % Full + + + + + Note: this can be different from status.blueprint after status refreshes because status is pooled. + + + + + Update the title box describing the "most important" item: item to repair, salvage, craft, etc. + + + + + The dialogue to go to when a message has no available responses. + If this is not specified the previous dialogue is used as a default. + + + + + For level objects with QuestCondition called when quests are added or removed. + + + + + Event specifically for plugins to listen to global quest progress. + + + + + Event for plugins when group or rank changes. + + + + + Overrides label text next to marker on map. + Used by plugins. Not saved to disk. + + + + + Kept serverside. Used to check whether the player is currently in their Steam group or just a normal in-game group. + + + + + Check before allowing changes to this player's + + + + + Can rename the group. + + + + + Can promote and demote members. + + + + + If set, default spawn logic will check for a location node or spawnpoint node matching name. + Saved and loaded between sessions. + + + + + If true, hide viewmodel and prevent using equipped item. For example, to prevent shooting gun on top of a + first-person scene. This could be expanded in the future with other flags and options. + + + + + Called serverside to set marker on clients. + + + + + Ask server to set marker. + + + + + Call serverside to replicate new rank to clients + + + + + Set player's group to their Steam group (if any) without testing restrictions. + + + + Ignores group changing rules when true. + + + + Serverside send packet telling player about this invite + + + + + Called on server to finalize and remove quest. + + + + + Called by quest details UI to request server to abandon quest. + + + + + Called when there are no responses to choose, but server has indicated a next dialogue is available. + + + + + Called in singleplayer and on the server after client requests NPC dialogue. + + + + + Prevent re-creating it during destroy (e.g. plugin granting rewards) from leaking gameobject. + + + + + White 1x1 texture for solid colored images. + uGUI empty image draws like this, but we need the texture for IMGUI backwards compatibility. + + + + + Is the server this widget represents currently favorited? + Can be false on the favorites list. + + + + + Payload for the DamageTool.damagePlayer function. + + + + + Should armor worn on matching limb be factored in? + + + + + Should game mode config damage multiplier be factored in? + + + + + If player dies should it count towards quests? + + + + + Effect to apply to ragdoll if dead. + + + + + Read 8-bit per channel color excluding alpha. + + + + + Intended as a drop-in replacement for existing assets with property uint16s. + + + + + Is a point safely within the level bounds? + Also checks player clip volumes if legacy borders are disabled. + + + + + Is given Y (vertical) coordinate within level's height range? + Maps using landscapes have a larger range than older maps. + + + + + Notify menus that levels list has changed. + Used when creating/deleting levels, as well as following workshop changes. + + + + + Get level's cached asset, if any. + + + + + Should loading code proceed with redirects? + Disabled by level and when in the editor. + + + + + Placeholder created between unloading the main menu and loading into game or editor. + + + + + Loading screen music. + + + + + Clip to play to fade out loop. + + + + + Useful to narrow down why a player is getting kicked for modified level files when joining a server. + + + + + Display version string of the currently loaded level. + + + + + Version string of the currently loaded level packed into an integer. + + + + + Refreshes known levels and attempts to redirect level reference if it no longer exists. + + + + + Find level matching both name AND workshop file ID (can be zero). + + + + + Load level details from Level.dat in directory path. + + + + + Server list allows player to enter a map name when searching, so we try to find a local + copy of the level for version number comparison. (Server map version might differ.) + + + + + New map filter uses lowercase map name and doesn't need startswith. + + + + + Search all map folders to add any previously unregistered maps. + + + + + Temporary to unbind events because this class is static for now. (sigh) + + + + + Defines how instance methods handle invocation when the target instance does not exist yet, for example + if the target instance is async loading or has time sliced instantiation. + + + + + Invocation should be ignored if the target instance does not exist. + This is the only applicable defer mode for static methods and server methods. + + + + + Invocation will be queued up if the target instance does not exist. + Originally an "Overwrite" mode was considered for cases like SetHealth where only the newest value is + displayed, but this was potentially error-prone if multiple queued methods depended on values from each other. + + + + + Allows Unity events to execute commands from the server. + Messenger context is logged to help track down abusive assets. + + + + + Responsible for loading asset definitions on a separate thread. + + + + + Parser error messages, if any. + + + + + Warning: on worker thread this only acts as handle. Do not access. + + + + + Used on main thread to determine when all queued tasks have finished. + + + + + Loop searching directories recursively for asset bundle and asset definition files. + + + + + Warning: on worker thread this only acts as handle. Do not access. + + + + + Absolute path to *.log file. + + + + + Responsible for the per-process .log file in the Logs directory. + Kept multiple log files in the past, but now consolidates all information + into a single file named Client.log or Server_{Identifier}.log. + + + + + Should setup of the default *.log file be disabled? + + + + + If true, information like IP addresses and login tokens should be censored in vanilla logs. + Nelson 2024-11-11: Special thanks to Jdance and asineth0 in public issue #4740! + + + + + Text to replace with if is enabled. + + + + + *ATTEMPTS* to replace IPv4 address(es) with . + Should only be called if is enabled. + Case-by-case redaction should be preferred for performance reasons over using this function. This function + is intended for third-party messages (e.g., BattlEye) that we don't have control over. + + True if message was modified. + + + + Get logging to path. + + + + + Set path to log to. + + + + + Close current log file. + + + + + Invoked when door is opened/closed, but not when loaded. + + + + + Switches between "legacy" (per-level road textures bundle) and "assets" (using RoadAsset). + + + + + If modifying usage please update support article: + https://support.smartlydressedgames.com/hc/en-us/articles/13452208765716 + + + + + If modifying usage please update support article: + https://support.smartlydressedgames.com/hc/en-us/articles/13452208765716 + + + + + Client has a critical module the server doesn't. + + + + + Server has a critical module the client doesn't. + + + + + Level config's version number does not match. + + + + + EconInfo.json hash does not match. + + + + + Master bundle hashes do not match. + + + + + Server has not received an auth session response from Steam yet. + + + + + Server has not received an economy response from Steam yet. + + + + + Server has not received a groups response from Steam yet. + + + + + Player nickname exceeds limit. + + + + + Player nickname contains invalid characters. + + If modifying usage please update support article: + https://support.smartlydressedgames.com/hc/en-us/articles/13452208765716 + + + + + Player nickname should not be a number. + + + + + Player resources folders don't match. + + + + + The network identity in the ticket does not match the server authenticating the ticket. + This can happen if server's Steam ID has changed from what the client thinks it is. + For example, joining a stale entry in the server list. (public issue #4101) + + + + + Player's skin color is too similar to one of . + + + + + Steam ID reported by net transport doesn't match client's reported Steam ID. + This was exploited to fill the server queue with fake players. + + + + + Received too many connection requests from player in a short window. + + + + + Received too many invalid messages from connection in a short window. + + + + + Server limits how many clients are joining from the same IP address. + (public issue #5001) + + + + + Zero is treated as unset. + + + + + Returned asset is not necessarily a vehicle asset yet: It can also be a VehicleRedirectorAsset which the + vehicle spawner requires to properly set paint color. + + + + + Kept because lots of modders have been using this script in Unity, + so removing legacy effect id would break their content. + + + + + Matches level with same file name AND workshop file ID. + + + + + Version before named version constants were introduced. (2023-11-08) + + + + + Moved into ServerListFilters. + + + + + Exposed for plugins. Can be null. Please do not modify. + + + + + This overload supports legacy Condition_# format. + + + + + This overload doesn't support legacy Condition_# format. + + + + + If true, button tooltip will be overridden with tooltip from states array. + + + + + If true oxygen is restored while in this volume, otherwise if false oxygen is depleted. + + + + + Merges textures used in the level into an atlas to assist runtime draw call batching. + + + + + Skip renderer children of these transforms, if any. + For example we skip lights with material instances and rubble debris. + + + + + Most objects in Unturned use the standard shader without transparency/emissive/detail/etc. + + + + + Meshes we logged an explanation for as to why they can't be atlased. + + + + + Textures we logged an explanation for as to why they can't be atlased. + + + + + Materials we logged an explanation for as to why they can't be atlased. + + + + + Objects instantiated for the lifetime of the level that should be destroyed when exiting the level. + + + + + If true, don't assign texture atlas to material so batched materials are obvious. + + + + + If true, assign a red material to excluded meshes so they are obvious. + + + + + If true, replace each unique material with a colored one before static batching. + + + + + If true, log why texture/material can't be included in atlas. + + + + + If true, log if mesh has UVs outside [0, 1] range. + + + + + We generate a 1x1 texture for materials without one. + + + + + Tracks which mesh filters and skinned mesh renderers were referencing a given mesh. + + + + + Tracks which meshes and materials were referencing a given texture. + + + + + If true, UVs should be centered and overridden because original mesh was not textured. + + + + + Maps original mesh to any mesh filters using it. + When mesh's UVs are modified the mesh filters need to be pointed at the copied mesh. + + + + + Renderers with a material using the texture. + After combining texture the renderers need to be pointed at the combined material. + + + + + Tracks which textures were referencing a given shader. + + + + + StaticBatchingUtility.Combine requires input renderers are enabled and active in hierarchy, + so we temporarily activate/enable them to keep this logic out of LevelObject/ResourceSpawnpoint. + + + + + Payload for the DamageTool.damageAnimal function. + + + + + Should game mode config damage multiplier be factored in? + + + + + If not null and damage is applied, is called with this position. + + + + + Can be added to EquipablePrefab item GameObject to receive events. + + + + + Invoked when item begins inspect animation. + + + + + Entry in the MenuPlayServerCurationUI list. + + + + + In-game rich text does not support embedded YouTube videos, but they look great in the web browser, + so we simply remove them from the in-game text. + + + + + Unfortunately in-game rich text does not have code formatting yet, so remove the tags while preserving text. + + + + + Nelson 2025-01-28: This command reproduces a bug destroying the player gameObject if the vehicle is + destroyed on the same frame as the request to enter. + https://github.com/SmartlyDressedGames/Unturned-3.x-Community/issues/4760#issuecomment-2613090165 + + + + + Not using rate limit attribute because this is potentially called for hundreds of barricades at once, + and only admins will actually be allowed to apply the transform. + + + + + Only used by plugins. + + + + + See BarricadeRegion.FindBarricadeByRootFast comment. + + + + + For code which does not know whether transform exists and/or even is a barricade. + See BarricadeRegion.FindBarricadeByRootFast comment. + + + + + Does this label fade out as the chat message gets older? + + + + + Chat message values to show. + + + + + Tree activation is time-sliced, so this does not necessarily match whether the region is active. + + + + + Can this tree be damaged? + Allows holiday restrictions to be taken into account. (Otherwise holiday trees could be destroyed out of season.) + + + + + Some new code common to SteamPending and SteamPlayer. + + + + + Realtime the first ping request was received. + + + + + Number of ping requests the server has received from this client. + + + + + Called when a ping request is received from this client. + + + + + Realtime passed since the first ping request was received from this client. + + + + + Average number of ping requests received from this client per second. + Begins tracking 10 seconds after the first ping request was received, or -1 if average is unknown yet. + + + + + Only set on server. Associates player with their connection. + + + + + Used when kicking player in queue to log what backend system might be failing. + + + + + Number of alive zombies. + + + + + Last time a quest boss was spawned. + + + + + Allow another quest to spawn a boss zombie immediately. + + + + + Kills the boss zombie if nobody is around, if the boss was killed it calls UpdateBoss. + + + + + Checks for players in the area with quests and spawns boss zombies accordingly. + + + + + HUD with projected labels for teammates. + + + + + Allows map makers to create custom weather events. + + + + + Does this weather affect fog color and density? + + + + + Does this weather affect sky fog color? + + + + + Does this weather affect cloud colors? + + + + + Directional light shadow strength multiplier. + + + + + Exponent applied to effect blend alpha. + + + + + Exponent applied to effect blend alpha. + + + + + SpeedTree wind strength for blizzard. Should be removed? + + + + + If specified level editor color can be used rather than a per-asset color. + + + + + Remove any existing item alert widgets. + + + + + Open fullscreen alert showcasing newly granted items. + Uses first item for title color, so items should be sorted by priority. + + + + + Open fullscreen alert showcasing newly granted items. + + + + + Handle esc/back key press. + Still really messy, but this used to be inside a huge nested if/elseif in Update. + + + + + Despite being newer code, this is obviously not ideal. Previously the news request was using the Steam HTTP + API which might have been the cause of some crashes, so it was quickly converted to Unity web request instead. + + + + + Invoked when web item is first loaded or reloaded. + + + + + If false this structure cannot take damage. + + + + + Modded structures can disable pooling if they have custom incompatible logic. + + + + + Length of raycast downward from pivot to check floor is above terrain. + Vanilla floors can be placed a maximum of 10 meters above terrain. + + + + + Optional alternative structure prefab specifically for the client preview spawned. + + + + + Called on the dedicated server to optimize client prefab for server usage. + + + + + Compares weather intensity to value. + + + + + Called during startup and when returning to the main menu. + + + + + Result is never null, but may be empty or out-of-date. + + + + + Can be added to Vehicle GameObject to receive events. + + + + + Invoked when any player enters the driver seat. + + + + + Invoked when any player exits the driver seat. + + + + + Invoked when a locally controlled player enters the driver seat. + + + + + Invoked when a locally controlled player exits the driver seat. + + + + + Invoked when a locally controlled player enters the vehicle. + + + + + Invoked when a locally controlled player exits the vehicle. + + + + + Invoked when lock is engaged. + + + + + Invoked when lock is disengaged. + + + + + Invoked when horn is played. + + + + + Invoked after explosion plays. + + + + + Root transform. + + + + + Hit collider's transform. Can be null. + + + + + Tag display name without rich text formatting. To use, for example, in logging, sorting, or with rich color override. + + + + + If true, tag requests name to be displayed in UI with NameColor label color override. + + + + + Color to use in UI when displaying name. + + + + + If HasNameColor is enabled, this is PlainTextName wrapped with NameColor rich text color tags. + If unset, falls back to PlainTextName. + + Nelson 2025-05-02: initially, we allowed enabling any rich text tags in names. But, considering that we + are also using PlainTextName for other color overrides (e.g. "bad" when missing), this will be disappointing + if tags are displayed inconsistently. + + + + + If true, icon should be tinted according to player's foreground color preference. + + + + + Wrap PlainTextName with color rich text tag. + + + + + Wrap PlainTextName with player's font color preference. + + + + + If HasNameColor, get RichTextName. Otherwise, get PlainTextNameWithPreferredFontColor. + + + + + Get sleek color for UI. If HasNameColor, get NameColor. Otherwise, preferred font color. + + + + + Allows Unity events to modify which crafting tags are provided by owning object. + Must be connected to a Crafting Tag Provider. + + + + + GUIDs of Unturned tag assets to modify. + + + + + Add listed tags to provided tags. + + + + + Remove listed tags from provided tags. + + + + + Apply only if this component is active and enabled. + + + + + Apply only if this component is inactive and/or disabled. + + + + + Always apply. + + + + + Get wrapper method rather than Awake because component might be inactive but should still apply modifiers. + + + + + Used for item placement in displays / holsters, and whether useable can be placed in primary/secondary slot. + + + + + Cannot be placed in primary nor secondary slots, but can be equipped from bag. + + + + + Can be placed in primary slot, but cannot be equipped in secondary or bag. + + + + + Can be placed in primary or secondary slot, but cannot be equipped from bag. + + + + + Only used by NPCs. + + + + + Can be placed in primary, secondary, or equipped while in bag. + + + + + Project current field of view onto screen compared to desired field of view. + + + + + Multiply sensitivity according to scope/optic zoom. For example an 8x zoom has 1/8th sensitivity. + + + + + Preserve how sensitivity felt prior to 3.22.8.0 update. + + + + + Do not adjust sensitivity while aiming. + + + + + When held the cursor is released. + + + + + If held while clicking a blueprint action in the item context menu, the crafting menu is bypassed. + + + + + Replace instances of with their bound key text. + Allows server effects to display plugin hotkeys. + + + + + Item 0 is "1" and item 9 is "0" + + + + + Multiplier for Input.GetAxis("mouse_x") and Input.GetAxis("mouse_y") + + + + + When held the cursor is released. + + + + + If held while clicking a blueprint action in the item context menu, the crafting menu is bypassed. + + + + + Broadcasts once all workshop assets are finished installing. + + + + + Called once the server is done registering items it wants to install. + + True when running in offline-only mode. + + + + Request for details about the pending items. + + + + + File IDs of all the items we have enqueued for query. + + + + + Built from user-specified workshop item IDs, and then expanded as the query results + arrive with details about any dependent or child items. + + + + + File IDs requested by the latest query submitted. + + + + + Number of times we've tried re-submitted failed queries. + + + + + Built as the valid list of items arrive. + + + + + ID of the latest item we requested for download so that we can test if the callback is for us. + + + + + Enqueue an item if we have not queried it yet. This guards against querying an item + that is in two separate collections leading to duplicates. + + + + True if item was installed from cache. + + + + Used in offline-only mode. + + + + + Prepare a query that will request metadata for all the workshop items we want to install. + This allows us to check if the items are allowed to be auto-downloaded to this server, and to + detect any child or dependent items. + + Waits for onQueryCompleted. + + + + + Re-submit previous query after a query failure. + + + + + If level is using underground whitelist then conditionally clamp world-space position. + + + + + If level is using underground allowlist then conditionally clamp world-space position. + + + + + Used by animals and zombies to teleport to a spawnpoint if outside the map. + + + + + Used by housing validation to check item isn't placed underground. + + + + + Almost every menu has a container element for its contents which spans the entire screen. This element is then + animated into and out of view. In the IMGUI implementation this was fine because containers off-screen were not + processed, but with uGUI they were still considered active. To solve the uGUI performance overhead this class + was introduced to disable visibility after animating out of view. + + + + + Payload for the EffectManager.triggerEffect method. + + + + + Required effect to spawn. + + + + + World-space position to spawn at. + + + + + Local-space scale. Defaults to one. + + + + + If running as server should this effect be replicated to clients? + Defaults to true. Set to false for code that is called on client AND server. + + + + + Should the RPC be called in reliable mode? Unreliable effects might not be received. + + + + + Was a player directly responsible for triggering this effect? + For example grenade explosions are instigated by players, whereas zombie acid explosions are not. + Used to prevent mod damage on the effect prefab from hurting players on PvE servers. + + + + + Players within this radius will be sent the effect unless the effect overrides it. + Defaults to 128. + + + + + Get world-space rotation for the effect. + + + + + Set world-space rotation for the effect. + + + + + World-space rotation for the effect. + + + + + If true, rotation was specified by setter methods. + Required for backwards compatibility because `direction` field is public. + + + + + Only send the effect to the given player, if set. + + + + + Only send the effect to the given players, if set. + Otherwise relevantDistance is used. + + + + + Only send the effect to the given player, if set. + + + + + World-space direction to orient the Z axis along. Defaults to up. + + + + + Nelson 2025-04-08: newer code should probably use CachingAssetRef instead. (Or CachingLegacyAssetRef if legacy + ID support is necessary.) + + + + + Whether the asset has been assigned. Note that this doesn't mean an asset with exists. + + + + + Is this asset not assigned? + + + + + True if resolving this asset reference would get that asset. + + + + + Resolve reference with asset manager. + + + + + GUID of the asset this is referring to. + + + + + Each quality tier has different rarities. + Legendary: 5% Epic: 20% Rare: 75% + + + + + Each item has an equal chance regardless of quality. + + + + + Kept because lots of modders have been these scripts in Unity, + so removing legacy effect id would break their content. + Note: unsure about this one because it is private and not serialized. + + + + + Sorts higher rarity items into the front of the list. + + + + + Set handles pivot point according to selection transform. + Doesn't apply if handle is currently being dragged. + + + + + If Unturned is loading this asset bundle from a Steam workshop file but the file ID does not match then + loading will be canceled. Prevents the asset bundle from being easily copied/stolen. + + + + + Same as ownerWorkshopFileId for cases where the asset bundle is allowed in multiple uploads. + + Uploading the same asset bundle multiple times is not ideal because the game doesn't handle + multiple of them with the same name well, and Unity logs an error if an asset bundle with the + same files is already loaded. That being said, the game doesn't handle dependencies between + workshop files well either (as of 2023-01-12), so this is perhaps the lesser of two evils. + + My understanding is that some mod creators license their work to multiple servers that upload + the files and this property will make it easier so it doesn't need to be re-exported multiple times. + + + + + Helpers on the dedicated server to optimize client prefabs for server usage. + + + + + Optimize client prefab for server usage. + + + + + If true, object is within a culling volume. + Name is old and not very specific, but not changing because it's public. + + + + + Transform created to preserve objects whose assets failed to load. + Separate from default transform to avoid messing with old behavior when transform is null. + + + + + If true, can be instantiated. Defaults to true. + Enables mappers to remove culling volumes embedded in objects if they're causing issues. + + + + + Can this object's rubble be damaged? + Allows holiday restrictions to be taken into account. (Otherwise holiday presents could be destroyed out of season.) + + + + + Object activation is time-sliced, so this does not necessarily match whether the region is active. + + + + + Defaults to true because most objects are not inside a culling volume. + + + + + Used by InteractableObjectBinaryState to indicate whether it wants navGameObject to be active. It's only + active if both IOBS and Rubble want it active. + + + + + Used by InteractableObjectRubble to indicate whether it wants navGameObject to be active. It's only + active if both IOBS and Rubble want it active. + + + + + Used if the object asset has weather blend alpha conditions. + + + + + Used if the object asset has weather status conditions. + + + + + Callback when an individual quest flag changes for the local player. + Refreshes visibility conditions if the flag was relevant to this object. + + + + + Separate from UpdateActiveAndRenderersEnabled so graphics settings can call it. + + + + + Assume renderers default to enabled. + + + + + Combine two existing 20-byte hashes. + + + + + Utility to hash a stream of bytes over several frames. + + + + + [0, 1] percentage progress through the stream. + + + + + Advance 1MB further into the stream. + + True if there is more data, false if complete. + + + + Get the computed hash after processing stream. + + + + + If true, visible in chart and satellite UIs. + + + + + Multiplier for explosive projectile damage. + + + + + Multiplier for explosive projectile's blast radius. + + + + + Multiplier for explosive projectile's initial force. + + + + + Should amount be filled to capacity when detached? + + + + + Nelson 2024-10-18: Moved to a constant because clients need this value for footsteps and they don't have the + character controller component. + + + + + Jump speed = sqrt(2 * jump height * gravity) + Jump height = (jump speed ^ 2) / (2 * gravity) + With 7 speed and 9.81 * 3 gravity = apex height of 1.66496772 + + + + + Note: Only UpdateCharacterControllerEnabled should modify whether controller is enabled. + (turning off and back on is fine though) + + + + + Valid while isRadiated. + + + + + Set according to volume or level global asset fallback. + + + + + Was set to true during teleport, and restored to false during the next movement tick. + + Server pauses movement when this is set until next client update that matches, + in order to prevent rubberbanding following a teleport. + + + + + Used instead of actual position to avoid revealing admins in "vanish" mode. + + + + + Flag for plugins to allow maintenance access underneath the map. + + + + + Get seat (if any), otherwise null. + + + + + Serverside force player to exit vehicle regardless of safe exit points. + + True if player was seated in vehicle. + + + + Dedicated server simulate while input queue is empty. + + + + + Dedicated server simulate driving input. + + + + + Client and dedicated server simulate walking input. + + + + + In the future this can probably replace checkGround for locally simulated character? + (Unturned only started using OnControllerColliderHit on 2023-01-31) + + 2023-02-28: be careful with .gameObject property because it returns .collider.gameObject + which can cause a null reference exception. (public issue #3726) + + + + + Examine a store listing with description text. + + + + + Only visible when cart is not empty. + + + + + Convert 32-bit version into 8-char string. + String is advertised on server list for clients to filter their local map version. + + + + + Parse 32-bit version from 8-char string. + String is advertised on server list for clients to filter their local map version. + + + + + These server relay variables redirect the client to another server when the menu opens + similar to how Steam sets the +connect string on game startup. Allows plugin to redirect + player to another server on the same network. + + + + If true the server is immediately joined, otherwise show server details beforehand. + + + + If player gets too far away from this storage while using it, should we close out? + False by default for trunk storage because player is inside vehicle. + Plugins needed to be able to set this to false for "virtual storage" plugins, + so we default to false and set to true if asset enables it. + + + + + Keep all the uGUI Canvas sort orders in the same place. + + + + + Manually created canvas in the Menu scene. + + + + + Devkit canvas in the Setup scene. + + + + + Dropdowns, drag-drop content, tab destinations, etc. + + + + + Devkit tooltips should be visible over all other devkit content. + + + + + uGUI glazier contains tooltips and cursor regardless of mode (e.g. devkit), so takes absolute priority. + + + + + Plugins were spawning canvases with high sort orders that showed over the loading screen, so as a hacky + workaround we put the uGUI loading screen on a higher sort order than normal glazier. + + + + + uGUI cursor needs to show above plugin canvas. + Unity exposes sort order as an int32, but it is actually an int16, so this value is slightly below the 32767 max. + + + + + Worst case scenario, maybe shotgun hit or fast spray SMG. + + + + + Tags how client expects server to use a raycast input. + For example, client may think they fired a gun while server thinks they dequipped the gun, + so tagging the input prevents the server from handling it as a punch instead. + + + + + Resulting transform.position immediately after movement.simulate was called. + + + + + Calls to UseableGun.tock per second. + + + + + Called for every input packet received allowing plugins to listen for a few special + keys they can display in chat/effect UIs. + + + + + Whether client is currently penalized for potentially using a lag switch. False positives are relatively + likely when client framerate hitches (e.g. loading dense region), so we only modify their stats (e.g. reduce + player damage) for a corresponding duration. + + + + + Server tracks history of this player's bounding box to assist with validating hits. + Some padding is added to reduce false positives sliding against walls (substep) and + player movement inside vehicles. + + + + + Get the hit result of a raycast on the server. Until a generic way to address net objects is implemented + this is how legacy features specify which player/animal/zombie/vehicle/etc they want to interact with. + + + + + Ideally simulation frame number would be signed, but there is a lot of code expecting unsigned. + + + + + Can be enabled in the unity inspector to test that discarding inputs recovers properly. + + + + + askInput is always called the same number of times per second because it's run from FixedUpdate, + but the spacing between calls can vary depending on network and whether client FPS is low. + + + + + If average askInput calls per second exceeds this, we either ignore their request or flat-out kick them. + + + + + If average askInput calls per second exceeds this we silently kick them. + + + + + Number of times askInput has been called by client. + Even with huge packet loss, we know that + + + + + Realtime that the first call to askInput was made by the client. + + + + + Realtime that the previous askInput kick test was performed. + + + + + Set rollingWindowIndex to newIndex, zeroing all input counts along the way. + Important to zero the intermediary indexes in-case server stalled for more than one second. + + + + + Notify client there has been a prediction error, so movement needs to be re-simulated. + + + + + Notify client old inputs can be discarded because they were predicted correctly. + + + + + Not using rate limit attribute because it internally keeps a rolling window limit. + + + + + Only bound on dedicated server. + When dieing in a vehicle this prevents delay handling packets. + + + + + Counter of simulation frames before fake lag penalty is disabled. + + + + + Player damage multiplier while under penalty for fake lag. (10%) + + + + + If set, this item is prioritized over equipped cosmetics. Used by item inspect menu. + Admittedly, this is very hacked-together. Hopefully rewriting this file someday? + + + + + Is cosmetic or skin equipped? + + + + + Merging the devkit, legacy, and housing transform handles into one place. + + + + + Position and plane handles for each axis. + + + + + Disc handles for each axis. + + + + + Scale handles for each axis. + + + + + Position handles on each side of box. + + + + + Scale handles on each side of box which both move and resize the box. + + + + + Invoked when handle is clicked so that tool can save selection transform relative to pivot. + This avoids floating point precision loss of applying delta for each Transformed event. + + + + + Invoked when handle is dragged and value actually changes. + + + + + Invoked when handle is dragged and value actually changes. + + + + + Preferred mode only takes effect while not dragging. + Bounds modes fall back to non-bounds modes if bounds are not set. + + + + + Pivot only takes effect while not dragging. This is to help ensure + the caller does not depend on the internal pivot values. + + + + + Somewhat hacky, useful to make the "copy-paste transform" feature easier to implement. + Invoke tranformed callback as if pivot were manually dragged to the new position and rotation. + + + + + Called before raycasting into the regular physics scene to give transform tool priority. + + + + + Update properties that depend on the transform of the camera relative to our handles. + + + + + Center of handle. + + + + + Rotation of handle. + + + + + True if pivotBounds is non-zero. + + + + + Mouse currently over this handle. + + + + + Mouse currently dragging this handle. + + + + + Direction from camera toward pivot. + + + + + Multiplier according to distance between camera and pivot to keep handles a constant on-screen size. + + + + + Multiplier to flip axis handles according to which side the camera is on. + + + + + Pivot rotation when rotation drag started. + + + + + Rotating around this axis. + + + + + Direction from circle center to edge point. + + + + + Point on the edge of the circle. + + + + + Drag along this tangent to the circle. + + + + + Does having this item show the compass? + + + + + Does having this item show the chart? + + + + + Does having this item show the satellite? + + + + + Ideally component Awake/Start order should not matter, but Unturned's menu is a mess. + For most players the default order was fine, but it seems it was not deterministic so it would break for some players. + + + + + Index into per-connection rate limiting array. + + + + + Number of server methods with rate limits. + + + + + Log all known net methods. + + + + + Useful debug check to ensure every built-in handle is claimed exactly once. + + + + + This class gets used from type initializers, so Unity's built-in log is not an option unfortunately. + + + + + Not *really* supported but *might* probably work. Adding for public discussion #4176. + + + + + Kept for backwards compatibility with plugins. + + + + + Can be added to EquipablePrefab item GameObject to receive events. + + + + + Invoked when gun is fired. + + + + + Invoked when gun begins reload sequence. + + + + + Invoked when gun begins hammer sequence. + + + + + Invoked when gun begins aiming. + + + + + Invoked when gun ends aiming. + + + + + Invoked when Magazine game object is activated. + + + + + Invoked when Magazine game object is activated. + + + + + TextMesh Pro uGUI text components. + + + + + TextMesh Pro uGUI input field components. + + + + + Exposed for Rocket transition to modules backwards compatibility. + + + + + This effect makes a nice clicky sound and lots of older code used it, + so I moved it into a little helper method here. + + + + If true, client will download the image once and re-use it for subsequent calls. + If true, client will destroy any cached copy of the image and re-acquire it. + + + + Notify server that a button was clicked in a clientside effect. + + + + + Notify server that an input field text was committed. + + + + + If an effect with a given key exists, destroy it. + + + + + parent should only be set if that system also calls ClearAttachments, otherwise attachedEffects will leak memory. + + + + + Helper for sending and spawning effects. + Newer and refactored code should use this method. + + + + + Objects registered so that they can be destroyed all at once if needed. + May be null if they were destroyed with a timer. + + + + + Plugin UIs spawned by the server. + + + + + Called prior to destroying effect (if attached) to free up attachments list. + + + + + Called after attaching effect so that it can be returned to pool when/if parent is destroyed. + + + + + Maps root transform to any attached effects. + This allows us to detach effects when returning a barricade/structure to their pool. + + + + + Recycled lists for attachedEffects dictionary. + + + + + Find materials in finished ragdoll and replace them with the appropriate effect. + + + + + Context for the Assets.ReportError methods. + Nelson 2024-11-20: Converted from directly using asset to this interface so that asset-related features can + more easily log warnings to the in-game menu. + + + + + Format text to prefix any errors reported in this context. (e.g., this asset's name and ID) + + + + + Alerts any agents in the area to the player if needed. + + The player causing this alert. + The position of the alert. + The detection radius. + Whether or not to hide. + + + + Alerts any agents in the area. + + The position of the alert. + The detection radius. + + + + Report success or failure from game systems, conditionally compiled into the Windows 64-bit build. + + + + + Call when the server is done all loading without running into errors. + Ignored if not running in CI mode, otherwise exits the server successfully with error code 0. + + + + + Call when the server encounters any error. + Ignored if not running in CI mode, otherwise exits the server with error code 1. + + + + + Entry in the MenuPlayServerCurationRulesUI list. + + + + + Seconds to wait between burning one unit of fuel. + + + + + Number of seconds to finish growing. + + + + + Item legacy ID to grant the player. + + + + + Uses unscaled time (realtime) because "planted" time is a timestamp. + + + + + Created when a chat entry is received from the server for display in the UI. + + + + + Player who sent the message, or null if it was a plugin broadcast. + Used to retrieve player avatar. + + + + + Web address of a 32x32 .png to use rather than a platform avatar. + Only used if not null/empty. + + + + + How the message was sent through global, local or group. + Mostly deprecated because that status isn't formatted into texts anymore. + + + + + Default font color to use unless overridden by rich text formatting. + + + + + Whether this entry should enable rich text formatting. + False by default because players abuse font size and ugly colors. + + + + + Text to display for this message. + + + + + When the entry was locally received from the server. + + + + + How many seconds ago this message was locally received from the server. + + + + + Event for plugins to be notified when a server update is detected. + + Pandahut requested this because they run the game as a Windows service and need to shutdown + through their central management system rather than per-process. + + + + + Manages scheduled restart for dedicated server. + + + + + Sorted from low to high. + + + + + Sorted from low to high. + + + + + Non-NPC object the player can talk with. + + + + + Broadcasts for plugins before applying consumeable stats to another player. + + + + + Broadcasts for plugins after applying consumeable stats to another player. + + + + + Broadcasts for plugins before applying consumeable stats to self. + + + + + Broadcasts for plugins after applying consumeable stats to self. + + + + + Called serverside when using consumeable on another player. + + + + + Called by owner and server when using consumeable on self. + + + + + If false, a deny rule matched the input. + + + + + If true, at least one rule matched the input. + + + + + If set, this was the final match. + + + + + Optional. If set, filled with any rules that matched. + + + + + If >0, this link was added by live config. + + + + + Determines how a server that doesn't match any rules is handled. + + + + + Include in the list. Default. + + + + + Exclude from list. (same as EServerListCurationDenyMode.Hide) + + + + + Move to the bottom of the list. Similar to EServerListCurationDenyMode.MoveToBottom, but the server is + still clickable. I.e., low priority. + + + + + Called earlier during startup to try and have web lists ready by the time server browser is opened. + + + + + Used to detect asset refresh. + + + + + If true, list needs to be sorted. + + + + + If true, MergeRules should be called before doing any filtering. + + + + + If false, LoadWebUrls still needs to be called. + + + + + For non-repeat weapons the "Use" audio clip is played once time reaches this point. + + + + + Catch exceptions to prevent a broken powerable from breaking all the other powerable items in the area. + + + + + Unsorted list of world space generators turned-on and fueled. + + + + + Allows Unity events to broadcast text chat messages from the server. + + + + + Text to use when SendDefaultTextChatMessage is invoked. + + + + + URL of a png or jpg image file to show next to the message. + + + + + Text color when rich text does not override with color tags. + + + + + Should rich text tags be parsed? + e.g. bold, italic, color + + + + + Allows Unity events to spawn vehicles. + + + + + Recoil magnitude multiplier while the gun is aiming down sights. + + + + + Multiplier for gun's Aim_In_Duration. + + + + + For backwards compatibility this is *subtracted* from the gun's firerate, so a positive number decreases + the time between shots and a negative number increases the time between shots. + + + + + Multiplier for normal bullet damage. + + + + + Multiplier for bullet acceleration due to gravity. + + + + + Movement speed multiplier while the gun is aiming down sights. + + + + + If true, gun can damage entities with Invulnerable tag. Defaults to false. + + + + + Name to use when instantiating attachment prefab. + By default the asset guid is used, but it can be overridden because some + modders rely on the name for Unity's legacy animation component. For example + in Toothy Deerryte's case there were a lot of duplicate animations to work + around the guid naming, simplified by overriding name. + + + + + Returns true if calibers list contains provided caliber ID. + + + + + Returns true if calibers list contains any of the provided caliber IDs. + + + + + Note: If barricade is attached to a vehicle this is the local rotation. + + + + + Extensions to the built-in Physics class. + + Shares similar functionality to the SDG.Framework.Utilities.PhysicsUtility class, but that should be moved here + because the "framework" is unused and and the long name is annoying. + + + + + Wrapper that respects landscape hole volumes. + + + + + Wrapper that respects landscape hole volumes. + + + + + Wrapper that respects landscape hole volumes. + + + + + Wrapper that respects landscape hole volumes. + + + + + Button in a list of levels. + + + + + Button in the list of levels for server browser filters. + + + + + Button in the list of levels for the map editor. + + + + + Base class for IMGUI implementations of primitive building block widgets. + + + + + Position passed into the GUI draw methods. + + + + + Hashes for Windows, Linux, and Mac asset bundles. + Only loaded on the dedicated server. Null otherwise. + + + + + Does given hash match any of the platform hashes? + + + + + Compares client asset bundle hash with server known hashes. + + + + + Called by asset startup to cache which bundles are eligible for hashing. + + + + + Used in a test scene to quickly test all Glazier features. + + + + + Reference type for testing SleekList. + + + + + Uses the Win32 API to force a console to be created and destroyed. + + + + + Should we manually create and destroy a Win32 console? + Useful for IO on Windows desktop, but not as much for dedicated machines. + + + + + Allocate Windows console if enabled. + + + + + Free Windows console if enabled. + + + + + A CTRL+C signal was received, either from keyboard input or from a signal generated by the GenerateConsoleCtrlEvent function. + + + + + A CTRL+BREAK signal was received, either from keyboard input or from a signal generated by GenerateConsoleCtrlEvent. + + + + + A signal that the system sends to all processes attached to a console when the user closes the console + (either by clicking Close on the console window's window menu, or by clicking the End Task button command from Task Manager). + + + + + Tracks whether we should show the "NEW" label on listings and item store button. + + + + + Track that player has seen the new crafting blueprints. + + + + + Track that player has seen the page with all new listings. + + + + + Has player seen the given listing? + + + + + Track that the player has seen the given listing. + + + + + Absolute path to directory containing bundle and .dat file. + + + + + Name of the actual asset bundle file, e.g. Hawaii.unity3d + Asset bundle should be next to this config file. + + + + + assetBundleName without final .* extension. + + + + + Prefixed to all asset paths loaded from asset bundle. + Final path is built from assetPrefix + pathRelativeToBundlesFolder + assetName, + e.g. Assets/Hawaii/Bundles + /Objects/Large/House/ + Object.prefab + + + + + Custom asset bundle version used by Unturned to detect whether imports need + fixing up because they were exported from an older version of Unity. + + + + + Get absolute path to asset bundle file. + + + + + Get absolute path to file with per-platform hashes. + + + + + Insert path prefix if set. + + + + + When to use this instead of formatAssetPath? MasterBundleReference and AudioReference repeatedly invoke + this string formatting (e.g., footstep sounds) and benefit from not generating that garbage. + + + + + Loaded asset bundle. + + + + + Hash of loaded asset bundle file. + This is per-platform, so the server loads a hash file with all platform hashes. + + + + + True if the server .hash file exists. + Hash file is not used by client, but client uses whether it exists to decide whether to include asset bundle hash in asset hash. + + + + + Hashes for Windows, Linux, and Mac asset bundles. + Only loaded on the dedicated server. Null otherwise. + + + + + On the surface level this is rather silly. + The primary reason for it is reducing garbage created by repeated calls to formatAssetPath. + Theoretically we could use this for caching redirected paths if/when that feature is added. + + + + + Load the underlying asset bundle. + + + + + If true, the associated asset bundle couldn't be loaded and was instead copied from another config. + + + + + If the type name has been redirected this method will be called recursively until the most recent name is found and returned. + + + + + After the key "limit" is loaded we stop reading. + + + + + Path to the folder which contains the Unity player executable. + + + + + Called by loading after landscapes (and legacy conversion) have been loaded. + + + + + True is solid and false is empty. + + + + + 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. + + + + + If true, SetHeightsDelayLOD was called without calling SyncHeightmap yet. + + + + + If true, SetHolesDelayLOD was called without calling SyncTexture yet. + + + + + Heightmap-only data used in level editor. Refer to Landscape.DisableHoleColliders for explanation. + + + + + Call this when done changing material references to grab their textures and pass them to the terrain renderer. + + + + + If a heightmap coordinate is out of bounds the tile/heightamp coordinate will be adjusted so that it is in bounds again. + + + + + If a splatmap coordinate is out of bounds the tile/splatmap coordinate will be adjusted so that it is in bounds again. + + + + + 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. + + + + + 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. + + + + Appends heightmap vertices to points list. + + + + + Appends heightmap vertices to points list. + + + + + Call this after you're done adding new tiles. + + + + + Call this to sync a new tile up with nearby tiles. + + + + + Capturing ortho view of map, so we raise the terrain to max quality. + + + + + Finished capturing ortho view of map, so we restore the terrain to preferred quality. + + + + + 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.) + + + + + Directly blend current value toward target value. + + + + + Only blend current value toward target value if current is greater than target. + + + + + Only blend current value toward target value if current is less than target. + + + + + If true, write to LevelHierarchy file. + False for externally managed objects like legacy lighting WaterVolume. + + + + + If true, editor tools can select and transform. + False for items like the object-owned culling volumes. + + + + + Hold onto collider and gameobject separately because collider isn't necessarily attached to gameobject. + + + + + Kept because lots of modders have been using this script in Unity, + so removing legacy effect id would break their content. + + + + + If per-weather mask AND is non zero the weather will blend in. + + + + + Distinguishes from zero falloff which may be useful deep in a cave. + + + + + Higher priority volumes override lower priority volumes. + + + + + When falloff is OFF, how long to fade in audio by time. + + + + + When falloff is OFF, how long to fade out audio by time. + + + + + When falloff is OFF, how long to fade in audio by time. + + + + + When falloff is OFF, how long to fade out audio by time. + + + + + When falloff is OFF, how long to fade in lighting by time. + + + + + When falloff is OFF, how long to fade out lighting by time. + + + + + Used by lighting to get the currently active effect. + + + + + Open a new transaction group which stores multiple undo/redoable actions, for example this would be called before moving an object. + + + + + Close the pending transaction and finalize any change checks. + + + + + Clear the undo/redo queues. + + + + + If false this transaction is ignored. If there were no changes at all in the group it's discarded. + + + + + Called when history buffer is too long so this transaction is discarded. + + + + + 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. + + + + + Kept because lots of modders have been using this script in Unity, + so removing legacy effect id would break their content. + + + + + Called when we position, rotate or scale this transform. + + + + Identical to this object. + + + + Devkit objects are now converted to regular objects and excluded from the file when re-saving. + + + + + Hacked to check horizontal distance. + + + + + 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) + + + + + If true, vehicles overlapping volume will check conditions and (if met) grant rewards to passengers. + + + + + ModuleHook looks for module entry/exit points, then calls when enabled and when disabled. + + + + + Register components of this module. + + + + + Cleanup after this module. + + + + + Holds module configuration. + + + + + Whether to load assemblies. + + + + + Directory containing Module file, set when loading. + + + + + Path to the Module file, set when loading. + + + + + Used for module dependencies. + + + + + Nicely formatted version, converted into . + + + + + Used for module dependencies. + + + + + Modules that must be loaded before this module. + + + + + Relative file paths of .dlls to load. + + + + + Wraps module assembly and handles initialization. + + + + + True when config is enabled and dependencies are enabled. + + + + + Metadata. + + + + + Assembly files loaded. + + + + + Types in the assemblies of this module. Refer to this for types rather than the assemblies to avoid exception and garbage. + + + + + How far along the initialization to shutdown lifecycle this module is. + + + + + Runs before everything else to find and load modules. + + + + + Temporarily contains Unturned's code untils it's moved into modules. + + + + + Temporarily contains types. + + + + + Should module assemblies be loaded? + + + + + Called once after all startup enabled modules are loaded. Not called when modules are initialized due to enabling/disabling. + + + + + Called once after all modules are shutdown. Not called when modules are shutdown due to enabling/disabling. + + + + + Find modules containing an assembly with the Both_Required role. + + Modules to append to. + + + + Find module using dependency name. + + + + + + These are *.dll files discovered in the modules folder. + + + + + Should missing DLLs be logged? + Opt-in because RocketMod has its own handler. + + + + + Should vanilla search for *.dll files? + Can be turned off in case it conflicts with third-party search mechanism. + + + + + If set, search for .dll and .module files in this directory instead of in Unturned/Modules. + + + + + Event for plugin frameworks (e.g., Rocket) to override AssemblyResolve handling. + + + + + Depending on the platform, assemblies are found in different directories. + + Root folder for modules. + + + + Search Modules directory for .dll files and save their AssemblyName to discoveredNameToPath. + + + + + Search Modules directory for .module files and load them. + + + + + Orders configs by dependency and removes those that are missing files. + + + + + Sorts modules by dependencies. + + + + + Nicely formatted version, converted into . + + + + + Used for module dependencies. + + + + + Requested by Trojaner. LoadFile locks the file while in use which prevents OpenMod from updating itself. + + + + + Equivalent to MonoBehaviour.Update + + + + + Equivalent to MonoBehaviour.FixedUpdate + + + + + 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. + + + + + Stop a coroutine started by InvokeAfterDelay. + + + + + For use with PoolablePool when no special construction is required. + + + + + Called when this instance is getting claimed. + + + + + Called when this instance is returned to the pool. + + + + + Number of items in underlying queue. + + + + + Pool of objects that implement the IPoolable interface. + + Useful for types that do not need special construction, + and want notification when claimed and released. + + + + + Not necessarily cheap to calculate - probably best to cache. + + + + + Internal cubic meter volume. + + + + + Surface square meters area. + + + + + 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. + + + + + 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. + + + + + Entry point for worker thread loop. + + + + + Order is important because TileBecameRelevant is called from the closest tile outward. + + + + + Offsets into blob for per-tile data. + + + + + Tiles save an index into this list rather than guid. + + + + + Offset from header data. + + + + + Data-only FoliageInstanceList shared between threads. + + + + + Data-only FoliageTile shared between threads. + + + + + Ready to be released to the worker thread during the next lock. + + + + + Mutex lock. Only used in the main thread Update loop and worker thread loop. + + + + + 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. + + + + + SHARED BY BOTH THREADS! + Tiles read by worker thread ready to be copied into actual foliage tiles on main thread. + + + + + 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. + + + + + 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. + + + + + Does this tile contain any placed foliage? + + + + + If true, mesh is not loaded when clutter is turned off in graphics menu. + Defaults to false. + + + + + Foliage to use during the Christmas event instead. + + + + + Foliage to use during the Halloween event instead. + + + + + Get asset ref to replace this one for holiday, invalid to disable, or null if it should not be redirected. + + + + + Responsible for reading and writing persistent foliage data. + + + + + Called after creating instance for level, prior to any loading. + Not called when creating the auto-upgrade instance for editorSaveAllTiles. + + + + + Called prior to destroying instance. + + + + + Called when tile wants to be drawn. + + + + + Called when tile no longer wants to be drawn. + + + + + Called during Unity's Update loop. + + + + + Load known tiles during level load. + + + + + Save tiles during level save. + + + + 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. + + + + 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. + + + + + Legacy implementation of foliage storage, with one file per tile. + + + + True if other IFoliageSurface methods can be called. + + + + Settings configured when starting the bake. + + + + + Implementation of tile data storage. + + + + + 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. + + + + + 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] + + + + + + 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. + + + + Must be within [0, MAX_MATRICES_PER_BATCH] range. + + + + Version number associated with this particular system instance. + + + + + Automatically placing foliage onto tiles in editor. + + + + + 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. + + + + + Whether add can be called from the inspector. + + + + + Whether remove can be called from the inspector. + + + + + Called when the inspector adds an element. + + + + + Called when the inspector removes an element. + + + + + Called when the inspector sets an element to a different value. + + + + + Whether add can be called from the inspector. + + + + + Whether remove can be called from the inspector. + + + + + All water tiles and the planar reflection component reference this material. + + + + + If true rain will be occluded below the surface on the Y axis. + + + + + Flag for legacy sea level. + + + + + Water volume marked as being sea level. + + + + Null if under old water level, otherwise the volume. + + + + Find the water elevation underneath point, or above point if underwater. + + + + + Reads data into the data array. + + The file path to read from. + The array to read into. + Whether the read succesfully executed. + + + + Writes data out of data array. + + The file path to write to. + The array to write from. + The length of the array with data. + Whether the write succesfully executed. + + + + Checks the size of a file. + + The file path to check. + The size of the file. + Whether the check succesfully executed. + + + + Checks whether the path already exists. + + The file path to check. + Whether the file exists. + Whether the check succesfully executed. + + + + Deletes the path. + + The file path to delete. + Whether the deletion succesfully executed. + + + + For once the provider interface actually came in useful! + Fakes loading the Steam remote storage files from a separate folder. + + + + + Triggered when the user's statistics are available. + + + + + Checks the current user's statistics with this name. + + The name of the statistic. + The value of the statistic. + Whether the check succesfully executed. + + + + Assigns the current user's statistics with this name. + + The name of the statistic. + The value of the statistic. + Whether the check succesfully executed. + + + + Checks the current user's statistics with this name. + + The name of the statistic. + The value of the statistic. + Whether the check succesfully executed. + + + + Assigns the current user's statistics with this name. + + The name of the statistic. + The value of the statistic. + Whether the check succesfully executed. + + + + Requests the user's statistics. + + Whether the refresh succesfully executed. + + + + Triggered when the global statistics are available. + + + + + Checks the global total of the statistic with this name. + + The name of the statistic. + The value of the statistic. + Whether the check succesfully executed. + + + + Checks the global total of the statistic with this name. + + The name of the statistic. + The value of the statistic. + Whether the check succesfully executed. + + + + Requests the global statistics. + + Whether the refresh succesfully executed. + + + + Current user statistics implementation. + + + + + Current global statistics implementation. + + + + + Current client multiplayer implementation. + + + + + Current server multiplayer implementation. + + + + + Information about currently connected server. + + + + + Whether a server is currently connected to. + + + + + Whether connection attempts are being made. + + + + + Network buffer memory stream. + + + + + Network buffer memory stream reader. + + + + + Network buffer memory stream writer. + + + + + Connect to a server. + + Server to join. + + + + Disconnect from current server. + + + + + Receive a packet from an entity across the network. + + Sender of data. + + + Whether any data was read. + + + + Send a packet to an entity across the network. + + Recipient of data. + Packet to send. + Size of data in array. + + + + Send a packet to an entity across the network. + + Recipient of data. + Packet to send. + Size of data in array. + Type of send to use. + + + + Information about currently hosted server. + + + + + Whether a server is open. + + + + + Network buffer memory stream. + + + + + Network buffer memory stream reader. + + + + + Network buffer memory stream writer. + + + + + Open a new server. + + + + + Close an existing server. + + + + + Receive a packet from an entity across the network. + + Sender of data. + + + Whether any data was read. + + + + Send a packet to an entity across the network. + + Recipient of data. + Packet to send. + Size of data in array. + + + + Send a packet to an entity across the network. + + Recipient of data. + Packet to send. + Size of data in array. + Type of send to use. + + + + Whether the user has their overlay enabled. + + + + + Requests the user's inventory. + + Called when the request is completed. + Handle for checking the owner of the callback. + + + + Requests a check for promotional items. + + Called when the request is completed. + Handle for checking the owner of the callback. + + + + Converts the input items into the output items. + + Items to be converted from. + Item amounts to be consumed. + Items to be converted to. + Item amounts to be generated. + Called when the exchange is completed. + + + + Whether the user has their overlay enabled. + + + + + View a package on the store. + + Package to view. + + + + Checks whether the current user has an achievement with this name. + + The name of the achievement. + Whether the user has this achievement. + Whether the check succesfully executed. + + + + Assigns the current user an achievement with this name. + + The name of the achievement. + Whether the assignment succesfully executed. + + + + Whether the user has their overlay enabled. + + + + + Initialize this service's external API. Should be called before using. + + + + + Update this service's external API. Should be called every frame. + + + + + Shutdown this service's external API. Should be called before closing the program. + + + + + Used to show a warning when a lot of servers are blocked by curation list. + + + + + Reset after starting connection attempt, so set to true afterwards to auto join the server. + + + + + EItemType + + + + + Nelson 2024-12-06: This was added 2023-06-19, so unfortunately it will be inaccurate for older items. + + + + + This enum exists for sorting items based on rarity, and is derived from quality. + Quality order cannot be changed due to loading from older files, but this one is ordered + from lowest rarity to highest rarity and should match entries in quality. + + + + + Response data from IInventoryService GetInventory web API. + + One player's inventory became so large that the Steam client's built-in GetInventory fails, + so as temporary fix we can send them a json file with their inventory. + + + + + Json string representation of the contained items. + + + + + Parse response from json file. + + + + + Details of a workshop item that the game may want to refer to later. + Cached during client startup after getting installed items, and while + downloading UGC for the dedicated server. + + + + + Banned workshop files are shown in red. + + + + + Used on dedicated server to test whether map has been updated, and whether local copy of file is out-of-date. + + + + + Some workshop thieves use an empty title, in which case we show the file ID as title text. + + + + + Used when transitioning Unity versions breaks asset bundles. Replaced by AssetBundleVersion const values. + + + + + Workshop item key-value tag storing the version number. + + + + + Maps published file id to name, version, etc. + + + + + Get compatibility version from workshop query, or zero if unset. + + + + + Save the details from a workshop query for lookup later. + Allows game to inspect the installed files before deciding if they are + compatible, since maps and localization are not affected by unity upgrades. + Previously the compatibility test occurred before downloading the content. + + + + + Get cached workshop item details. + + + + + Should caller skip loading a given workshop file? + + Used to skip workshop version of map if the map is locally installed, + e.g. Canyon Arena moved to workshop and auto-subscribed. + + + + + Helper for downloadServerItems. + Called for each workshop item we want to download for the server. + + + + + Called once we know which items the server is allowed to use (queryServerItems), + or the query has failed in which case we proceed with all items it told us. + + + + + Is currently connected server allowed to auto-download the workshop item? + Requested by mod authors so that they can whitelist/blacklist access. + + + + + Successfully queried details of the items current server is using. + Ensure server has permission to use these items, then proceed with downloading. + Also caches item titles for use on the loading screen. + + + + + IO or bad result occurred when querying items the current server is using. + We do not know the file details, but we proceed with downloading them all. + + + + + File IDs the client knows the server is using. Fallback in-case the query fails. + + + + + IP of the currently connected server, or zero if unable to retrieve from network system. + Used for testing download restrictions. + + + + + Number of items currently connected server was not authorized to download. + + + + + Called prior to downloading, and after a connection failure. + + + + + Client now knows the published file IDs the server is using, but + queries the workshop for additional information before installing. + + + + + Callback when player subscribes to an item and it finishes downloading. + Different than the game-managed DownloadItem calls. + + + + + Get path to an already-installed workshop item. + + True if the path was found. + + + + Used during startup to register subscribed workshop items. + Given a workshop item file id, if its files exist on disk then register it. + + + + + Workshop file ids we were locally subscribed to during startup. + These items are queried for compatibility before registering. + + + + + Called when subscribed items callback was successful to register all compatible files. + + + + + Called when subscribed items callback did not execute as expected, + maybe because steam's servers are offline. In this case we can't check + compatibility so we register all the locally subscribed items as compatible. + + + + + Register any localization-type workshop content before waiting for the steam callbacks. + Important so that localizations are available for loading screens and whatnot during startup. + Any items we register now will be skipped later. + + + + + If specified, player's workshop file subscriptions are not registered at startup. + + + + + Map of subscriptions added/removed by the player through the in-game client API, as opposed to the web browser. + + + + + Called by us when we subscribe to an item from in-game. + If item already exists on-disk steam doesn't always call onItemInstalled, so we do our own check and potentially load. + + + + + Current achievements implementation. + + + + + Current browser implementation. + + + + + Current cloud implementation. + + + + + Current community implementation. + + + + + Current economy implementation. + + + + + Current matchmaking implementation. + + + + + Current multiplayer implementation. + + + + + Current statistics implementation. + + + + + Current store implementation. + + + + + Current translation implementation. + + + + + Current workshop implementation. + + + + + Initialize this provider's external API. Should be called before using provider features. + + Thrown if initializing fails. + + + + Update this provider's external API. Should be called every frame if using provider features. + + + + + Shutdown this provider's external API. Should be called before closing the program if using provider features. + + + + + Parse dynamic tag mythic effect. + + ID of mythical asset, or zero if not in tags. + + + + For purchasable box and bundle itemdefs this maps their itemdefid to the list of itemdefids in their desc. + + + + + Invoked after a successful exchange with the newly granted items. + + + + + Invoke after a succesful purchase from the item store. + + + + + Purchase result does not have a handle, so we guess based on when it arrives. + + + + + Find the first instanceId of a given itemDefId. + + + + + Count quantity of a given itemDefId. + + + + + Find certain quantity of given itemDefId. + + + + + Does itemdefid exist in the EconInfo.json file? + + + + + Get item with an exchange recipe for the appropriate number of scraps. + + + + + Get list of itemdefids mentioned in purchasable box or bundle item description. + + + + + One player's inventory became so large that the Steam client's built-in GetInventory fails, + so as temporary fix we can send them a json file with their inventory. + + + + + Add an item locally that we know exists in the online inventory, but is just a matter of waiting for it. + + + + + Remove an item locally that we know no longer exists in the online inventory. + + + + + Update our local version of an item that we know has changed, but we are waiting for a full refresh. + + + + + Callback when client knows which items were crafted or exchanged. + + + + + Callback when client thinks result was from purchase. + + + + + 2022-01-01 it does not seem to be documented by Steam, but we get SteamInventoryResultReady callbacks + for external events like AddItem calls, so we may as well handle them. + + + + + Do we know the player's region? + If not, default to not allowing random items. + + + + + Does the player's region allow crates and keys to be used? + Similar to TF2 and other Valve games we disable unboxing in certain regions. + + + + + If player's region does not allow crates and keys to be used, return the country code. + + + + + Similar to TF2 and other Valve games we disable unboxing in certain regions, so hide those items. + + + + + Similar to TF2 and other Valve games we disable unboxing in certain regions. + + + + + Not called on dedicated server. + + + + + Implementing as a struct wrapping the connection handle would remove the cost of looking up the connection, + but implementing as a class makes it cheap to cache information like the remote identity. + + + + + Find game connection associated with Steam connection. + + + + + Must close the handle to free up resources. + + + + + Must close the handle to free up resources. + + + + + Defaults to true. If false, skip Steam Networking Sockets creation of regular IP socket. + + + + + Defaults to true. If false, skip Steam Networking Sockets creation of non-FakeIP P2P socket. + (this is the socket used by "server codes") + + + + + Must close the handle to free up resources. + + + + + Must close the handle to free up resources. + + + + + Recycled array for every read call. + + + + + Log verbose information that should not be included in release builds. + + + + + Log helpful information that should be included in release builds. + + + + + Should certificate authentication be disabled for UDP connections? + + + + + This callback may be called from a service thread. It must be threadsafe and fast! Do not make any other + Steamworks calls from within the handler. + + + + + Thanks DiFFoZ! Ensures GC does not release the delegate. + + + + + Does host want extra debug output? + + + + + Overrides k_ESteamNetworkingConfig_SendBufferSize. + + + + + Overrides k_ESteamNetworkingConfig_EnableDiagnosticsUI. + + + + + Implementation using .NET Berkeley sockets. + + + + + Implements message boundaries on top of a TCP stream socket. + + + + + Implementation using .NET Berkeley sockets. + + + + + SteamNetworking is deprecated. + + + + + SteamNetworking is deprecated. + + + + + Dummy connection used in singleplayer. + + + + + Does initialOverlaps array contain hit collider? + + + + + Does initialOverlaps array contain every hit collider? + + + + + Perform a move, then do a capsule cast to determine if Unity PhysX went through a wall. + + Required when disabling overlap recovery because there are issues when walking toward slopes that bend inward. + To test if Unity works properly in the future; walk toward the inside of a barracks building in the PEI base. + + + + + Set detectCollisions to false and cancel deferred requests to enable. + + + + + Set detectCollisions to true on the next frame. + Useful when CharacterController is teleported to prevent adding huge forces to overlapping rigidbodies. + + + + + If true EnableDetectCollisionsNextFrame, if false DisableDetectCollisions. + + + + + Intentionally Update, not FixedUpdate. Physics transforms are applied between frames, whereas at low frame + rates there may be multiple FixedUpdates per frame. + + + + + Used to capture promotional images. + + Unity does not allow components in the editor assembly, so this component is in the game assembly but only compiled in the editor. + + + + + Test to compare differrent Unity instancing meshes. + + Unity does not allow components in the editor assembly, so this component is in the game assembly but only compiled in the editor. + + + + + Hacky workaround to fix item skin material leak. Unfortunately none of the original item skin code destroyed + instantiated materials, and did not keep a reference to the instantiated materials, so until that code gets a + rewrite this will take care of cleanup. + + + + + Debug component in the editor to see if GetRandomForwardVectorInCone seems correct. :) + Not much of a mathematician. :( + + + + diff --git a/redist/redist-client-preview-publicized/RocketModFix.Unturned.Redist.Client.nuspec b/redist/redist-client-preview-publicized/RocketModFix.Unturned.Redist.Client.nuspec index 65c432c2..152b522f 100644 --- a/redist/redist-client-preview-publicized/RocketModFix.Unturned.Redist.Client.nuspec +++ b/redist/redist-client-preview-publicized/RocketModFix.Unturned.Redist.Client.nuspec @@ -1,8 +1,8 @@ - + RocketModFix.Unturned.Redist.Client-Preview.Publicized - 3.25.7.2 + 3.25.8.100 Unturned 3 Client-side redistributables. Standalone and always up-to-date. diff --git a/redist/redist-client-preview-publicized/SDG.NetPak.Runtime.xml b/redist/redist-client-preview-publicized/SDG.NetPak.Runtime.xml old mode 100644 new mode 100755 index 375e4e6d..f4215536 --- a/redist/redist-client-preview-publicized/SDG.NetPak.Runtime.xml +++ b/redist/redist-client-preview-publicized/SDG.NetPak.Runtime.xml @@ -1,292 +1,292 @@ - - - - SDG.NetPak.Runtime - - - - - Indicates net reader/writer implementation should be generated. - - - - - Uses "smallest three" optimization described by Glenn Fiedler: https://gafferongames.com/post/snapshot_compression/ - Quoting here in case the link moves: "Since we know the quaternion represents a rotation its length must - be 1, so x^2+y^2+z^2+w^2 = 1. We can use this identity to drop one component and reconstruct it on the - other side. For example, if you send x,y,z you can reconstruct w = sqrt(1 - x^2 - y^2 - z^2). You might - think you need to send a sign bit for w in case it is negative, but you don’t, because you can make w always - positive by negating the entire quaternion if w is negative (in quaternion space (x,y,z,w) and (-x,-y,-z,-w) - represent the same rotation.) Don’t always drop the same component due to numerical precision issues. - Instead, find the component with the largest absolute value and encode its index using two bits [0, 3] - (0=x, 1=y, 2=z, 3=w), then send the index of the largest component and the smallest three components over - the network (hence the name). On the other side use the index of the largest bit to know which component - you have to reconstruct from the other three." - - - - - Similar to the quaternion optimization, but needs a sign bit for the largest value. - - - - - Default intBitCount of 13 allows a range of [-4096, +4096). - - - - - Write 8-bit per channel color excluding alpha. - - - - - Write 8-bit per channel color including alpha. - - - - - Note: "Special" here refers to the -90 rotation on the X axis. :) - If quaternion is only a rotation around the Y axis (yaw) which is common for barricades and structures, - write only yaw. Otherwise, write full quaternion. - - - - - Packs bits into a 32-bit buffer value, and from there into a byte array. GafferOnGames recommends this approach - rather than "farting across a buffer at byte level like it's 1985". - - - - - Lightweight error when exceptions are disabled. Bitwise OR to prevent different errors from clobbering each other. - - - - - Uses "smallest three" optimization described by Glenn Fiedler: https://gafferongames.com/post/snapshot_compression/ - Quoting here in case the link moves: "Since we know the quaternion represents a rotation its length must - be 1, so x^2+y^2+z^2+w^2 = 1. We can use this identity to drop one component and reconstruct it on the - other side. For example, if you send x,y,z you can reconstruct w = sqrt(1 - x^2 - y^2 - z^2). You might - think you need to send a sign bit for w in case it is negative, but you don’t, because you can make w always - positive by negating the entire quaternion if w is negative (in quaternion space (x,y,z,w) and (-x,-y,-z,-w) - represent the same rotation.) Don’t always drop the same component due to numerical precision issues. - Instead, find the component with the largest absolute value and encode its index using two bits [0, 3] - (0=x, 1=y, 2=z, 3=w), then send the index of the largest component and the smallest three components over - the network (hence the name). On the other side use the index of the largest bit to know which component - you have to reconstruct from the other three." - - - - - Similar to the quaternion optimization, but needs a sign bit for the largest value. - - - - - Default intBitCount of 13 allows a range of [-4096, +4096). - - - - - Read 8-bit per channel color excluding alpha. - - - - - Read 8-bit per channel color excluding alpha. - - - - - Read 8-bit per channel color including alpha. - - - - - Read 8-bit per channel color including alpha. - - - - - Note: "Special" here refers to the -90 rotation on the X axis. :) - Read only yaw if quaternion was flat, full quaternion otherwise. - - - - - For example bitCount of 7 allows range [-64, +64). - - - - - Values outside the range are clamped into range. - For example intBitCount of 7 allows range [0, 128). - - - - - Values outside the range are clamped into range. - For example intBitCount of 7 allows range [-64, +64). - - - - - Encode a float in the range [0.0, 1.0]. Endpoints are encoded exactly, but not the midpoint (0.5). - - - - - Encode a float in the range [-1.0, +1.0]. Endpoints and midpoint (0.0) are encoded exactly. - - - - - Encode radians wrapped into the range [0, TWO_PI). - - - - - Encode degrees wrapped into the range [0, 360). - - - - - Placeholder allowing user assembly to compile before specialized implementation is generated. - - - - - Ideally should not be used by new code. - - - - - For example bitCount of 7 allows range [-64, +64). - - - - - Values outside the range are clamped into range. - For example intBitCount of 7 allows range [0, 128). - - - - - Values outside the range are clamped into range. - For example intBitCount of 7 allows range [-64, +64). - - - - - Decode a float in the range [0.0, 1.0]. Endpoints are encoded exactly, but not the midpoint (0.5). - - - - - Decode a float in the range [-1.0, +1.0]. Endpoints and midpoint (0.0) are encoded exactly. - - - - - Placeholder allowing user assembly to compile before specialized implementation is generated. - - - - - Ideally should not be used by new code. - - - - - Unpacks bits from a byte array into a 32-bit buffer value. GafferOnGames recommends this approach rather than - "farting across a buffer at byte level like it's 1985". - - - - - Lightweight error when exceptions are disabled. Bitwise OR to prevent different errors from clobbering each other. - - - - - Call to ReadBits or ReadBytes would have overflowed our buffer. - - - - - Buffer passed into ReadBytes would have overflowed. - - - - - AlignToByte bits should be zero. - - - - - Buffer passed into SaveState would have overflowed. - - - - - Imprecise because sent byte length is rounded up from bit length, but should help find particularly - egregious reading errors. - - - - - Number of bytes until end of segment is reached. - - - - - Save remaining data to resume reading later. Used by net invokables to defer invocation. - - - - - Used by invocation messages to show more error context rather than the default. - - - - - Used by NetInvokable loopback to copy buffer from writer to reader. - - - - - Assumes length is greater than zero! - Moves reader forward according to length. - - - - - Uses "smallest three" optimization described by Glenn Fiedler: https://gafferongames.com/post/snapshot_compression/ - Quoting here in case the link moves: "If v is the absolute value of the largest quaternion component, - the next largest possible component value occurs when two components have the same absolute value and the - other two components are zero. The length of that quaternion (v,v,0,0) is 1, therefore v^2 + v^2 = 1, - 2v^2 = 1, v = 1/sqrt(2). This means you can encode the smallest three components in [-0.707107,+0.707107] - instead of [-1,+1] giving you more precision with the same number of bits." - - - - - Maximum number of bits to read/write for string byte count without overflowing the string buffer. - - - - - Maximum number of UTF8 bytes for string. - Before the "null or empty" flag was added the length had to be able to represent 0, but now the receiver - can infer that the byte count is at least 1. - - - - - encoderShouldEmitUTF8Identifier enables byte order mark (BOM) which is unnecessary for UTF8. - throwOnInvalidBytes allows reader to discard bad string packets. - - - - + + + + SDG.NetPak.Runtime + + + + + Indicates net reader/writer implementation should be generated. + + + + + Uses "smallest three" optimization described by Glenn Fiedler: https://gafferongames.com/post/snapshot_compression/ + Quoting here in case the link moves: "Since we know the quaternion represents a rotation its length must + be 1, so x^2+y^2+z^2+w^2 = 1. We can use this identity to drop one component and reconstruct it on the + other side. For example, if you send x,y,z you can reconstruct w = sqrt(1 - x^2 - y^2 - z^2). You might + think you need to send a sign bit for w in case it is negative, but you don’t, because you can make w always + positive by negating the entire quaternion if w is negative (in quaternion space (x,y,z,w) and (-x,-y,-z,-w) + represent the same rotation.) Don’t always drop the same component due to numerical precision issues. + Instead, find the component with the largest absolute value and encode its index using two bits [0, 3] + (0=x, 1=y, 2=z, 3=w), then send the index of the largest component and the smallest three components over + the network (hence the name). On the other side use the index of the largest bit to know which component + you have to reconstruct from the other three." + + + + + Similar to the quaternion optimization, but needs a sign bit for the largest value. + + + + + Default intBitCount of 13 allows a range of [-4096, +4096). + + + + + Write 8-bit per channel color excluding alpha. + + + + + Write 8-bit per channel color including alpha. + + + + + Note: "Special" here refers to the -90 rotation on the X axis. :) + If quaternion is only a rotation around the Y axis (yaw) which is common for barricades and structures, + write only yaw. Otherwise, write full quaternion. + + + + + Packs bits into a 32-bit buffer value, and from there into a byte array. GafferOnGames recommends this approach + rather than "farting across a buffer at byte level like it's 1985". + + + + + Lightweight error when exceptions are disabled. Bitwise OR to prevent different errors from clobbering each other. + + + + + Uses "smallest three" optimization described by Glenn Fiedler: https://gafferongames.com/post/snapshot_compression/ + Quoting here in case the link moves: "Since we know the quaternion represents a rotation its length must + be 1, so x^2+y^2+z^2+w^2 = 1. We can use this identity to drop one component and reconstruct it on the + other side. For example, if you send x,y,z you can reconstruct w = sqrt(1 - x^2 - y^2 - z^2). You might + think you need to send a sign bit for w in case it is negative, but you don’t, because you can make w always + positive by negating the entire quaternion if w is negative (in quaternion space (x,y,z,w) and (-x,-y,-z,-w) + represent the same rotation.) Don’t always drop the same component due to numerical precision issues. + Instead, find the component with the largest absolute value and encode its index using two bits [0, 3] + (0=x, 1=y, 2=z, 3=w), then send the index of the largest component and the smallest three components over + the network (hence the name). On the other side use the index of the largest bit to know which component + you have to reconstruct from the other three." + + + + + Similar to the quaternion optimization, but needs a sign bit for the largest value. + + + + + Default intBitCount of 13 allows a range of [-4096, +4096). + + + + + Read 8-bit per channel color excluding alpha. + + + + + Read 8-bit per channel color excluding alpha. + + + + + Read 8-bit per channel color including alpha. + + + + + Read 8-bit per channel color including alpha. + + + + + Note: "Special" here refers to the -90 rotation on the X axis. :) + Read only yaw if quaternion was flat, full quaternion otherwise. + + + + + For example bitCount of 7 allows range [-64, +64). + + + + + Values outside the range are clamped into range. + For example intBitCount of 7 allows range [0, 128). + + + + + Values outside the range are clamped into range. + For example intBitCount of 7 allows range [-64, +64). + + + + + Encode a float in the range [0.0, 1.0]. Endpoints are encoded exactly, but not the midpoint (0.5). + + + + + Encode a float in the range [-1.0, +1.0]. Endpoints and midpoint (0.0) are encoded exactly. + + + + + Encode radians wrapped into the range [0, TWO_PI). + + + + + Encode degrees wrapped into the range [0, 360). + + + + + Placeholder allowing user assembly to compile before specialized implementation is generated. + + + + + Ideally should not be used by new code. + + + + + For example bitCount of 7 allows range [-64, +64). + + + + + Values outside the range are clamped into range. + For example intBitCount of 7 allows range [0, 128). + + + + + Values outside the range are clamped into range. + For example intBitCount of 7 allows range [-64, +64). + + + + + Decode a float in the range [0.0, 1.0]. Endpoints are encoded exactly, but not the midpoint (0.5). + + + + + Decode a float in the range [-1.0, +1.0]. Endpoints and midpoint (0.0) are encoded exactly. + + + + + Placeholder allowing user assembly to compile before specialized implementation is generated. + + + + + Ideally should not be used by new code. + + + + + Unpacks bits from a byte array into a 32-bit buffer value. GafferOnGames recommends this approach rather than + "farting across a buffer at byte level like it's 1985". + + + + + Lightweight error when exceptions are disabled. Bitwise OR to prevent different errors from clobbering each other. + + + + + Call to ReadBits or ReadBytes would have overflowed our buffer. + + + + + Buffer passed into ReadBytes would have overflowed. + + + + + AlignToByte bits should be zero. + + + + + Buffer passed into SaveState would have overflowed. + + + + + Imprecise because sent byte length is rounded up from bit length, but should help find particularly + egregious reading errors. + + + + + Number of bytes until end of segment is reached. + + + + + Save remaining data to resume reading later. Used by net invokables to defer invocation. + + + + + Used by invocation messages to show more error context rather than the default. + + + + + Used by NetInvokable loopback to copy buffer from writer to reader. + + + + + Assumes length is greater than zero! + Moves reader forward according to length. + + + + + Uses "smallest three" optimization described by Glenn Fiedler: https://gafferongames.com/post/snapshot_compression/ + Quoting here in case the link moves: "If v is the absolute value of the largest quaternion component, + the next largest possible component value occurs when two components have the same absolute value and the + other two components are zero. The length of that quaternion (v,v,0,0) is 1, therefore v^2 + v^2 = 1, + 2v^2 = 1, v = 1/sqrt(2). This means you can encode the smallest three components in [-0.707107,+0.707107] + instead of [-1,+1] giving you more precision with the same number of bits." + + + + + Maximum number of bits to read/write for string byte count without overflowing the string buffer. + + + + + Maximum number of UTF8 bytes for string. + Before the "null or empty" flag was added the length had to be able to represent 0, but now the receiver + can infer that the byte count is at least 1. + + + + + encoderShouldEmitUTF8Identifier enables byte order mark (BOM) which is unnecessary for UTF8. + throwOnInvalidBytes allows reader to discard bad string packets. + + + + diff --git a/redist/redist-client-preview-publicized/manifest.sha256.json b/redist/redist-client-preview-publicized/manifest.sha256.json new file mode 100644 index 00000000..2925add8 --- /dev/null +++ b/redist/redist-client-preview-publicized/manifest.sha256.json @@ -0,0 +1,5 @@ +{ + "Assembly-CSharp.xml": "d6ff93e9fafa383af23c8ed909a7d17eecf31b811cfa388c1baefe85a7fba490", + "SDG.NetPak.Runtime.xml": "032c8d2d0a3e1f15ef1139b98f5370eb1fb94d65bf01c4462a0c0e6578bb705a", + "Assembly-CSharp.dll": "3146cb92c34e4c25251c34360f274a8ea25fc6d1888581f6f32f1628b321088f" +} \ No newline at end of file diff --git a/redist/redist-client-preview-publicized/version.json b/redist/redist-client-preview-publicized/version.json new file mode 100644 index 00000000..21c2a223 --- /dev/null +++ b/redist/redist-client-preview-publicized/version.json @@ -0,0 +1,7 @@ +{ + "GameVersion": "3.25.8.100", + "BuildId": "19237948", + "NuGetVersion": "3.25.8.100", + "FilesHash": "0ACD737957DFDCB8DE3E44AB268F80EA6E87DA836E5B7728265416922D3A39FE", + "LastUpdated": "2025-07-16T05:26:25.8336931Z" +} \ No newline at end of file diff --git a/redist/redist-manifests/.manifest.redist-client-preview-publicized.txt b/redist/redist-manifests/.manifest.redist-client-preview-publicized.txt index e69de29b..565d1a96 100644 --- a/redist/redist-manifests/.manifest.redist-client-preview-publicized.txt +++ b/redist/redist-manifests/.manifest.redist-client-preview-publicized.txt @@ -0,0 +1 @@ +3434058003629065725