Easily spawn permanent entities at monuments, which auto respawn after restarts and wipes.
- Setup is done in-game, no config needed
- Uses familiar command syntax, inspired by
spawn <entity>
- Works on any map seed and accounts for terrain height
- Entities are indestructible, have no stability, free electricity, and cannot be picked up
- Supports vanilla monuments, custom monuments, train tunnels, underwater labs, and cargo ship
- Allows defining any entity prefab as a monument, in order to attach addons to it
- Allows skinning spawned entities
- (Advanced) Allows building monument puzzles
- (Advanced) Allows placing spawn points for loot containers, key cards, vehicles, and more
- Sign Artist integration allows persisting sign images
- Entity Scale Manager integration allows persisting entity scale
- Telekinesis integration allows easily moving and rotating entities
- Monument Finder -- Simply install. No configuration or permissions needed except for custom monuments.
- Telekinesis -- Allows moving and rotating entities in-place. Very useful for precisely placing entities. Monument Addons integrates with it to automatically save updated positions.
- Custom Vending Setup -- Allows customizing monument vending machines. Works with vending machines spawned by this plugin that use the
npcvendingmachine
orshopkeeper_vm_invis
prefabs.
- Add signs to personalize your server or advertise sponsors
- Add airwolf and boat vendors
- Add vending machines
- Add car lifts, recyclers, research tables, workbenches, repair benches
- Add BBQs, furnaces, refineries, fireplaces, hobo barrels
- Add CCTVs and computer stations
- Add instruments, swimming pools, arcade machines
- Add gambling wheel, slot machines, poker tables
- Add drone marketplaces
- Add CH47 drop zones
- Add barricades and walls to block off sections of monuments
- Periodically spawn loot containers, key cards, vehicles, and more
- Dynamically change monuments throughout a wipe by enabling/disabling profiles via other plugins
List of spawnable entities: https://github.com/OrangeWulf/Rust-Docs/blob/master/Entities.md
monumentaddons.admin
-- Allows all commands. Grant this to admins or moderators, not to normal players.
Let's face it, you are probably planning to use this plugin the same way as many other server owners. That means there may already be profiles that you can install to do just that.
Several example profiles are included below. Run the corresponding command snippet to install each profile.
mainstall BarnAirwolf
-- Adds an Air Wolf vendor to Large Barn and Ranch.mainstall CargoShipCCTV
-- Adds 7 CCTVs and one computer station to cargo ship (same as the Cargo Ship CCTV plugin).mainstall FishingVillageAirwolf
-- Adds an Air Wolf vendor to Large Fishing Village and to one of the small Fishing Villages.mainstall MonumentCooking
-- Adds a cooking static (BBQ / camp fire / hobo barrel) to safe zones and low-level named monuments that lack them.mainstall MonumentLifts
-- Adds car lifts to gas station and supermarket (same as the MonumentLifts plugin).mainstall MonumentsRecycler
-- Adds recyclers to Cargo Ship, Oilrigs, Dome and Fishing Villages (same as the MonumentsRecycler plugin).mainstall OilRigSharks
-- Adds one shark to small rig and two sharks to lage rig.mainstall OutpostAirwolf
-- Adds an Air Wolf vendor to Outpost, with some ladders to allow access.mainstall SafeZoneRecyclers
-- Adds a recycler to Fishing Villages, Large Barn, and Ranch (different locations than MonumentsRecycler for compatibility).mainstall TrainStationCCTV
-- Adds 6 CCTVs and one computer station to each underground Train Station.
These example profiles are installed from https://github.com/WheteThunger/MonumentAddons/blob/master/Profiles/. Don't see what you're looking for? Want to showcase a profile you created? Fork the repository on GitHub, commit the changes, and submit a pull request!
Follow these steps to spawn static entities.
- Go to any monument, such as a gas station.
- Aim somewhere, such as a floor, wall or ceiling.
- Run the command
maspawn <entity>
to spawn an entity of your choice. For example,maspawn modularcarlift.static
. Alternatively, if you are holding a deployable item, you can simply runmaspawn
to spawn the corresponding entity.
How this works:
- It spawns the entity where you are aiming.
- It spawns the entity at all other identical monuments (for example, at every gas station) using the correct relative position and rotation for those monuments.
- It saves this information in the plugin data files, so that the entity can be respawned when the plugin is reloaded, when the server is restarted, or when the server is wiped, even if using a new map seed (don't worry, this works well as long as the monuments don't significantly change between Rust updates).
Follow these steps to create an example puzzle.
- Go to any monument, such as a gas station.
- Aim at the floor, then run the command
maspawn generator.static
. This will be the root of your puzzle, automatically resetting it on a schedule. It's recommended to place the generator near the center of the puzzle so it can evenly detect nearby players for the purpose of delaying the puzzle from resetting. - Aim at a wall, outside the puzzle room, then run the command
maspawn fusebox
. - Aim at the floor in a doorway, then run the command
maspawn security.blue
. Reposition the door with Telekinesis if needed. - Aim at the wall next to the front side of the doorway, then run the commands
maspawn cardreader
andmaspawn doormanipulator
. - Aim at the wall next to the back side of the doorway, then run the commands
maspawn pressbutton
, andmaspawn orswitch
. - Aim at the card reader, then run the command
macardlevel 2
to make it a blue card reader. - Equip a wire tool, then run the command
mawire
. - Connect
generator.static
->fusebox
->cardreader
->orswitch
->doormanipulator
. - Connect
pressbutton
->orswitch
.
Follow these steps to create example spawn points.
- Go to any monument, such as a gas station.
- Aim somewhere on the ground.
- Run the command
maspawngroup create MyFirstSpawnGroup
to create a spawn group and a spawn point. - Run the command
maspawngroup add radtown/crate_normal 30
. - Run the command
maspawngroup add radtown/crate_normal_2 70
. - Run the command
maspawngroup add crate_basic 100
. - Aim somewhere else on the ground, and run the command
maspawnpoint create MyFirstSpawnGroup
to create a second spawn point in the spawn group you created earlier. - Aim at the 2nd spawn point, and run the command
maspawnpoint set RandomRadius 1.5
. - Aim at either spawn point, and run the command
maspawngroup set MaxPopulation 2
. - Aim at either spawn point, and run the command
maspawngroup respawn
. Run this as many times as you want to see the loot crates respawn.
mahelp
-- Prints help information about available commands.maspawn <entity>
-- Spawns an entity where you are aiming, using the entity prefab name.- If you are holding a deployable item, you can simply run
maspawn
without specifying the entity name. - You must be at a monument, as determined by Monument Finder.
- Works like the native
spawn
command, so if the entity name isn't specific enough, it will print all matching entity names. - Also spawns the entity at other matching monuments (e.g., if at a gas station, will spawn at all gas stations).
- A monument is considered a match if it has the same short prefab name or the same alias as the monument you are aiming at. The Monument Finder plugin will assign aliases for primarily underground tunnels. For example,
station-sn-0
andstation-we-0
will both use theTrainStation
alias, allowing all train stations to have the same entities.
- A monument is considered a match if it has the same short prefab name or the same alias as the monument you are aiming at. The Monument Finder plugin will assign aliases for primarily underground tunnels. For example,
- Saves the entity info to the plugin data file so that reloading the plugin (or restarting the server) will respawn the entity.
- If you are holding a deployable item, you can simply run
maprefab <prefab>
-- Creates an instance of a non-entity prefab. Note: This is very limited. Only prefabs with theassets/bundled/prefabs/modding
path are supported, and the prefab instances are not networked to clients (because the game does not offer that capability) so they will be invisible, despite having real effects on the server side. This command is intended primarily for placing CH47 drop zones (maprefab dropzone
), but it can also be used to place loot and NPC spawners that custom maps tend to use, although you will have much greater control of spawners when using the spawn point capabilities of the plugin instead.mapaste <file> <optional_args>
-- Pastes a building from the CopyPaste plugin, using the specified file name. Supports all arguments provided by the CopyPaste plugin such asheight
.maundo
-- Undo a recentmakill
action.mashow <optional_profile_name> <optional_duration_in_seconds>
-- Shows debug information about nearby entities spawned by this plugin, for the specified duration. Defaults to 60 seconds.- Debug information is also automatically displayed for at least 60 seconds when using other commands.
- When specifying a profile name, entities belonging to other profiles will have gray text.
The following commands only work on objects managed by this plugin. The effect of these commands automatically applies to all copies of the object at matching monuments, and also updates the data files.
makill
-- Deletes the entity or spawn point that you are aiming at.- For addons that do not have colliders, such as spawn points, the plugin will attempt to find a nearby addon within 2 meters of the surface you are looking at. If this does not work, you have to remove the addon from the profile data file manually.
masave
-- Saves the current position and rotation of the entity you are aiming at. This is useful if you moved the entity with a plugin such as Edit Tool or Uber Tool. This is not necessary if you are repositioning entities with Telekinesis since that will be automatically detected.- Also saves the building grade if looking at a foundation, wall, floor, etc.
maflag <flag>
-- (Advanced) Toggles a flag between enabled/disabled/unspecified on the entity you are aiming at. When running this command without specifying a flag, the current/enabled/disabled flags will be printed. Allowed flags as of this writing:Placeholder
,On
,OnFire
,Open
,Locked
,Debugging
,Disabled
,Reserved1
,Reserved2
,Reserved3
,Reserved4
,Reserved5
,Broken
,Busy
,Reserved6
,Reserved7
,Reserved8
,Reserved9
,Reserved10
,Reserved11
,InUse
,Reserved12
,Reserved13
,Unused23
,Protected
,Transferring
.- This plugin forces certain flags in some cases, meaning that enabling or disabling flags via this command may not always work as expected. If you discover an issue with the flags the plugin is overriding, open a support thread to discuss the use case.
- Even if you enable or disable a flag for a given entity, the game (or another plugin) may toggle the flag at any time (e.g., a recycler will toggle the
On
flag whenever it turns on/off). Overriding a flag with this plugin only ensures that the flag is enabled or disabled when the entity is spawned and when the profile or plugin reloads. - Don't ask me what each flag does. These flags are defined by the game itself, not a concept introduced by this plugin. The function of each flag depends on the entity it's applied to. Most flags will have no effect on most entities. Some example use cases are described below, but please understand that it's not feasible to describe what each flag does in this documentation. To really understand what every flag does, you must read the game assemblies. You should only override flags when recommended for a specific use case by someone who has read the game assemblies. Experiment with flags at your own risk.
On
-- Determines some functional and cosmetic effects for various entities, such as furnaces, recyclers, some lights.Locked
-- Determines whether a door or storage container can be opened.Busy
-- Determines whether the entity can be interacted with.Disabled
-- Determines whether the entity is visible.Reserved8
-- Used by electrical entities to denote whether there is sufficient electricity.Reserved9
-- Used by recyclers to determine recycle efficiency (by default, this flag is enabled on recyclers only in safe zones). You can forcibly enable or disable this flag to achieved the desired recycler efficiency (40% or 60%).
maskin <skin id>
-- Updates the skin of the entity you are aiming at.masetid <id>
-- Updates the RC identifier of the CCTV camera you are aiming at.- Note: Each CCTV's RC identifier will have a numeric suffix like
1
,2
,3
and so on. This is done because some monuments may be duplicated, and each CCTV must have a unique identifier.
- Note: Each CCTV's RC identifier will have a numeric suffix like
masetdir
-- Updates the direction of the CCTV you are aiming at, so that it points toward you.maskull <name>
-- Sets the display name of the skull trophy you are aiming at.matrophy
-- Mounts a copy of your currently held head bag to the hunting trophy you are aiming at.
mawire <optional color>
-- Temporarily enhances your currently held wire tool, allowing you to connect electrical entities spawned viamaspawn
. Allowed colors:Default
,Red
,Green
,Blue
,Yellow
,Pink
,Purple
,Orange
,White
,LightBlue
,Invisible
. Note: When using theInvisible
color, you can only directly connect entity inputs and outputs, not place intermediate wire points.macardlevel <1-3>
(1 = green, 2 = blue, 3 = red) -- Sets the access level of the card reader you are aiming at. For example,macardlevel 2
will make the card reader visually blue and require a blue key card.mapuzzle reset
-- Resets the puzzle connected to the entity you are looking at. For example, when looking at a static generator (i.e.,generator.static
) or an entity connected directly or indirectly to a static generator.mapuzzle set <option> <value>
-- Sets a property of the puzzle root entity you are looking at. This applies only to static generators (i.e.,generator.static
).PlayersBlockReset
: true/false -- Whiletrue
, the puzzle will not make progress toward the next reset while any players are within the distancePlayerDetectionRadius
.PlayerDetectionRadius
: number -- The distance in which players can block the puzzle from making progress toward its next reset.SecondsBetweenReset
: number -- The number of seconds between puzzle resets. Note: Reset progress does not advance whilePlayersBlockReset
is enabled and players are nearby.
mapuzzle add <group_name>
-- Associates a spawn group with the puzzle root entity you are aiming at (i.e.,generator.static
). Whenever a puzzle resets, associated spawn groups will despawn and respawn entities, allowing you to synchronize loot, NPCs and puzzle doors. To associate a spawn group, it must be created by the plugin, stored under the same profile, and be at the same monument.mapuzzle remove <group_name>
-- Disassociates a spawn group with the puzzle root entity you are aiming at (i.e.,generator.static
).
mashowvanilla
-- For educational purposes, this shows debug information for 60 seconds about vanilla spawn points at the monument you are aiming at. If you are aiming at an entity (e.g., a junk pile, dwelling, or cargo ship), this will instead show spawn points that are parented to that entity.
maspawngroup create <name>
-- Creates a spawn group and a spawn point where you are looking.maspawngroup set <option> <value>
-- Sets a property of the spawn group you are looking at.Name
: string -- This name must be unique for the given profile + monument. This name can be used to create additional spawn points for this spawn group usingmaspawnpoint create <group_name>
.Color
: string -- The debug color of the spawn group, when usingmashow
. Supports some color names such as "red", as well as HTML color codes like#F90
and#FF9900
. Set tonone
to revert to the default color controlled by the config.MaxPopulation
: number -- The maximum number of entities that can be spawned across all spawn points in this spawn group.RespawnDelayMin
: number -- The minimum time in seconds to wait between spawning entities.RespawnDelayMax
: number -- The maximum time in seconds to wait between spawning entities. Set to0
to disable automated respawns, which is useful if you are associating the spawn group with a puzzle.SpawnPerTickMin
: number -- The minimum number of entities to try to spawn in a batch.SpawnPerTickMax
: number -- The maximum number of entities to try to spawn in a batch.InitialSpawn
: true/false -- Whiletrue
, the spawn group will spawn entities as soon as the spawn group is created (e.g., when the profile loads, when the plugin loads, or when the server reboots). Whilefalse
, the spawn group will not spawn any entities initially, but will still spawn them later according to the defined schedule.PreventDuplicates
: true/false -- Whiletrue
, only one of each entity prefab can be present across all spawn points in the spawn group. Vanilla Rust uses this property for spawning modules at desert military bases.PauseScheduleWhileFull
: true/false -- Whiletrue
, the next spawn will not be scheduled until the spawn group is below its max population. For instance, if the spawn group is at 2/2 population, and respawn delay is set to 30 minutes, once the population reaches 1/2, the 30 minute respawn timer will be started. In vanilla Rust, this feature does not exist, meaning the timer is always going, allowing for situations where loot spawns shortly after loot is taken.RespawnWhenNearestPuzzleResets
: true/false -- Whiletrue
, the spawn group will associate with the closest nearby vanilla puzzle. When that puzzle resets, the spawn group will despawn all entities and run one spawn tick (same behavior as when you runmaspawngroup respawn
). This is useful if you want to add spawn points for extra loot at vanilla puzzles. Note: This can only associate a custom spawn group with a vanilla puzzle. If you want to associate a custom spawn group with a custom puzzle, you must associate directly (e.g.,mapuzzle add <group_name>
while looking at the puzzle root entity).
maspawngroup add <entity> <weight>
-- Adds the specified entity prefab to the spawn group you are looking at.maspawngroup remove <entity>
-- Removes the specified entity prefab from the spawn group you are looking at.maspawngroup spawn
-- Runs one spawn tick for the spawn group. For example, if you have setSpawnPerTickMin
to 1 andSpawnPerTickMax
to 2, running this command will spawn 1-2 entities, as long as there are available spawn points and sufficient population headroom.maspawngroup respawn
-- Despawns all entities across the spawn group and runs one spawn tick.
Note: masg
can be used in place of maspawngroup
.
maspawnpoint create <group_name>
-- Creates a spawn point where you are looking, for the specified spawn group. The spawn group must be in your selected profile and be at the same monument.maspawnpoint set <option> <value>
-- Sets a property of the spawn group you are looking at. You can also usesetall
to apply the change to all spawn points within the same spawn group.Exclusive
: true/false -- Whiletrue
, only one entity can be spawned at this spawn point at a time.DropToGround
: true/false -- Whiletrue
, entities will be spawned on the nearest flat surface below the spawn point.CheckSpace
: true/false -- Whiletrue
, entities can only spawn at this spawn point when there is sufficient space. This option is recommended for vehicle spawn points.RandomRotation
: true/false -- Whiletrue
, entities will spawn with random rotation at this spawn point, instead of following the rotation of the spawn point itself.RandomRadius
: number -- This number determines how far away entities can spawn from this spawn point. The default is0.0
.PlayerDetectionRadius
: number -- This number determines how far away players must be, in order for this spawn point to spawn an entity. By default, vanilla behavior checks within2
meters for normal spawn points, orRandomRadius
+1
meter for radial spawn points. Setting this value to greater than0
will override the vanilla behavior, allowing you to enlarge or shrink the detection radius. While a player is detected within the radius, the spawn point is considered unavailable, so another spawn point within the same spawn group may be selected for spawning an entity.
Note: masp
can be used in place of maspawnpoint
.
Profiles allow you to organize entities into groups. Each profile can be independently enabled or reloaded. Each profile uses a separate data file, so you can easily share profiles with others.
maprofile
-- Prints help info about all profile commands.maprofile list
-- Lists all profiles in theoxide/data/MonumentAddons/
directory.maprofile describe <name>
-- Describes all addons within the specified profile.maprofile enable <name>
-- Enables the specified profile. Enabling a profile spawns all of the profile's addons, and marks the profile as enabled in the data file so it will automatically load when the the plugin does.maprofile disable <name>
-- Disables the specified profile. Disabling a profile despawns all of the profile's addons, and marks the profile as disabled in the data file so it won't automatically load when the plugin does.maprofile reload <name>
-- Reloads the specified profile from disk. This despawns all the profile's addons, re-reads the data file, then respawns all the profile's addons. This is useful if you downloaded a new version of a profile or if you made manual edits to the data file.maprofile select <name>
-- Selects and enables the specified profile. Runningmaspawn <entity>
will save addons to the currently selected profile. Each player can have a separate profile selected, allowing multiple players to work on different profiles at the same time.maprofile create <name>
-- Creates a new profile, enables it and selects it.maprofile rename <name> <new name>
-- Renames the specified profile.maprofile clear <name>
-- Removes all addons from the specified profile.maprofile delete <name>
-- Deletes the specified profile. The profile must first be empty or disabled.maprofile moveto <name>
-- Moves the addon you are looking at to the specified profile.maprofile install <url>
-- Installs a profile from a URL.- Abbreviated command:
mainstall <url>
. - You may replace the URL with simply the profile name if installing from https://github.com/WheteThunger/MonumentAddons/tree/master/Profiles. For example,
maprofile install OutpostAirwolf
ormainstall OutpostAirwolf
.
- Abbreviated command:
{
"Debug display settings": {
"Default display duration (seconds)": 60.0,
"Display distance": 100.0,
"Display distance abbreviated": 200.0,
"Max addons to show unabbreviated": 1,
"Entity color": "#FF00FF",
"Spawn point color": "#FF8000",
"Paste color": "#00FFFF",
"Custom addon color": "#00FF00",
"Custom monument color": "#00FF00",
"Inactive profile color": "#808080"
},
"Save entities between restarts/reloads to preserve their state throughout a wipe": {
"Enable saving for storage entities": false,
"Enable saving for non-storage entities": false,
"Override saving enabled by prefab": {}
},
"Dynamic monuments": {
"Entity prefabs to consider as monuments": [
"assets/content/vehicles/boats/cargoship/cargoshiptest.prefab"
]
},
"Addon defaults": {
"Spawn group defaults": {
"MaxPopulation": 1,
"SpawnPerTickMin": 1,
"SpawnPerTickMax": 2,
"RespawnDelayMin": 1500.0,
"RespawnDelayMax": 2100.0,
"InitialSpawn": true,
"PreventDuplicates": false,
"PauseScheduleWhileFull": false,
"RespawnWhenNearestPuzzleResets": false
},
"Spawn point defaults": {
"Exclusive": true,
"SnapToGround": true,
"CheckSpace": false,
"RandomRotation": false,
"RandomRadius": 0.0,
"PlayerDetectionRadius": 0.0
},
"Puzzle defaults": {
"PlayersBlockReset": true,
"PlayerDetectionRadius": 30.0,
"SecondsBetweenResets": 1800.0
}
},
"Deployable overrides": {
"arcade.machine.chippy": "assets/bundled/prefabs/static/chippyarcademachine.static.prefab",
"autoturret": "assets/content/props/sentry_scientists/sentry.bandit.static.prefab",
"bbq": "assets/bundled/prefabs/static/bbq.static.prefab",
"boombox": "assets/prefabs/voiceaudio/boombox/boombox.static.prefab",
"box.repair.bench": "assets/bundled/prefabs/static/repairbench_static.prefab",
"cctv.camera": "assets/prefabs/deployable/cctvcamera/cctv.static.prefab",
"chair": "assets/bundled/prefabs/static/chair.static.prefab",
"computerstation": "assets/prefabs/deployable/computerstation/computerstation.static.prefab",
"connected.speaker": "assets/prefabs/voiceaudio/hornspeaker/connectedspeaker.deployed.static.prefab",
"hobobarrel": "assets/bundled/prefabs/static/hobobarrel_static.prefab",
"microphonestand": "assets/prefabs/voiceaudio/microphonestand/microphonestand.deployed.static.prefab",
"modularcarlift": "assets/bundled/prefabs/static/modularcarlift.static.prefab",
"research.table": "assets/bundled/prefabs/static/researchtable_static.prefab",
"samsite": "assets/prefabs/npc/sam_site_turret/sam_static.prefab",
"small.oil.refinery": "assets/bundled/prefabs/static/small_refinery_static.prefab",
"telephone": "assets/bundled/prefabs/autospawn/phonebooth/phonebooth.static.prefab",
"vending.machine": "assets/prefabs/deployable/vendingmachine/npcvendingmachine.prefab",
"wall.frame.shopfront.metal": "assets/bundled/prefabs/static/wall.frame.shopfront.metal.static.prefab",
"workbench1": "assets/bundled/prefabs/static/workbench1.static.prefab",
"workbench2": "assets/bundled/prefabs/static/workbench2.static.prefab"
},
"Xmas tree decorations (item short names)": [
"xmas.decoration.gingerbreadmen",
"xmas.decoration.star",
"xmas.decoration.tinsel",
"xmas.decoration.candycanes",
"xmas.decoration.pinecone",
"xmas.decoration.lights"
]
}
Debug display settings
-- Determines the appearance of addon debug information (i.e., when usingmashow
). Note that running most commands in the plugin will automatically show or renew debug information for a period of time.Default display duration (seconds)
-- Determines how long debug information will be displayed when usingmashow
without specifying the duration, or when automatically showing debug information due to running a relevant command.Display distance
-- Determines how far away you can see full debug information about addons.Display distance abbreviated
-- Determines how far away you can see an abbreviated symbol for addons, instead of the full debug information, to reduce screen clutter. This number should be set higher thanDisplay distance
.Max addons to show unabbreviated
-- Determines how many addons you can see unabbreviated at once. When there are more than this number of addons withinDisplay distance
, addons closer to where you are aiming will be prioritized. This number should be set low to reduce screen clutter.Entity color
-- Determines the debug text color for entity addons (the most common type of addon).Spawn point color
-- Determines the debug text color for spawn point addons.Paste color
-- Determines the debug text color for paste addons.Custom addon color
-- Determines the debug text color for custom addons registered by other plugins.Custom monument color
-- Determines the debug text color for custom monuments registered by other plugins.Inactive profile color
-- Determines the debug text color for addons that are not part of the specified profile (i.e., when usingmashow <profile_name>
).
Save entities between restarts/reloads to preserve their state throughout a wipe
-- Determines whether entities spawned bymaspawn
will remain while the plugin is unloaded, and will be saved by Rust across server restarts. Please carefully read and understand the documentation about this option before enabling it. Note: This option currently has no effect on Pastes, Spawn Groups or Custom Addons, nor for any addons placed at monuments registered via the Custom Monument API, meaning that those addons will always be despawned/respawned when the plugin reloads.- While saving is disabled (
false
), when the plugin unloads, it will despawn all entities spawned viamaspawn
. When the plugin subsequently reloads, those entities will be respawned from scratch. This means, for entities that maintain state (such as player items temporarily residing in recyclers), that state will be lost whenever the plugin unloads. The most practical consequence of using this mode is that player items inside containers will be lost when a profile is reloaded, when the plugin is reloaded, or when the server reboots. Despite that limitation, having saving disabled is the most simple and stable value for this option because it ensures consistent reproducibility across plugin reloads. - While saving is enabled (
true
), when the plugin unloads, all entities spawned by viamaspawn
will remain, in order to preserve their state (e.g., items inside a recycler). When the plugin subsequently reloads, it will find the existing entities, reconcile how they differ from the enabled profiles, and despawn/respawn/reposition/modify them as needed. The plugin will try to avoid despawning/respawning an entity that is already present, in order to preserve the entity's state. Despite this sounding like the more obvious mode of the plugin, it is more complex and less stable than the default mode, and should therefore be enabled with caution. Enable saving for storage entities
(true
orfalse
) -- Applies to all entities that the plugin classifies as storage entities. This category includes hundreds of prefabs, including recyclers, furnaces, research tables, vending machines, and mining quarries. Enabling this is useful especially for vending machines as it will allow Custom Vending Setup to save dynamic prices throughout a wipe.Enable saving for non-storage entities
(true
orfalse)
-- Applies to all entities that the plugin doesn't classify as storage entities. It's recommended to keep this disabled as there is a low but nonetheless real risk of "double entities" in some edge cases if you enable saving for anything. If you have specific entity prefabs that you know need their state saved, you can override them viaOverride saving enabled by prefab
.Override saving enabled by prefab
-- Allows you to forcibly enable or disable saving of specific entity prefabs regardless of whether you have enabled saving for the entity category. Example below."Override saving enabled by prefab": { "assets/prefabs/deployable/vendingmachine/npcvendingmachine": true, "assets/prefabs/deployable/vendingmachine/npcvendingmachines/shopkeeper_vm_invis": true }
- While saving is disabled (
Dynamic monuments
Entity prefabs to consider as monuments
-- Determines which entities are considered dynamic monuments. When an entity is considered a dynamic monument, you can define addons for it viamaspawn
and similar commands, and the plugin will ensure every instance of that entity has those addons attached. For example, Cargo Ship has been considered a dynamic monument since an early version of this plugin, but now you can define additional ones such as desert military base modules and road-side junk piles.- Note: Updating this configuration is only necessary if you want to use
maspawn
and similar commands to recognize the entity as a monument. If you want to install an external profile that defines addons for a dynamic monument (such as the CargoShipCCTV profile), it isn't necessary to update this configuration because the plugin will automatically determine that the entity is a dynamic monument by reading the profile. Additionally, if you install an external profile which defines addons for a given dynamic monument,maspawn
and similar commands will automatically recognize that entity as a dynamic monument.
- Note: Updating this configuration is only necessary if you want to use
Addon defaults
-- Determines the default values for various addon parameters when placing new addons. These options do not affect addons which have already been placed. To understand these options, see the documentation for the respective commands (maspawngroup
,maspawnpoint
,mapuzzle
).Deployable overrides
-- Determines which entity will be spawned when usingmaspawn
if you don't specify the entity name in the command. For example, while you are holding an auto turret, runningmaspawn
will spawn thesentry.bandit.static
prefab instead of theautoturret_deployed
prefab.Xmas tree decorations (item short names)
-- Determines which decorations will be automatically added toxmas_tree.deployed
entities spawned viamaspawn
.
Since underwater labs are procedurally generated, this plugin does not spawn entities relative to the monuments themselves. Instead, entities are spawned relative to specific modules. For example, if you spawn an entity in a moonpool module, the entity will also be spawned at all moonpool modules in the same lab and other labs.
Note that some modules have multiple possible vanilla configurations, so multiple instances of the same module might have slightly different placement of vanilla objects. That happens because Rust spawns semi-random dwelling entities in them, which you can learn about via the mashowvanilla
command. You can use that command to get an idea of where dwellings spawn, in order to avoid placing your addons at those locations. After spawning something into a lab module, it's also recommended to inspect other instances of that module to make sure the entity placement isn't overlapping a dwelling entity.
Sharing a profile via a website allows recipients to install the profile with a single command. Here's how it works:
- Profile author locates the
oxide/data/MonumentAddons/PROFILE_NAME.json
file, wherePROFILE_NAME
is replaced with the profile's actual name. - Profile author uploads the file to a website of their choice and obtains a raw download link. For example, if hosting on pastebin or GitHub, click the "raw" button before copying the URL.
- Recipient runs a command like
mainstall <url>
using the URL provided by the profile author.
Sharing a profile via a website will eventually have additional perks, including the ability to download updates to the profile automatically, while preserving customizations you have made.
If you don't have a website to host a profile, you can simply send the profile data file to someone else over Discord or wherever. Here's how it works:
- Profile author locates the
oxide/data/MonumentAddons/PROFILE_NAME.json
file, wherePROFILE_NAME
is replaced with the profile's actual name. - Profile author sends the file to the recipient.
- Recipient downloads the file and places it in the same location on their server.
- Recipient runs the command:
maprofile enable <name>
. Alternatively, if the recipient already had a version of the profile installed and enabled, they would runmaprofile reload <name>
.
Use the following steps to set persistent images for signs or photo frames. Requires the Sign Artist plugin to be installed with the appropriate permissions granted.
- Spawn a sign with
maspawn sign.large
. You can also use other sign entities, photo frames, neon signs, or carvable pumpkins. - Use a Sign Artist command such as
sil
,silt
orsili
to apply an image to the sign.
That's all you need to do. This plugin detects when you use a Sign Artist command and automatically saves the corresponding image URL or item short name in the profile's data file for that particular sign. When the plugin reloads, Sign Artist is called to reapply that image. Any change to a sign will also automatically propagate to all copies of that sign at duplicate monuments.
Notes:
- Only players with the
monumentaddons.admin
permission can edit signs that are managed by this plugin, so you don't have to worry about random players vandalizing the signs. - Due to a client bug with parenting, having multiple signs on a dynamic monument (such as Cargo Ship) will cause them to all display the same image.
Use the following steps to resize entities. Requires the Entity Scale Manager plugin to be installed with the appropriate permissions granted.
- Spawn any entity with
maspawn <entity>
. - Resize the entity with
scale <size>
.
That's all you need to do. This plugin detects when an entity is resized and automatically applies that scale to copies of the entity as matching monuments, and saves the scale in the profile's data file. When the plugin reloads, Entity Scale manager is called to reapply that scale.
Use the following steps to set up a heli vendor at a custom location.
- Aim where you want to spawn the vendor and run
maspawn bandit_conversationalist
. - Aim where you want purchased helicopters to spawn and run
maspawn airwolfspawner
.
Use the following steps to set up a boat vendor at a custom location.
- Aim where you want to spawn the vendor and run
maspawn boat_shopkeeper
. - Aim where you want purchased boats to spawn and run
maspawn boatspawner
.
Notes:
- The heli vendor and spawner must be within 40m of each other to work.
- The boat vendor and spawner must be within 20m of each other to work.
- The boat vendor will not have a vending machine. This can be improved upon request.
Use the following steps to set up CCTV cameras and computer stations.
- Spawn a CCTV camera with
maspawn cctv.static
. - Update the camera's RC identifier with
masetid <id>
while looking at the camera. - Update the direction the camera is facing with
masetdir
while looking at the camera. This will cause the camera to face you, just like with deployable CCTV cameras. - Spawn a static computer station with
maspawn computerstation.static
.
That's all you need to do. The rest is automatic. Read below if you are interested in how it works.
- When a camera spawns, or when its RC identifier changes, it automatically adds itself to nearby static computer stations, including vanilla static computer stations (e.g., at bunker entrances or underwater labs).
- When a camera despawns, it automatically removes itself from nearby static computer stations.
- When a static computer station spawns, it automatically adds nearby static CCTV cameras.
Note: As of this writing, there is currently a client bug where having lots of RC identifiers saved in a computer station may cause some of them to not be displayed. This is especially an issue at large underwater labs. If you add custom CCTVs in such a location, some of them may not show up in the list at the computer station. One thing you can do to partially mitigate this issue is to use shorter RC identifier names.
Use the following steps to set up a custom bandit wheel to allow players to gamble scrap.
- Spawn a chair with
maspawn chair.static
. You can also use other mountable entities. - Spawn a betting terminal next to the chair with
maspawn bigwheelbettingterminal
. This needs to be close to the front of the chair so that players can reach it while sitting. Getting this position correct is the hardest part. - Keep spawning as many chairs and betting terminals as you want.
- Spawn a bandit wheel with
maspawn big_wheel
. This needs to be within 30 meters (equivalent to 10 foundations) of the betting terminals to find them.
Notes:
- If a betting terminal spawns more than 3 seconds after the wheel, the wheel won't know about it. This means that if you add more betting terminals after spawning the wheel, you will likely have to reload the profile to respawn the wheel so that it can find all the betting terminals.
To place a CH47 drop zone, run the command maprefab dropzone
. It can be removed using the makill
command.
Note: In order for a CH47 to drop a crate at this location, it must be within a monument that the chinook will visit. You can use the Better Chinook Patrol plugin to customize which monuments can be visited.
generator.static
(notgenerator.small
)fusebox
cardreader
pressbutton
(notbutton
)doormanipulator
(notdoorcontroller.deployed
)simpleswitch
(notswitch
)orswitch
(notorswitch.entity
)timerswitch
(nottimer
)xorswitch
(notxorswitch.entity
)door.hinged.security.green
,door.hinged.security.blue
,door.hinged.security.red
,door.hinged.underwater_labs.security
,door.hinged.garage_security
Note: Kinetic IO elements such as wheelswitch
and sliding_blast_door
are not currently able to be controlled by electricity.
- Bind
maspawn
andmakill
to keys while setting up entities to save time. Remember that runningmaspawn
without specifying the entity name will spawn whichever deployable you are currently holding. Note: You may need to rotate the placement guide in some cases because the server cannot detect which way you have it rotated. - Install Telekinesis and bind
tls
to a key to quickly toggle entity movement controls. - Be careful where you spawn entities. Make sure you are aiming at a point that is clearly inside a monument, or it may spawn in an unexpected location at other instances of that monument or for different map seeds. If you are aiming at a point where the terrain is not flat, that usually means it is not in the monument, though there are some exceptions.
- If you receive the "Not at a monument" error, and you think you are at a monument, it means the Monument Finder plugin may have inaccurate bounds for that monument, such as if the monument is new to the game, or if it's a custom monument. Monument Finder provides commands to visualize the monument bounds, and configuration options to change them per monument.
- If you accidentally
ent kill
an entity that you spawned with this plugin, you can reload the entity's profile (or reload the whole plugin) to restore it.
Ensure the plugin is loaded with saving disabled for all types of entities, then simply remove the plugin. All addons will be automatically removed.
Coming soon. For early access, see Custom Addons API documentation.
See Custom Monuments API documentation.
void OnMonumentAddonsInitialized()
- Called after this plugin has loaded and finished spawning all addons for all enabled profiles
void OnMonumentEntitySpawned(BaseEntity entity, UnityEngine.Component monument, Guid guid)
- Called after this plugin has spawned an entity at a monument
- Called only for entity addons, not for entities spanwed by spawn points, but this may change in the future (possibly a new hook in the future)
- The
component
parameter represents the monument object - The
guid
parameter refers to the unique ID present in the profile data file - Note: When the plugin is configured to save entities, this hook will be called again when the plugin finds and registers the existing entity (the entity will not technically be respawned, although the hook name suggests it was spawned)
void OnMonumentPrefabCreated(GameObject gameObject, Component monument, Guid guid)
- Called after this plugin has created a non-entity prefab at a monument
- Called only for addons placed via
maprefab
- The
component
parameter represents the monument object - The
guid
parameter refers to the unique ID present in the profile data file
object OnDynamicMonument(BaseEntity entity)
- Called when this plugin wants to evaluate whether a given entity can be considered a dynamic monument.
- Called only for entity prefabs configured under
Dynamic monuments
->Entity prefabs to consider as monuments
- Returning
false
will prevent that specific entity from being considered a custom monument