depositbox/README.md
2025-01-29 10:43:52 -05:00

89 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Overview
The **DepositBox** plugin allows players to deposit specific items (e.g., paper) into a dropbox, logging the deposits and removing the items from the game. This can be used to create events or competitions, such as a system where players compete to turn in the most items (similar to the Twitch Rust event where players compete for dog tags).
### Features
- Only designated items can be deposited.
- Logs all deposits for tracking.
- Configurable deposit box skin and item type.
- Prevents non-whitelisted items from being deposited.
- Can be used to run events or competitions where players turn in items for rewards.
Once installed players with permission will be able to create a deposit box using /depositbox as a chat command. They can then place this box down allowing players to make deposits into it. All deposits are logged to the data folder.
## Installation
1. Upload the `DepositBox.cs` file to your Rust server under the `/oxide/plugins/` directory.
2. Restart or reload the server for the plugin to initialize:
```bash
oxide.reload DepositBox
```
3. Ensure you grant users permission to use the deposit box:
```bash
oxide.grant user <username> depositbox.place
```
## Configuration
Upon the first run, a default configuration file will be generated at `/oxide/config/DepositBox.json`. The configuration contains the following settings:
```json
{
"DepositItemID": -1779183908, // The item ID for your deposit unit (default: -1779183908)
"DepositBoxSkinID": 1641384897 // The skin ID for the deposit box
}
```
You can edit these values directly in the configuration file if needed.
- **DepositItemID**: The Rust item ID of the item that can be deposited (default: paper with ID `-1779183908`).
- **DepositBoxSkinID**: The Rust skin ID applied to the deposit box (default: `1641384897`).
### Customizing the Configuration:
1. Navigate to `/oxide/config/DepositBox.json`.
2. Modify the values as needed.
3. Save the file and reload the plugin:
```bash
oxide.reload DepositBox
```
### Important Note on Skin IDs:
- The DepositBoxSkinID is used to differentiate between regular storage containers and deposit boxes. Admins should ensure that they select a skin ID that is not actively available in the skin box to avoid confusion or accidental misuse by players. Using a skin that is easily accessible to players could result in unintended behavior where non-deposit boxes are treated as deposit boxes.
## Permissions
- `depositbox.place`: Grants a player permission to place a deposit box.
To assign this permission, use the following command:
```bash
oxide.grant user <username> depositbox.place
```
## Functionality
### Hooks
- **Init()**: Initializes the plugin, loads the configuration, and registers permissions.
- **OnServerInitialized()**: Scans the server for `StorageContainer` entities and applies the plugin's functionality to deposit boxes.
- **Unload()**: Cleans up and removes deposit box restrictions when the plugin is unloaded.
- **OnEntitySpawned()**: When a `StorageContainer` is spawned, the plugin checks if its a deposit box and ensures it follows the required rules.
### Item Handling
- The plugin restricts item deposits to a hardcoded whitelist (currently, only paper can be deposited).
- If an item is not on the whitelist, it will remain in the player's inventory, and only paper will be removed and logged.
- **Logging**: Every time a player deposits paper into the box, the action is logged for administrative tracking.
### Custom Logging
- All paper deposits are logged in the `oxide/data/DepositBoxLog.json` file, structured as follows:
```json
{
"SteamID": "player_steam_id",
"amount_deposited": "amount_deposited",
"Timestamp": "2024-09-22T12:00:00"
}
```
This allows server administrators to keep track of deposits and monitor player activity.