Version

1.0.0

Updated

2 hours ago

Views

4

Downloads

1

Overview

DailyDrop gives your players a reason to log in tomorrow.

It lays the rewards out as a season track — a rail of days that fills in as they claim, with the milestone days sitting visibly larger further along. Today's reward is a full card at the top with one big button. Everything else is a glance.

Set up 1 to 30 days, or more, entirely from inside the game. Press ADD DAY, name it, drop rewards into it. Every reward switches between an item and a server command with one button, so a single day can hand out three items and run a kit command.

It also ships the thing almost every daily reward plugin forgets: streak freezes. Miss a day and a freeze is spent automatically instead of wiping weeks of progress. That single mechanic is the difference between a streak that keeps people coming back and one that loses them the first time they have a busy day.

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

Features

  • Season track UI — days as nodes on a filling rail, milestones drawn larger, today as a full hero card
  • 1 to 30+ days, added and reordered from the in-game editor with an ADD DAY button
  • Unlimited rewards per day, each independently switchable between item and command
  • Items support amount, random amount range, skin id, custom name and blueprints
  • Commands support {steamid}{player} and {amount}, run as server or as the player
  • Streak freezes — a missed day spends a freeze instead of resetting the streak
  • Two streak models: consecutive (a miss sends you back to day 1) or cumulative (missed days never happened)
  • Milestone days with a bigger node and an optional chat announcement
  • Permission tiers: reward multiplier, extra freezes, reduced playtime requirement
  • Playtime requirement before claiming, so nobody logs in, claims and leaves
  • Blocks claiming while raid blocked, combat blocked, building blocked or AFK
  • Rewards that do not fit go to a pending box, never destroyed
  • Auto-opens on login when a reward is waiting
  • Every visible string editable in game, unlimited languages, player language switcher
  • 7 theme presets, 17 colour slots, blur, adjustable stage size
  • Native in-game item icons, no ImageLibrary needed
  • Item picker with search, or grab the item straight from your hand
  • Per-day permission locking, so VIP days simply do not appear for everyone else
  • Streak leaderboard console command
  • Free, MIT, no dependencies

The panel

Today's reward fills the top left: the day title, a description, the actual items as icons, and a claim button that spans most of the card. Next to it are your streak count and your remaining freezes.

Underneath runs the track. Claimed days are green ticks, today is a large accent node, milestones sit larger with a MILESTONE tag, and the connecting line fills as you go. Arrows page through it, and it opens on the page containing today.

When a reward is waiting in your pending box the second button turns amber and says COLLECT.

When you cannot claim yet, the button is replaced by the reason — "Play for another 4m 12s", "Next reward in 9h 40m", "You cannot claim while raid blocked" — rather than a dead button that does nothing when pressed.

Streak freezes

This is the part worth reading.

Most daily reward systems reset your streak the moment you miss a day. That produces a spike in logins followed by people quietly dropping out, because the first time real life gets in the way they lose everything and stop caring.

A freeze absorbs one missed day automatically. Players start with a couple, hold up to a maximum, and earn one back every few days claimed. They see how many they have left in the panel, which turns a miss from "I lost my streak" into "I used one of my three".

Setting Default
Freezes enabled On
Starting freezes 2
Maximum held 3
Days claimed to earn one back 5

Turn it off if you want the harsh version.

Two streak models

Model What a missed day does
Consecutive Sends the player back to day 1. High stakes, high drama, and it makes the later days feel genuinely earned.
Cumulative Missed days never happened. They simply claim the next unclaimed day whenever they come back. Much kinder on a low population server where people cannot play daily.

On a server with under about thirty regulars, cumulative usually keeps more people on the track. Consecutive suits a busy server where the competition is part of the appeal.

Building the track

Press EDIT, then ADD DAY. Type a name, and it appears at the end of the track. Reorder with the arrows, switch a day off without deleting it, or lock it behind a permission.

Inside a day, ADD REWARD gives you a block with an ITEM / COMMAND toggle at the top. Press the other one and the fields swap in place — the reward keeps its position in the list.

As an item you get shortname, amount, an optional random range, skin id, custom name and a blueprint toggle. PICK ITEM opens the game's full item list with a search box and real icons; FROM HAND fills it in from whatever you are holding, skin and custom name included.

As a command you get the command line and a switch for whether it runs as the server or as the player.

A day can hold as many rewards as you like, mixed freely.

Permissions

Permission What it does
dailydrop.use Lets the player open the panel. Only enforced if you switch on Require permission, which is off by default
dailydrop.admin The in-game editor. Shows the EDIT button and allows every editor action
dailydrop.vip Example tier. Ships configured with a 1.5× reward multiplier, 2 extra freezes and half the playtime requirement
oxide.grant group admin dailydrop.admin

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 reward table. There is a setting to change that if you want it.

Tiers you name starting with dailydrop. are registered automatically, as are per-day permissions, so no extra step is needed.

Commands

Command Who What it does
/daily Everyone Opens the panel
/dd Everyone Same thing, alias
/daily edit Admin Opens straight into the editor
daily.give <steamid> [day] Console Moves a player to a day and unlocks a claim
daily.reset <steamid> Console Clears one player's progress
daily.top [limit] Console Longest streaks on the server

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

Tiers

A tier is a permission plus three numbers. A player gets whichever tier they hold with the highest multiplier.

Setting What it does
Reward amount multiplier Scales every item amount on every day
Extra freezes Raises the maximum they can hold
Playtime reduction Cuts the minutes they must play before claiming

For a different reward entirely rather than more of the same one, lock a day behind a permission instead. The track simply shortens for anyone without it.

Every word is editable

There is a TEXT tab in the editor listing every string the panel can show, each with a box next to it. Change one, it changes in game.

To add a language you type its code into a box. A fresh table appears in the TEXT tab ready to fill in, and if you allow it, players get a language button in the header that cycles through what you offer. Their choice is remembered.

Anything you leave blank falls back to your default language, then to the built-in English, so a half-finished translation never leaves an empty panel.

Safety

A reward that does not fit in a full inventory goes to a pending box and waits, rather than being dropped on the floor of a raid or silently destroyed. The panel shows a COLLECT button until it is empty. You can switch to dropping at the player's feet instead if you prefer.

Claiming is blocked while raid blocked, combat blocked or AFK by default, so nobody claims a supply signal mid-raid. Those three read NoEscape and AFK API when installed and are simply ignored when they are not — nothing errors.

Install

  1. Drop DailyDrop.cs into oxide/plugins
  2. Grant yourself the editor with oxide.grant group admin dailydrop.admin
  3. Type /daily and press EDIT

A seven day starter track is generated on first load, so there is something to look at immediately. Days and translations live in oxide/data/DailyDrop/, settings and theme in the config file, and all of it is editable from the panel.

Developer API

[PluginReference] private Plugin DailyDrop;

DailyDrop?.Call("OpenDaily", player);
DailyDrop?.Call("CloseDaily", player);
DailyDrop?.Call("GetStreak", player);        // int
DailyDrop?.Call("GetBestStreak", player);    // int
DailyDrop?.Call("GetClaimedDays", player);   // int
DailyDrop?.Call("GetFreezes", player);       // int
DailyDrop?.Call("GetTrackLength", player);   // int
DailyDrop?.Call("HasUnclaimed", player);     // bool

Two hooks fire:

void OnDailyRewardClaimed(BasePlayer player, int day, int streak) { }
void OnDailyStreakBroken(BasePlayer player, int oldStreak) { }

Compatibility

Oxide and Carbon. No dependencies. NoEscape, AFK API, Notify and ImageLibrary are all optional and detected automatically.

Every visual effect is a config toggle, so if anything renders oddly on an unusual build you switch it off and get clean flat panels instead. 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

Compatibility Oxide and Carbon. No dependencies. NoEscape, AFK API, Notify and ImageLibrary are all optional and detected automatically. Every visual effect is a config toggle, so if anything renders oddly on an unusual build you switch it off and get clean flat panels instead. 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.

No updates yet.

No reviews yet.

Log in to write a review (buyers only).