Drop Rate: Difference between revisions
| Line 2: | Line 2: | ||
==Simple Drop Rate== | ==Simple Drop Rate== | ||
The simplest implementation of a drop rate is to store the rate as a percentage or ratio, and then generate a random number and check if it is lower than the drop rate. If it is, the item drops. This is similar to rolling a dice | The simplest implementation of a drop rate is to store the rate as a percentage or ratio, and then generate a random number and check if it is lower than the drop rate. If it is, the item drops. This is similar to rolling a dice and dropping the item if certain numbers come up. | ||
<syntaxhighlight lang="cs"> | <syntaxhighlight lang="cs"> | ||
Revision as of 20:10, 9 June 2024
A Drop Rate is a value that indicates how often an item has a chance to drop from a game event such as defeating an enemy.
Simple Drop Rate
The simplest implementation of a drop rate is to store the rate as a percentage or ratio, and then generate a random number and check if it is lower than the drop rate. If it is, the item drops. This is similar to rolling a dice and dropping the item if certain numbers come up.
// 1 in 4 drop rate (could also set to 0.25f directly)
float DropRate = 1f / 4f;
void OnEnemyKill()
{
var n = random.NextDouble();
if (n < DropRate)
{
DropItem();
}
}
Sampling without Replacement
For rare items that the player cannot trade or must obtain for progression, sampling without replacement provides a more consistent experience for obtaining an item. Each time the item fails to drop, the chance of failure decreases. This is similar to picking a card from a deck, and removing the card from the deck once picked.
// 1 in 20 drop rate (numerator)
float DropRateSuccess = 1f;
// 1 in 20 drop rate (denominator)
int DropRateTotal = 20;
// number of times the item has failed to drop
int NumDropFailures = 0;
void OnEnemyKill()
{
var n = random.NextDouble();
if (n < DropRateSuccess / (DropRateTotal - NumDropFailures))
{
DropItem();
DropFailures = 0;
}
else
{
DropFailures++;
}
}
Example: Dropping a key for a door
Let's say a game has a room that spawns endless waves of monsters and a locked door. Killing a monster has a 10% chance to drop a key that opens the door. How many monsters need to be killed to open the door?
| Total Kills | Simple Drop Rate | Sampling without Replacement |
|---|---|---|
| Players w/ Key | Players w/ Key | |
| 1 | 10% | 10% |
| 2 | 19% | 20% |
| 3 | 27% | 30% |
| 4 | 34% | 40% |
| 5 | 41% | 50% |
| 6 | 47% | 60% |
| 7 | 52% | 70% |
| 8 | 57% | 80% |
| 9 | 61% | 90% |
| 10 | 65% | 100% |
| 20 | 88% | |
| 30 | 96% | |
| 40 | 99% |