Version

1.0.0

Updated

2 hours ago

Views

2

Downloads

0

Overview

SlotDrop is a real slot machine for your server. Three dials spin, and if all three land on the same symbol you win that item.

There are case openers everywhere in Rust. There is no slot machine. This is that.

Under the dials sits the thing that makes a slot machine feel good rather than feel rigged: the win rate is a number you type in, and near misses are something you design rather than something you hope for. Both are explained below, because they are the difference between players spinning all wipe and players spinning nine times and calling your server a scam.

Five templates ship with it, and they are five genuinely different machines — different layouts, different chrome, different everything — not one panel in five colours.

Free, MIT, no dependencies. Works on a bare server with nothing else installed.

Features

  • Three dials, match three symbols, win that item
  • Win rate is a setting, not an accident of the symbol count
  • Near misses at a rate you choose — two matching and a third that lands just short
  • Five complete templates: Vegas Brass, Neon Parlour, The Site, High Roller, Steel and Rust
  • Provably fair with HMAC-SHA256, a published seed hash and a player verify command
  • Progressive jackpot fed by a slice of every wager
  • Economics and ServerRewards built in — pick one and it works, nothing to configure
  • Or scrap, any item, your own custom coin, or any other economy plugin through three hook names
  • Unlimited symbols, each with unlimited payouts
  • Every payout switches between an item and a server command with one button
  • Items support amount, random range, skin, custom name and blueprints
  • Live paytable editor showing each symbol's real chance as a percentage of all spins
  • Burst spinning, skippable animation, cooldowns and daily caps
  • Rewards that do not fit go to a holding area, never destroyed
  • Every visible string editable in game, unlimited languages, player language switcher
  • Rarity tiers with colours that stay consistent across every template
  • Full in-game editor. Nothing needs a config file
  • Free, MIT, no dependencies

How a spin actually works

This is worth understanding before you set your odds, because it is where most slot machines go wrong.

If three dials simply spin independently, the chance of matching three of anything is 1 / symbols². With eight symbols that is about 1.5%. Players spin sixty times, win nothing, and conclude the machine is rigged. It is not rigged — that is just what independent reels do.

SlotDrop works the way real machines work. The server rolls the outcome first, then tells the dials what to show. You set the win rate; the display is derived from the result.

Approach What you get
Independent dials, 8 symbols 1.5% win rate, and no way to change it short of removing symbols
Outcome first Whatever win rate you type, with each symbol's share set by its weight

This is not the machine cheating. The result is decided by a fair weighted roll before anything moves, and the provably fair system lets any player verify that. What changes is that the displayed reels are chosen to show the result honestly, rather than the result being an accident of three independent spins.

Near misses

A near miss is two matching symbols and a third that lands just short. It is the single strongest reason anybody spins again, and on a real machine it is deliberate.

Set Percent of losses shown as a near miss and that is exactly what you get. At 0% the machine feels flat and mechanical. Above about 50% it starts to feel obviously staged. The default is 35%.

The five templates

Pick one in the TEMPLATE bay and the entire machine is rebuilt. These are not colour schemes — the header, the readouts, the reel framing, the button and the layout are all different.

Template What it is
Vegas Brass An actual slot cabinet. Red velvet, brass bevels, a crown across the top, a segmented orange jackpot readout, marquee bulbs down both sides of the reels and a lever on the right.
Neon Parlour Pachinko at 2am. A faint grid, magenta and cyan wordmark, glow-ringed reel windows and an outlined lime button rather than a filled one.
The Site A skin site, in game. Nav bar, rounded balance pill, a live drops ticker showing recent winners, rounded cards and a fat green button.
High Roller Monte Carlo rather than the Strip. Green baize, thin gold rules, a centred title, hairline plates and a narrow outlined button. Quiet and expensive.
Steel and Rust A machine welded out of scrap. Hazard bands top and bottom, stencilled lettering, gunmetal plates, rivets along the reel bank and a lever housing beside it.

Rarity tier colours are deliberately identical across all five. They tell a player how rare a symbol is, not what the cabinet is made of, so a legendary reads as legendary whichever template you run.

Provably fair

Every spin is HMAC-SHA256(server seed, client seed : nonce).

The server seed's hash is published on the board before anyone spins. Each player has their own client seed, which they can change whenever they like, and their own nonce that ticks up every spin. When you rotate the server seed the old one is revealed, and anyone can recompute every spin that ran on it and confirm nothing was altered.

Players run slot.verify to see the current hash, their client seed and their nonce. slot.seedme sets their own client seed.

This is the real mechanism, not a badge. It is also the strongest possible answer to "this server rigs its slots", which someone will accuse you of the first time they lose five in a row.

Building the paytable

Press TUNE and the SYMBOLS bay is the paytable, because on a slot machine the paytable is the configuration.

Across the top sits a live readout: your win rate, how many symbols are live, the rarest symbol's real chance, and the current jackpot. Every row shows that symbol's chance as a percentage of all spins, recalculating as you type a weight. You are editing odds, so you can see the odds.

Weight is the share of wins, not the share of spins. A symbol on weight 34 out of a 100 total takes 34% of your wins, so at a 22% win rate it lands on about 7.5% of all spins. The editor does that arithmetic for you on every row.

Open a symbol and you get its label, tier, weight, the item shown on the dial, and its payouts. Each payout has an ITEM / COMMAND toggle — press the other one and the fields swap in place. PICK ITEM opens the game's item list with a search box; FROM HAND fills it from whatever you are holding.

A symbol can pay several items and run a command, all from one match.

The jackpot

Every wager feeds a slice into a pot, and one symbol is marked as the jackpot symbol. Match three of it and the whole pot pays out, then resets to its starting value.

Setting Default
Percent of every wager into the pot 8%
Pot resets to 5,000
Jackpot symbol weight 0.4 — roughly 1 spin in 1,100 at default odds

Jackpot wins are announced server-wide, which is most of the point of having one.

Any currency

Economics and ServerRewards are built in. Pick one in the WAGER bay and that is the whole job — no plugin names, no hook names, nothing to look up.

Choice What you have to do
An item Type a shortname. Scrap by default. Add a skin and a custom name for your own coin
Economics Nothing. Balance, Withdraw and Deposit are wired automatically. Handles decimals, so a spin can cost 12.50
ServerRewards Nothing. CheckPoints, TakePoints and AddPoints are wired automatically. Whole points only, so 12.50 is charged as 13
Other plugin A plugin name and three hook names, for anything else

The bay tells you live whether Economics and ServerRewards are actually installed on your server, and refuses to pretend a missing one is working. Switching to either also renames the on-screen currency label to COINS or RP so the board does not still say SCRAP.

Set a skin and a custom name together on the item mode and you have your own coin — plain scrap will not pay for a spin on a machine priced in Gold Tokens.

Wagers are confirmed by reading the balance, not by trusting the plugin. Economy plugins disagree about what they return when a withdrawal fails — some return false, some return nothing at all. SlotDrop checks the balance actually dropped before the reels move, so a declined payment can never produce a free spin.

Keeping it sane

It is a gambling plugin, so the limits matter.

Setting What it does
Seconds between spins A cooldown per player
Spins per player per day A hard daily cap. 0 for unlimited
Burst sizes Which multi-spin buttons appear, or none at all
Require permission Restrict the machine to a group entirely

Permissions

Permission What it does
slotdrop.play Lets the player use the machine. Only enforced if you switch on Require permission, which is off by default
slotdrop.tune The in-game editor. Shows the TUNE button and allows every editor action
oxide.grant group admin slotdrop.tune

The editor is permission based. Being a server admin does not grant it on its own, because someone you trust to ban cheaters is not necessarily someone you want rewriting your payout table. There is a setting to change that if you want it.

Commands

Command Who What it does
/slot Everyone Opens the machine
/slots   /drop Everyone Same thing, aliases
/slot tune Admin Opens straight into the editor
slot.verify Player console Seed hash, their client seed, their nonce
slot.seedme [seed] Player console Sets their own client seed
slot.stats Console Total spins, pot, odds and recent winners

The chat command list is configurable, so if /slot clashes with another plugin you rename it.

Sound

Every sound is a Rust effect prefab typed into the SOUND bay, so swap any of them for anything the game ships. There are separate sounds for the board opening, a dial stopping, a losing spin, a near miss, a win and a jackpot.

Reel ticks are off by default, deliberately. Rust broadcasts effects by world range, so a ticking machine is heard by everyone standing near the player — roughly sixty clicks per spin. Turn it on only if the machine sits somewhere nobody has to stand next to.

Performance

Rust's UI has no animation system, so every frame of a spinning dial is a panel being redrawn. SlotDrop is built around that:

  • Only the three reel windows redraw while spinning, and each stops in turn so the cost falls as the spin ends
  • All the cabinet chrome — bevels, bulbs, rivets, plates — is static and drawn once when the board opens
  • Frame rate is a setting, clamped between 8 and 30, so you can turn it down on a busy server
  • The SPIN bay shows you roughly how many element writes a spin costs at your current settings

Install

  1. Drop SlotDrop.cs into oxide/plugins
  2. Grant yourself the editor with oxide.grant group admin slotdrop.tune
  3. Type /slot and press TUNE

An eight symbol machine is generated on first load and priced in scrap, so there is a working slot machine to look at immediately. Symbols, players and translations live in oxide/data/SlotDrop/, everything else in the config file, and all of it is editable from the board.

Developer API

[PluginReference] private Plugin SlotDrop;

SlotDrop?.Call("OpenSlot", player);
SlotDrop?.Call("CloseSlot", player);
SlotDrop?.Call("GetSpins", player);   // long
SlotDrop?.Call("GetWins", player);    // long
SlotDrop?.Call("GetPot");             // double

One hook fires on every completed spin:

void OnSlotDropSpin(BasePlayer player, string symbolId, bool won, bool jackpot) { }

Compatibility

Oxide and Carbon. No dependencies. Economics, ServerRewards and Notify are optional and detected automatically.

Every visual effect is a setting, so if anything renders oddly on an unusual build you switch it off. The symbols used in the interface are configurable characters, so if your server's font renders one as a box you can replace it with anything you like.

Requirements & compatibility

Oxide and Carbon. No dependencies. Economics, ServerRewards and Notify are optional and detected automatically.

No updates yet.

No reviews yet.

Log in to write a review (buyers only).