Giter Club home page Giter Club logo

monumentaddons's Introduction

Video Tutorial

Video Tutorial

Features

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

Required plugins

  • Monument Finder -- Simply install. No configuration or permissions needed except for custom monuments.

Recommended compatible plugins

  • 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 or shopkeeper_vm_invis prefabs.

What kinds of things can I do with this plugin?

  • 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

Permissions

  • monumentaddons.admin -- Allows all commands. Grant this to admins or moderators, not to normal players.

Getting started

Installing existing profiles

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!

Spawning static entities

Follow these steps to spawn static entities.

  1. Go to any monument, such as a gas station.
  2. Aim somewhere, such as a floor, wall or ceiling.
  3. 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 run maspawn 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).

Creating puzzles

Follow these steps to create an example puzzle.

  1. Go to any monument, such as a gas station.
  2. 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.
  3. Aim at a wall, outside the puzzle room, then run the command maspawn fusebox.
  4. Aim at the floor in a doorway, then run the command maspawn security.blue. Reposition the door with Telekinesis if needed.
  5. Aim at the wall next to the front side of the doorway, then run the commands maspawn cardreader and maspawn doormanipulator.
  6. Aim at the wall next to the back side of the doorway, then run the commands maspawn pressbutton, and maspawn orswitch.
  7. Aim at the card reader, then run the command macardlevel 2 to make it a blue card reader.
  8. Equip a wire tool, then run the command mawire.
  9. Connect generator.static -> fusebox -> cardreader -> orswitch -> doormanipulator.
  10. Connect pressbutton -> orswitch.

Creating spawn points

Follow these steps to create example spawn points.

  1. Go to any monument, such as a gas station.
  2. Aim somewhere on the ground.
  3. Run the command maspawngroup create MyFirstSpawnGroup to create a spawn group and a spawn point.
  4. Run the command maspawngroup add radtown/crate_normal 30.
  5. Run the command maspawngroup add radtown/crate_normal_2 70.
  6. Run the command maspawngroup add crate_basic 100.
  7. 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.
  8. Aim at the 2nd spawn point, and run the command maspawnpoint set RandomRadius 1.5.
  9. Aim at either spawn point, and run the command maspawngroup set MaxPopulation 2.
  10. 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.

Commands

  • 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 and station-we-0 will both use the TrainStation alias, allowing all train stations to have the same entities.
    • Saves the entity info to the plugin data file so that reloading the plugin (or restarting the server) will respawn the entity.
  • maprefab <prefab> -- Creates an instance of a non-entity prefab. Note: This is very limited. Only prefabs with the assets/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 as height.
  • maundo -- Undo a recent makill 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.
  • 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.

Puzzles

  • mawire <optional color> -- Temporarily enhances your currently held wire tool, allowing you to connect electrical entities spawned via maspawn. Allowed colors: Default, Red, Green, Blue, Yellow, Pink, Purple, Orange, White, LightBlue, Invisible. Note: When using the Invisible 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 -- While true, the puzzle will not make progress toward the next reset while any players are within the distance PlayerDetectionRadius.
    • 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 while PlayersBlockReset 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).

Spawn points and spawn groups

  • 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.

Spawn groups

  • 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 using maspawnpoint create <group_name>.
    • Color: string -- The debug color of the spawn group, when using mashow. Supports some color names such as "red", as well as HTML color codes like #F90 and #FF9900. Set to none 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 to 0 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 -- While true, 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). While false, the spawn group will not spawn any entities initially, but will still spawn them later according to the defined schedule.
    • PreventDuplicates: true/false -- While true, 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 -- While true, 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 -- While true, 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 run maspawngroup 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 set SpawnPerTickMin to 1 and SpawnPerTickMax 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.

Spawn points

  • 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 use setall to apply the change to all spawn points within the same spawn group.
    • Exclusive: true/false -- While true, only one entity can be spawned at this spawn point at a time.
    • DropToGround: true/false -- While true, entities will be spawned on the nearest flat surface below the spawn point.
    • CheckSpace: true/false -- While true, entities can only spawn at this spawn point when there is sufficient space. This option is recommended for vehicle spawn points.
    • RandomRotation : true/false -- While true, 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 is 0.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 within 2 meters for normal spawn points, or RandomRadius + 1 meter for radial spawn points. Setting this value to greater than 0 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

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 the oxide/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. Running maspawn <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.

Configuration

{
  "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 using mashow). 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 using mashow 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 than Display 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 within Display 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 using mashow <profile_name>).
  • Save entities between restarts/reloads to preserve their state throughout a wipe -- Determines whether entities spawned by maspawn 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 via maspawn. 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 via maspawn 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 or false) -- 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 or false) -- 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 via Override 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
      }
  • 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 via maspawn 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.
  • 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 using maspawn if you don't specify the entity name in the command. For example, while you are holding an auto turret, running maspawn will spawn the sentry.bandit.static prefab instead of the autoturret_deployed prefab.
  • Xmas tree decorations (item short names) -- Determines which decorations will be automatically added to xmas_tree.deployed entities spawned via maspawn.

Localization

How underwater labs work

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.

Instructions for sharing profiles

How to share a profile via a website

Sharing a profile via a website allows recipients to install the profile with a single command. Here's how it works:

  1. Profile author locates the oxide/data/MonumentAddons/PROFILE_NAME.json file, where PROFILE_NAME is replaced with the profile's actual name.
  2. 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.
  3. 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.

How to share a profile via direct file transfer

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:

  1. Profile author locates the oxide/data/MonumentAddons/PROFILE_NAME.json file, where PROFILE_NAME is replaced with the profile's actual name.
  2. Profile author sends the file to the recipient.
  3. Recipient downloads the file and places it in the same location on their server.
  4. Recipient runs the command: maprofile enable <name>. Alternatively, if the recipient already had a version of the profile installed and enabled, they would run maprofile reload <name>.

Instructions for plugin integrations

Sign Artist integration

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.

  1. Spawn a sign with maspawn sign.large. You can also use other sign entities, photo frames, neon signs, or carvable pumpkins.
  2. Use a Sign Artist command such as sil, silt or sili 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.

Entity Scale Manager integration

Use the following steps to resize entities. Requires the Entity Scale Manager plugin to be installed with the appropriate permissions granted.

  1. Spawn any entity with maspawn <entity>.
  2. 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.

Instructions for specific addons

Heli & boat vendors

Use the following steps to set up a heli vendor at a custom location.

  1. Aim where you want to spawn the vendor and run maspawn bandit_conversationalist.
  2. 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.

  1. Aim where you want to spawn the vendor and run maspawn boat_shopkeeper.
  2. 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.

CCTV cameras & computer stations

Use the following steps to set up CCTV cameras and computer stations.

  1. Spawn a CCTV camera with maspawn cctv.static.
  2. Update the camera's RC identifier with masetid <id> while looking at the camera.
  3. 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.
  4. 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.

Bandit wheel

Use the following steps to set up a custom bandit wheel to allow players to gamble scrap.

  1. Spawn a chair with maspawn chair.static. You can also use other mountable entities.
  2. 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.
  3. Keep spawning as many chairs and betting terminals as you want.
  4. 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.

CH47 drop zones

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.

Common puzzle entities

  • generator.static (not generator.small)
  • fusebox
  • cardreader
  • pressbutton (not button)
  • doormanipulator (not doorcontroller.deployed)
  • simpleswitch (not switch)
  • orswitch (not orswitch.entity)
  • timerswitch (not timer)
  • xorswitch (not xorswitch.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.

Tips

  • Bind maspawn and makill to keys while setting up entities to save time. Remember that running maspawn 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.

Troubleshooting

  • 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.

Uninstallation

Ensure the plugin is loaded with saving disabled for all types of entities, then simply remove the plugin. All addons will be automatically removed.

Developer API

API_RegisterCustomAddon (experimental)

Coming soon. For early access, see Custom Addons API documentation.

API_RegisterCustomMonument

See Custom Monuments API documentation.

Developer hooks

OnMonumentAddonsInitialized

void OnMonumentAddonsInitialized()
  • Called after this plugin has loaded and finished spawning all addons for all enabled profiles

OnMonumentEntitySpawned

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)

OnDynamicMonument

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

monumentaddons's People

Contributors

whetethunger avatar m-hynek avatar hunterz avatar umod-org[bot] avatar

Stargazers

Jean-Michel Morin avatar Konstantin avatar ORANGEMART avatar Alex avatar HaMiLToN5 avatar Shane avatar  avatar

Watchers

 avatar

monumentaddons's Issues

Add support for new NPC spawn group settings

Since the introduction of the Arctic Military Base monument, vanilla spawn groups now have the capability to configure various NPC properties such as SenseRange, TargetLostRange, AttackRangeMultiplier, ListenRange, CanUseHealingItemsChance. The plugin should be updated to support these as well.

[Installation issue] NullReferenceException when installing prebuilt profiles

I run into an issue trying to install the prebuilt profiles available.
Example command:
mainstall OutpostExtended


Web request callback raised an exception (NullReferenceException: Object reference not set to an instance of an object)
  at Oxide.Plugins.MonumentAddons.FindMonumentsByAlias (System.String alias) [0x00000] in <289deaec3b6c431787532f125b806eae>:0 
  at Oxide.Plugins.MonumentAddons.GetMonumentsByAliasOrShortName (System.String aliasOrShortName) [0x0007e] in <289deaec3b6c431787532f125b806eae>:0 
  at Oxide.Plugins.MonumentAddons+ProfileController.EnqueueAll (Oxide.Plugins.MonumentAddons+ProfileCounts profileCounts) [0x00044] in <289deaec3b6c431787532f125b806eae>:0 
  at Oxide.Plugins.MonumentAddons+ProfileController.Load (Oxide.Plugins.MonumentAddons+ProfileCounts profileCounts) [0x0001e] in <289deaec3b6c431787532f125b806eae>:0 
  at Oxide.Plugins.MonumentAddons+ProfileController.Enable (Oxide.Plugins.MonumentAddons+Profile newProfileData) [0x00029] in <289deaec3b6c431787532f125b806eae>:0 
  at Oxide.Plugins.MonumentAddons+<SharedCommandInstallProfile>c__AnonStorey5.<>m__0 (Oxide.Plugins.MonumentAddons+Profile profile) [0x001af] in <289deaec3b6c431787532f125b806eae>:0 
  at Oxide.Plugins.MonumentAddons+<DownloadProfile>c__AnonStorey7.<>m__0 (System.Int32 statusCode, System.String responseBody) [0x000a6] in <289deaec3b6c431787532f125b806eae>:0 
  at Oxide.Core.Libraries.WebRequests+WebRequest.<OnComplete>b__42_0 () [0x00034] in <99d545163fdd4d57a562df7989f2ca0a>:0

Running server on Ubuntu 22, not sure if it's anything basic / obvious that I'm missing.

Add more options to `mapaste`

CopyPaste supports several parameters when running the paste command, including height. One server owner expressed a desire to use some of these options.

Add support for custom addons

Problem

Supported addons only include individual entities, spawn points, and pastes. The list of addons people might desire to spawn at monuments is unbounded, especially when you consider the possibility of spawning creations of other plugins.

Solution

Add an API that allows other plugins to define custom entities. Players will be able to run maspawn <addon name> to place a custom addon, then use commands from the owner plugin to modify that addon. Monument Addons should take care of duplicating the addon at multiple instances of the monument. The definition of the addon, as provided by the owner plugin, will provide callback to Monument Addons to fulfill various purposes such as spawning and killing instances of the custom addon.

Monuments should be passed to the plugin that owns the addon so that they can parent objects to dynamic monuments such as Cargo Ship.

Allow custom wiring and puzzles

Currently, the plugin allows placing standalone electrical entities, but users cannot create circuits, so they can't do things like create puzzles similar to those that appear at vanilla monuments.

Wiring functionality

  • Implement custom wire tool to allow connecting electrical entities spawned via maspawn
  • Audit which IO entities should be powered/On by default, and update them to use appropriate flags (not necessarily the On flag which is currently being applied broadly), think about ramifications in regard to #23
  • Automatically power eligible entities when disconnected via the custom wire tool
  • Automatically power eligible entities when their source entity is destroyed makill-ed
  • Implement commands to set the time (for timers), RF frequency, branch amount, and other settings of electrical entities that don't have prompts
  • Block vanilla interactions with select IO entities that do not have static variants, such as branches
  • Automatically show IO slots when using the custom wire tool and looking at an eligible IO entity
  • Display a temporary wire while starting a wire from an input IO slot (will need to create a temporary IO entity to network this)

Puzzle functionality

  • Document that certain entities such as static generators automatically have puzzle reset features
  • Allow creating custom customizing puzzle resets
  • Allow associating spawn points groups with puzzle resets, ideally with vanilla puzzle resets as well
  • Update mashowvanilla to show puzzle reset information for user reference (Canceled because some cannot easily be detected without lagging the server, particularly the ones at both Oil Rig monuments)

Open questions

  • Should deployable door controllers be automatically paired, or should we just instruct people to use static door controllers? -- Yes, why not
  • Should we implement changes to block vanilla interactions on deployable timers and related items (timers, RF frequency) which have static entity alternatives, or should we just recommend static alternatives?
  • How do we allow kinetic entities to be powered via circuits? For example, press a button to open a sliding blast door. Currently, the vanilla logic is not able to do this, so significant custom logic is required which will likely have significant performance consequences.

Allow placing sprays at monuments

Rust recently introduced spray decals which players can spray onto objects using the spray can. We should add the ability to add these to monuments.

Possible usage:

  • maspray <skin id> (default spray is skin id is not specified)
  • maspawn spray.decal + maskin <skin id>

Requirements:

  • Sprays do not decay (server side or client side)
  • Sprays cannot be washed away by splashing water
  • Sprays can be resized with entity scale manager
  • Spray icon can be changed with maskin <skin id> (might be tricky if the spray is attached to an entity, especially one that is spawned by the plugin)

Additional considerations:

  • Free hand sprays
  • Moving sprays with telekinesis

Auto turn on/off lights with day/night cycle

Currently, electrical entities and entities like candles are automatically on all the time. They should instead only turn on at night. The time should be configurable, and this should only apply to entities that are above terrain. Entities below the terrain level should always be on.

Allow copying and pasting spawn points

Problem

Currently, it can take quite a few commands to configure a spawn point or spawn group to your liking. Users who want to create multiple spawn points or groups with those settings have to resort to re-running the commands again, or copying and pasting contents between profiles data files and reloading profiles.

Solution

Add new commands which allow a player to copy the settings of the spawn point they are looking at, then paste that to another location.

New commands:

  • maspawngroup copy
  • maspawngroup paste <new name> (must respect uniqueness)
  • maspawnpoint copy
  • maspawnpoint paste <destination group name>

The above copy commands should also be able to be used on vanilla spawn points.

Add `maundo` command to undo last `makill`

Currently, when somebody runs makill, it's possible that depending on where the raycast hits, the player may accidentally remove the wrong addon. To allow players to revert such a mistake, we should add an maundo command to revert the most recently deleted addon. This should be tracked separately per player.

Allow setting static telephone name

Currently, users can place static telephone entities at monuments, but they cannot control the names. We should add a command which allows them to update the name. Care should be given to what happens if there are multiple instances of the monument, since names might need to be unique (not sure). Also consider whether the names can be auto generated in some workable fashion like the vanilla phone names which use the grid coordinates.

Fix AI running for cover

Currently, spawn points can be used to spawn NPCs, but they will sometimes run for cover when they enter combat, which can be problematic at monuments where there are no defined cover points.

Addons not working

When i try /mainstall AirwolfOutpost i get the 404 error below. is there another way to install airwolf that im missing?


Screenshot 2024-05-20 214426

Allow creating paths for NPCs

Currently, spawn points can be used to spawn entities with AI, but the AI can't be given paths or patrols. We should add commands that allow defining a path to associate with a spawn point or group. This should be made generic so it can work for multiple kinds of AI, including NPCs, Sharks and Bradley.

Allow placing ziplines

Ziplines were recently added to the game. This plugin could support two types of ziplines:

Point A to B ziplines: To place these, we would need new commands such as mazipline start and mazipline end. The start and end point would have to be in the same monument.

Zipline targets: Zipline targets would automatically be connected to nearby pylons depending on the angle. This could be added using the custom addons proposal (#10) within the plugin (where MA is the owner of the custom addon definition), rather than implementing a new type of addon. The plugin would have to recreate the logic to find nearby zipline launch points and connect or disconnect them as necessary when zipline targets are added/removed.

Add hooks

Add hooks for the following events:

  • When an entity is spawned
  • When an entity is spawned by a spawn point

Allow differentiating Train Stations by attached monument

Currently, any entities spawned at an underground Train Station will be duplicated to all Train Stations, not just ones at the same attached monument. Users would like to be able to customize the entities, vending machines, loot, and more based on the tier of the monument.

This can probably be achieved by creating a sort of pseudo monument name like launch_site_1/TrainStation. Users would have to opt-in for this behavior globally (not per monument).

Related: https://umod.org/community/monument-addons/40634-different-vending-at-different-train-stations

Automatically apply skin when running `maspawn` without arguments

Currently, users have the convenience of spawning deployables with maspawn without specifying the entity name, as long as they have the deployable in their hand. We should enhance this to automatically add the skin of the held item so the user doesn't have to use maskin after spawning it.

Allow setting entity flags

Currently, entities will have the default flags based on their prefab, plus sometimes flags that the plugin has hard-coded. We should aim to give server owners the ability to specify flags per entity if desired using a command such as maflag Reserved4 to toggle a given flag for an entity they are looking ati.

Some care should be taken to think about situations where a user wants to remove flags that the plugin is currently hard-coding.

Related:

Persist skulls inside skull trophies

Server owners want the ability to place a skull into a skull trophy and have that skull automatically added whenever the trophy is respawned. We should also add a way to prevent players from removing the skulls.

Suggested here: https://umod.org/community/monument-addons/42488-trophy-skull-support

One way to achieve this would be to implement a generic feature which allows saving container items, which would be recorded when running masave, or a new command like masaveitems to avoid saving items when running masave for other containers like vending machines. #23 could be used to lock the container to prevent players from accessing it. We should analyze if there are any other container types that could benefit from generically saving items.

If we don't implement a generic item saving feature, we could achieve this use case by implementing a command like maskull <name> which would record the skull name, add a skull, set the skull to that name, and lock the container.

Auto light lanterns

Currently, some entities will automatically be lit, but this is not the case for lanterns, despite user expectations. We should figure out which entities should be automatically lit, such as lanterns, jackolanterns, etc. and make the change to all of them. We should also mark those entities as busy to prevent players from toggling them on/off.

Spawn vehicle vendors with their vending machine

Currently, spawning an entity such as the airwolf vendor or boat vendor doesn't spawn their associated vending machine. The result is that players can see a dialogue option for a vending machine, but no vending machine is opened when that option is selected. This feature should probably be optional per NPC entity. Consider ways this can be introduced in a backwards compatible manner, so that existing NPCs don't suddenly have vending machines that weren't there previously.

Add command to register a pre-existing entity

Use cases:

  • Spawn entities via other plugins (e.g., Uber Tool) for convenience, then persist them via Monument Addons
  • Spawn signs via RustEdit, and skin them with SignArtist via Monument Addons

Related: https://umod.org/community/monument-addons/39710-allow-building-on-monuments

To achieve these use cases, we could add a new command maregister. We should not update masave to do this since users should be making a deliberate decision to register entities; we don't want users to accidentally register an entity that they mistakenly believed was already managed by the plugin.

Notes:

  • When running this command for an entity spawned by the plugin, the user should receive a descriptive error
    • This check can be implemented by running _entityTracker.IsMonumentEntity(entity)
  • When running this command on an entity spawned by a spawn point (regardless of whether it's a Monument Addons spawn point), the user should receive a different descriptive error
    • This check can be implemented by checking for the SpawnPointInstance component on the entity
  • Certain entities, particularly ones that belong natively to a monument (if possible to easily detect) should probably be disallowed from registering as a precaution
  • When registering an entity that is part of the map, the plugin probably needs to account for finding that same entity after a new wipe and removing it, to avoid having double entities
    • This check can probably be implemented by checking for the entity in World.Serialization.world.prefabs, but needs verification
  • The plugin should strive to capture as many properties as possible, such as building grade, entity flags, etc.
    • Note that entity flag support will depend on #23
  • Upon initial registration of an entity, the plugin should probably despawn and respawn it, providing early feedback to the user about whether the plugin was capable of detecting all of the relevant properties, serializing them and reapplying them
    • Without this enhancement, if the plugin isn't capable of fully managing the entity, users wouldn't realize until reloading the plugin or restarting the server, so we want to give feedback about that as soon as possible

Something we may also want to think about is whether users have a valid use case to simply apply modifications to entities that are already within monuments, without Monument Addons taking control over spawning/despawning them. Note that this would likely increase complexity significantly.

Align entities with surfaces

Currently, players expect that spawning sign entities will spawn them flat against a wall, similar to what happens when deploying a sign. However, what actually happens is that the sign will be rotated based on the player's view angles. We should improve this for select entities. Needs some research to determine which entities should automatically spawn flat on surfaces. This alignment should only happen for the initial placement, since we don't want to interfere with manual positioning that players try to do after the initial placement.

Allow spawn groups to dynamically disable depending on monument tier

Currently, vanilla spawn groups can be dynamically enabled or disabled based on the topology tier of the monument they are located at, but spawn groups created by the plugin don't have this capability. Implementing this will allow generating more accurate profiles for the Breakable Monuments project.

Add UI for managing profiles

Using the maprofile * commands is very powerful, but it would be awesome to have a UI to manage profiles.

  • Allow viewing profile metadata such as name and author, enabled/disabled/selected status
  • Allow selecting profiles
  • Allow enabling/disabling profiles
  • Allow reloading profiles
  • Allow viewing the contents of a profile
  • Allow removing specific addons
  • Allow teleporting to specific addons
  • Allow focusing on specific addons with ddraw
  • Allow browsing official downloadable profiles
  • Allow installing profiles
  • Allow updating installed profiles
  • Allow viewing upstream changes to installed profiles

Move spawn point when moving entity spawned by it

Currently, it's not possible to move a spawn point with telekinesis. We should make it so that when moving an entity spawned by a spawn point, that upon releasing Telekinesis, it moves the spawn point to the entity's location.

Add profile for underwater lab garden

Add a new example profile for the underwater lab module that has what looks like a garden. This profile should add spawn points for collectible pickup plants, like hemp, corn, etc.

Support arbitrary dynamic monuments

Currently, the plugin supports Cargo Ship as a dynamic monument. What that means is that players can attach addons to the Cargo Ship which will spawn every time a Cargo Ship entity does.

There are other good use cases for dynamic monuments, such as dwelling entities. All of the structures that spawn at the desert military base are dwelling entities. It would be cool to place a spawn point on the helipad entity so that it can periodically spawn minicopters and scrap helicopters. While someone could place a spawn point at the monument today, there's no guarantee that the helipad would spawn in the same location each map wipe. Parenting the spawn point to the helipad entity would be the best way to achieve this.

This feature should be built to be extensible so that not only dwelling entities could become dynamic monuments, but any entity could, including loot piles.

Allow updating profiles

Currently, users can install profiles from the web, but they cannot update them from the original source URL. We should add a command to examine the changes between a profile and the source URL, which will tell the user what the differences are, and give them the opportunity to download the new one.

Updating a profile should use the <profile_name>_original.json file to determine what has changed, and should not add back addons which the user removed, nor remove/modify addons which the user had modified.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.