Fancy Drop is the all-in-one solution to change anything related to Supply Drops in Rust.
WARNING BEFORE UPDATIING TO VERSION 3.0.0 OR HIGHER READ THE UPDATE NOTES!
Features
- Lag-free crate spawning
- Spawning of a number of crates as you want
- Lag free mass dropping by unlimited number of planes
- Define any flight height for planes
- Define any flight distance for planes
- Define custom Loot for SupplyDrops
- Add static items to any SupplyDrop
- Adding a light-indicator system for dropping for day or night
- Adding a sound-indicator system for dropping for day or night
- Timer system
- Removal of inbuilt event-based drop
- NEW options for Space Delivery command for a direct drop
It supports many default drop types and custom added event based drop types. Each drop type has its own settings to give a most possible unique configuration.
Drop Type Options
- Additional height for the plane
- Air resistance of the crates to define the fallspeed
- Distance between dropped crates
- Despawn time for dropped crates
- Optional usage of static item lists
- Define the number of crates
- Define the number of items in the crates
- The speed of the plane
- Optional usage of THE custom loot table
- Extra announcement text to be informed about the drop content/type
Alpha Loot Support
Fancy Drop detects any active usage of populating Supply Drops by Alpha Loot and does then deactivate ALL actions on changing the loot content.
Credits to @k1lly0u for the patch
Better Loot Support
Fancy Drop detects any active usage of populating Supply Drops by Better Loot and does then deactivate ALL actions on changing the loot content.
Chat Commands
/droprandom > Initiates a random drop on the map; The random dropposition is calculated by serverdefault function by the plane itself =>
/droprandom
/droptopos >
/droptopos X Z'
=> droptopos 12 34' | takes NO Y(Height) and needs only numbers/droptoplayer > Initates a drop to a given player =>
/droptoplayer johndoe
| names will be autocompleted, so you'll need only parts of the full name/dropdirect > Initates a (direct)drop to a given player; this means, a drop'only' without a plane will be created above the players position with a distance(up) of 100 meters =>
/dropdirect johndoe
| names will be autocompleted, so you'll need only parts of the full name/dropspace > Initiates a (direct)drop to a given player; this means, a drop'only' without a plane will be delivered via a Space Delivery above the players position with a distance of 450 meters with a loud BOOM when it enters the atmosphere =>
/dropspace johndoe
| names will be autocompleted, so you'll need only parts of the full name/dropmass > Initiates a random massdrop on map; with no number given, it will drop the default amount (default: 5), or specify the amount with
/dropmass 10
to drop 10 crates random on the map/droptomass > Initiates a massdrop on a given area specified by X and Z (full numbers), and optional the amount of crates to drop (default:5), and optional another radius (in meters) then default (default: 100) =>
/droptomass 100 200 20 50
will drop around the position x:100 z:200 an amount of 20 drops within a radius of 50 meters
Note: By providing '0 0' for the coords, it wil choose a random position_
Console Commands
- ad.random > Initiates a random drop on the map; the random drop position is calculated by server default function by the plane itself.
This command can be extended by choosing the drop type AND optional static item list by this format: ad.random <droptype> <optional:itemlist>
**Example 1: ** ad.random custom_event
**Example 2: ** ad.random custom_event regular
**Example 3: ** ad.random regular massdrop
**Example 4: ** ad.random regular custom_event
- ad.topos > Initiates a drop on the map to the given x and z coordinates > 'ad.topos ' =>
ad.topos. 12 34
This command can be extended by choosing the drop type AND optional static item list by this format: ad.topos <x> <z> <droptype> <optional:itemlist>
**Example 1: ** ad.topos 12 34 custom_event
**Example 2: ** ad.topos 56 78 massdrop dropdirect
**Example 3: ** ad.topos 46 58 massdrop custom_event
- ad.massdrop > Initiates a random massdrop on map; with no number given, it will drop the default amount (default: 5), or specify the amount with
ad.massdrop 10
to drop 10 crates random on the map.
This command can be extended by choosing the drop type AND optional static item list by this format: ad.massdrop <planes> <droptype> <optional:itemlist>
**Example 1: ** ad.massdrop 10 custom_event
**Example 2: ** ad.massdrop 20 supplysignal regular
**Example 3: ** ad.massdrop 15 supplysignal custom_event
- ad.massdropto > Initiates a massdrop on a given area specified by X and Z (full numbers), and optional the amount of crates to drop (default:5), and optional another radius (in meters) then default (default: 100) =>
ad.massdropto 100 200 20 50
will drop around the position x:100 z:200 an amount of 20 drops within a radius of 50 meters
Note: By providing '0 0' for coords, it will choose a random position.
This command can be extended by choosing the drop type AND optional static item list by this format: ad.massdropto <x> <z> <planes> <radius> <droptype> <optional:itemlist>
**Example 1: ** ad.massdropto 12 34 20 50 custom_event
**Example 2: ** ad.massdropto 56 78 50 100 supplysignal regular
**Example 3: ** ad.massdropto 46 58 25 100 supplysignal custom_event
ad.toplayer > Initates a drop to a given player =>
ad.toplayer johndoe'
| names will be autocompleted, so you'll need only parts of the full namead.dropplayer > Initates a (direct)drop to a given player; this means, a drop'only' without a plane will be created above the players position with a distance(up) of 100 meters =>
ad.dropplayer johndoe
| names will be autocompleted, so you'll need only parts of the full namead.dropspace > Initiates a (direct)drop to a given player; this means, a drop'only' without a plane will be delivered via a Space Delivery above the players position with a distance of 450 meters with a loud BOOM when it enters the atmosphere =>
ad.dropspace johndoe
| names will be autocompleted, so you'll need only parts of the full namead.timer > Does reset the current timer and sets random a new depending on the config-file =>
ad.timer 5
will for example define exactly the time for the next timed airdrop; the timer will be calculated as normal again after this timer is run.ad.cleanup > The cleanup is a little helper for testing purposes or accidently to high initated massdrop; It stops the massdrop-routine, removes ALL planes and ALL airdrops.
Broadcasts
The usage of the default droptypes regular, massdrop and supplysignal will always force such information type. So its recommended to use only custom types with the supported commands, which gives back the correct information to be broadcasted.
**Example: ** ad.massdrop 10 supplysignal
would announce that someone has used a supply signal, so better to use custom types instead.
Configuration
Note: crateAirResistance should never be 0 - the lowest this should ever be set to is 0.6
{
"Debug": {
"Enable Debugging to Console": false
},
"General Settings": {
"Admin messages color": "#c0c0c0",
"AuthLevel needed for console commands": 1,
"Broadcast messages color": "#ffffff",
"Chat/Message prefix": "[ZTL Drop Services]",
"Prefix color": "#00ffff",
"Prefix format": "<size=12><color={0}>{1}</color>: ",
"GUI Announce command": "announce",
"Show message to admin after command usage": true,
"Time for active smoke of SupplySignal (default is 210)": 210.0,
"Lock DirectDrop to be looted only by target player": true,
"Lock SignalDrop to be looted only by target player": false,
"Unlock crates only after player stopped looting": false
},
"Airdrop & General Plane Settings": {
"Default radius for location based massdrop": 100.0,
"Delay between Massdrop plane spawns": 0.66,
"Massdrop default plane amount": 5,
"Multiplier for (plane height * highest point on Map); Default 1.0": 1.0,
"Multiplier for overall flight distance; lower means faster at map": 1.25,
"Disable SupplySignal randomization": false,
"Visual & Sound Effects Settings": {
"Use Explosion Sound Effect when hits ground position": false,
"Deploy Smoke on drop as it falls": false,
"Deploy with Audio Alarm on drop": false,
"Deploy with Audio Alarms on drop only during the night": false,
"Deploy with Spinning Siren Light on drop": false,
"Deploy with Spinning Siren Light on drop only during the night": false,
"Enable Rocket Signal upon Supply Drop Landing": false,
"Signal rocket speed": 15.0,
"Signal rocket explosion timer": 15.0
},
"Space Delivery Drop Settings": {
"Incoming Space Delivery Supply Drop velocity": 120.0,
"Parachute deploy distance from ground": 50.0
}
},
"Allow Damage Airdrop Settings": {
"Players can shoot down the drop": true,
"Players can shoot down the drop - needed hits": 3,
"Set Angular Drag for drop": 0.1,
"Set Drag for drop (drop resistance)": 0.3,
"Set drop allow to explode on impact": true,
"Set drop chance exploding on impact (x out of 100)": 25,
"Set Mass weight for drop": 0.75
},
"Notification Settings": {
"Maximum distance in meters to get notified about landed Drop": 1000.0,
"Maximum distance in meters to get notified about looted Drop": 1000.0,
"Notify a player about incoming Drop to his location": true,
"Notify a player about spawned Drop at his location": true,
"Notify a player about Space Delivery Drop at his location": true,
"Notify admins per chat about player who has thrown SupplySignal": false,
"Notify console at Drop by SupplySignal": true,
"Notify console at timed-regular Drop": true,
"Notify console when a Drop is being looted": true,
"Notify console when Drop is landed": false,
"Notify console when Drop is spawned": false,
"Notify console when Drop landed/spawned only at the first": true,
"Notify players at custom/event Drop": true,
"Notify players at custom/event Drop including Coords": false,
"Notify players at custom/event Drop including Grid Area": false,
"Notify players at Drop by SupplySignal": false,
"Notify players at Drop by SupplySignal including Coords": false,
"Notify players at Drop by SupplySignal including Grid Area": false,
"Notify players at Massdrop": true,
"Notify players at Random/Timed Drop": true,
"Notify players at Random/Timed Drop including Coords": false,
"Notify players at Random/Timed Drop including Grid Area": false,
"Notify players when a Drop is being looted": false,
"Notify players when a Drop is being looted including coords": false,
"Notify players when a Drop is being looted including Grid Area": false,
"Notify players when Drop is landed about distance": false,
"Notify Players who has thrown a SupplySignal": false,
"Notify Players who has thrown a SupplySignal including coords": false,
"Notify Players who has thrown a SupplySignal including Grid Area": false,
"Use GUI Announcements for any Drop notification": false
},
"SimpleUI": {
"SimpleUI_Enable": false,
"SimpleUI_FontSize": 25,
"SimpleUI_HideTimer": 10.0,
"SimpleUI_NoticeColor": "1 1 1 0.9",
"SimpleUI_ShadowColor": "0.1 0.1 0.1 0.5",
"SimpleUI_Top": 0.05,
"SimpleUI_Left": 0.1,
"SimpleUI_MaxWidth": 0.8,
"SimpleUI_MaxHeight": 0.1
},
"Timer - Random Event": {
"Use Airdrop timer": true,
"Used Airdrop timer command": "random",
"Minimum players for timed Drop": 1,
"Minimum minutes for random timer delay": 30,
"Maximum minutes for random timer delay": 60,
"Reset Timer after manual random drop": false,
"Remove builtIn Airdrop": true,
"Cleanup old Drops at serverstart": true
},
"Timers- System Timers": {
"Log to console": true,
"Minimum players for running Timers": 0,
"Use RealTime": false,
"RealTime": {
"16:00": "ad.massdrop 3",
"18:00": "ad.toplayer *"
},
"Use ServerTime": false,
"ServerTime": {
"6": "ad.massdrop 3",
"18": "ad.massdropto 0 0 5 100"
}
},
"Drop Settings": {
"DropDefault": {
"minCrates": 1,
"maxCrates": 1,
"cratesGap": 50,
"despawnMinutes": 15,
"crateAirResistance": 2.0,
"useCustomLootTable": false,
"CustomLootListName": "regular",
"planeSpeed": 35,
"additionalheight": 0
},
"DropTypes": {
"regular": {
"minCrates": 1,
"maxCrates": 1,
"cratesGap": 50,
"despawnMinutes": 15,
"crateAirResistance": 2.0,
"useCustomLootTable": false,
"CustomLootListName": "regular",
"planeSpeed": 35,
"additionalheight": 0
},
"supplysignal": {
"minCrates": 1,
"maxCrates": 1,
"cratesGap": 50,
"despawnMinutes": 15,
"crateAirResistance": 2.0,
"useCustomLootTable": false,
"CustomLootListName": "supplysignal",
"planeSpeed": 35,
"additionalheight": 0
},
"massdrop": {
"minCrates": 1,
"maxCrates": 1,
"cratesGap": 50,
"despawnMinutes": 15,
"crateAirResistance": 2.0,
"useCustomLootTable": false,
"CustomLootListName": "massdrop",
"planeSpeed": 45,
"additionalheight": 0
},
"dropdirect": {
"minCrates": 1,
"maxCrates": 1,
"cratesGap": 50,
"despawnMinutes": 15,
"crateAirResistance": 2.0,
"useCustomLootTable": false,
"CustomLootListName": "dropdirect",
"planeSpeed": 65,
"additionalheight": 0
},
"custom_event": {
"minCrates": 1,
"maxCrates": 1,
"cratesGap": 50,
"despawnMinutes": 15,
"crateAirResistance": 2.0,
"useCustomLootTable": false,
"CustomLootListName": "custom_event",
"planeSpeed": 95,
"additionalheight": 0,
"notificationInfo": "Custom Stuff"
}
}
},
"Custom Loot Items": {
"DropTypes": [
{
"DropType Name": "regular",
"Minimum amount of items to spawn": 2,
"Maximum amount of items to spawn": 6,
"Custom Loot Contents": [
{
"Shortname": "metalspring",
"Minimum amount of item": 2,
"Maximum amount of item": 6,
"Skin ID": 0,
"Display Name": null
},
{
"Shortname": "mining.quarry",
"Minimum amount of item": 1,
"Maximum amount of item": 2,
"Skin ID": 0,
"Display Name": null
}
]
},
{
"DropType Name": "massdrop",
"Minimum amount of items to spawn": 2,
"Maximum amount of items to spawn": 6,
"Custom Loot Contents": [
{
"Shortname": "metalpipe",
"Minimum amount of item": 1,
"Maximum amount of item": 2,
"Skin ID": 0,
"Display Name": null
},
{
"Shortname": "pistol.revolver",
"Minimum amount of item": 1,
"Maximum amount of item": 1,
"Skin ID": 0,
"Display Name": null
}
]
},
{
"DropType Name": "dropdirect",
"Minimum amount of items to spawn": 2,
"Maximum amount of items to spawn": 6,
"Custom Loot Contents": [
{
"Shortname": "syringe.medical",
"Minimum amount of item": 2,
"Maximum amount of item": 6,
"Skin ID": 0,
"Display Name": null
},
{
"Shortname": "largemedkit",
"Minimum amount of item": 1,
"Maximum amount of item": 2,
"Skin ID": 0,
"Display Name": null
}
]
},
{
"DropType Name": "supplysignal",
"Minimum amount of items to spawn": 2,
"Maximum amount of items to spawn": 6,
"Custom Loot Contents": [
{
"Shortname": "metal.fragments",
"Minimum amount of item": 1,
"Maximum amount of item": 4,
"Skin ID": 0,
"Display Name": null
},
{
"Shortname": "metal.facemask",
"Minimum amount of item": 1,
"Maximum amount of item": 1,
"Skin ID": 0,
"Display Name": null
}
]
},
{
"DropType Name": "custom_event",
"Minimum amount of items to spawn": 2,
"Maximum amount of items to spawn": 6,
"Custom Loot Contents": [
{
"Shortname": "fish.cooked",
"Minimum amount of item": 2,
"Maximum amount of item": 6,
"Skin ID": 0,
"Display Name": null
},
{
"Shortname": "metal.plate.torso",
"Minimum amount of item": 1,
"Maximum amount of item": 1,
"Skin ID": 0,
"Display Name": null
}
]
}
]
},
"Version": {
"Major": 3,
"Minor": 2,
"Patch": 6
}
}
Localization
{
"msgDropSignal": "<size=12>Someone ordered an Air Drop</size>",
"msgDropSignalCoords": "<size=12>Someone ordered an Air Drop to position <color=#ffff00>X:{0} Z:{1}</color></size>",
"msgDropSignalAdmin": "<size=12>Supply Signal thrown by '{0}' at: {1}</size>",
"msgDropSignalByPlayer": "<size=12>Supply Signal thrown by <color=#ffff00>{0}</color></size>",
"msgDropSignalByPlayerCoords": "<size=12>Supply Signal thrown by <color=#ffff00>{0}</color> at position <color=#ffff00>X:{1} Z:{2}</color></size>",
"msgDropRegular": "<size=12>A Cargo Plane will deliver the daily Air Drop in a few moments</size>",
"msgDropRegularCoords": "<size=12>A Cargo Plane will deliver the daily Air Drop at <color=#ffff00>X:{0} | Z:{1}</color> in a few moments</size>",
"msgDropMass": "<size=12>Mass Air Drop incoming</size>",
"msgDropCustom": "<size=12>Eventdrop <color=#ffa500>{0}</color> is on the way</size>",
"msgDropCustomCoords": "<size=12>Eventdrop <color=#ffa500>{0}</color> is on the way to <color=#ffff00>X:{1} | Z:{2}</color></size>",
"msgDropPlayer": "<size=12><color=#ffff00>Incoming Supply Drop</color> to your current location</size>",
"msgDropDirect": "<size=12><color=#ffff00>A Supply Drop</color> spawned above your <color=#ffff00>current</color> location</size>",
"msgDropLanded": "<size=12>A Supply Drop has landed <color=#ffff00>{0:F0}m</color> away from you at direction <color=#ffff00>{1}</color></size>",
"msgDropLootet": "<size=12><color=#0099CC>Someone is looting the Supply Drop</color></size>",
"msgDropLootetCoords": "<size=12><color=#ffff00>{0}</color> was looting the Supply Drop at (<color=#ffff00>X:{1} | Z:{2}</color>)</size>",
"msgNoAccess": "<size=12>You are not allowed to use this command</size>",
"msgConsoleDropSpawn": "<size=12>Supply Drop spawned at (X:{0} Y:{1} Z:{2})</size>",
"msgConsoleDropLanded": "<size=12>Supply Drop landed at (X:{0} Y:{1} Z:{2})</size>",
"msgCrateLocked": "<size=12>This crate is locked until it is being looted by the owner</size>",
"msgNorth": "<size=12>North</size>",
"msgNorthEast": "<size=12>NorthEast</size>",
"msgEast": "<size=12>East</size>",
"msgSouthEast": "<size=12>SouthEast</size>",
"msgSouth": "<size=12>South</size>",
"msgSouthWest": "<size=12>SouthWest</size>",
"msgWest": "<size=12>West</size>",
"msgNorthWest": "<size=12>NorthWest</size>",
"msgDropSignalGrid": "Someone ordered an Airdrop to grid area <color=#ffff00>{0}</color></size",
"msgDropSignalByPlayerGrid": "Signal thrown by <color=#ffff00>{0}</color> at grid area <color=#ffff00>{1}</color></size>",
"msgDropRegularGrid": "Cargoplane will deliver the daily AirDrop in grid area <color=#ffff00>{0}</color> in a few moments</size>",
"msgDropCustomGrid": "Eventdrop <color=#ffa500>{0}</color> is on his way to grid area <color=#ffff00>{1}</color></size>",
"msgDropLootetGrid": "<color=#ffff00>{0}</color> was looting the AirDrop located grid area (<color=#ffff00>{1}</color>)</size>",
"msgDropDirectSpace": "A <color=#ffff00>Space Supply Drop</color> is being deployed to your <color=#ffff00>current</color> location</size>"
}
FAQ
Description of DropTypes
The config includes by default all common droptypes. These are:
- regular (timed/random drops)
- dropdirect ( planes to player or direct crate drop)
- massdrop
- supplysignal
- AND a predefined custom one called custom_event
Each of those types will look by default like this:
"regular": { // Drop Type
"minCrates": 1, // Minimum Drops to deliver
"maxCrates": 1, // Maximum Drops to deliver
"cratesGap": 50, // Spacing between drops if more than 1 is set above
"despawnMinutes": 15, // Lifetime of Drop once it hits the ground to despawn if unlooted
"crateAirResistance": 2.0, // lower to fall faster (min is 0.6)
"useCustomLootTable": false, // Override and use custom loot table from config
"StaticItemListName": "regular", // if using a custom loot table the name of the custom loot table
"planeSpeed": 35, // initial plane speed when called (20<>200 highly not recommended to go above 200)
"additionalheight": 0 // Initial drop height is generally 500 ( can add to this additionally like 100 making total 600)
},
Custom types can have an additional field:
"notificationInfo": "Custom Stuff",
This will be used for announcement of those custom drop types by combination with the language file entry "msgDropCustom".
The default configuration file has also this entry, which is used as default(fallback) in case of you delete some of the lines of any droptype:
"Drop Settings": {
"DropDefault": {
"minCrates": 1,
"maxCrates": 1,
"cratesGap": 50,
"despawnMinutes": 15,
"crateAirResistance": 2.0,
"useCustomLootTable": false,
"StaticItemListName": "regular",
"planeSpeed": 35,
"additionalheight": 0
}
You should leave it untouched, or if you are familiar wtih editing json files, you could take this as default for all types and delete not needed entrys from the "DropTypes" entries. It depends all on your experience level.
Furthermore you can ADD unlimited custom entries by your own and use such types by the supported console commands. These are:
- ad.random
- ad.topos
- ad.massdrop
- ad.massdropto
Description of StaticItems
Each drop type has a predefined static item list. These are found under:
"Custom Loot Items": {
"DropTypes": [
{
"DropType Name": "regular",
"Minimum amount of items to spawn": 2,
"Maximum amount of items to spawn": 6,
"Custom Loot Contents": [
{
"Shortname": "metalspring",
"Minimum amount of item": 2,
"Maximum amount of item": 6,
"Skin ID": 0,
"Display Name": null
},
{
"Shortname": "mining.quarry",
"Minimum amount of item": 1,
"Maximum amount of item": 2,
"Skin ID": 0,
"Display Name": null
}
]
}
As the name already describes, those lists are static. This means, it will always create the items which are included by the list. The only part of randomization is the amount between min and max.
You can define an infinite of those list entrys and use them by the available commands with each drop type.
You can change for every drop type, default or custom, the default static item list by adding a new "itemlist" entry and by changing the droptype-field "StaticItemListName"
You can use every of those unlimited item lists with every unlinmited custom drop type be the supported console commands:
- ad.random
- ad.topos
- ad.massdrop
- ad.massdropto
Description of Custom Loot Table
On first start the plugin will create a file called FancyDrop.json in your oxide data folder.
This file is a simplified version of the built-in LootSpawn entries, already known by plugins like Loot Config.
Those Lootspawn tables are splitted into several sections, the plugin does export it in a more readable way.
The plugin will mark each level by a prefix number, to give you a hint how deep the tree the category is set.
Note: If you already have set up your drops by Loot Config, the export will exactly mirror your custom setting and you could use then this for further customization, which will resist any protocol change/update .
MIT License
Copyright (c) 2021 FastBurst
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.