Adds Cecil (#119)

* Add Cecil for mechanics

Used to predetermine the outcome of games according to a probability function, which is stored as a skew. Each game made using cecil is intended to have its own skew (or maybe multiple skews for different difficulties)
Will eventually be used for planes 2

* Add CecilCommand for gambling functionality

Skip all the fancy casino visuals and let Cecil take the wheel
Customizeable difficulty
!cecil <bet> <optional difficulty, default 1> <optional max win>
https://i.ddos.lgbt/raw/CecilHelper.html

* Validate max win value in CecilCommand

Added validation to ensure max win is greater than 1.

* Adjust slot symbol probabilities and random range

9208000 | Payout: 0 | RTP: 97.84% | Feach Chance: 0.78% | Hit Rate: 34.03% | Win Rate: 15.14% | Biggest Win: 14100.0x | Avg Win: 6.01x | Median Hit: 0.6x

got some complaint about slots so figured I'd change it up a bit
This commit is contained in:
alogindtractor
2026-05-16 08:58:21 -07:00
committed by GitHub
parent e17f525142
commit e14a08e3d5
3 changed files with 230 additions and 13 deletions
+13 -13
View File
@@ -477,7 +477,7 @@ public class SlotsCommand : ICommand
for (var i = 0; i < 5; i++) {
for (var j = 0; j < 5; j++)
{
var r = _rand.NextDouble() * 100.1;
var r = _rand.NextDouble() * 100;
if (f != 0 && j > 1) r *= 1.1;
if (rigged == 'W') // guarantee max win
@@ -608,18 +608,18 @@ public class SlotsCommand : ICommand
if (rigged == 'L') RigSlotBoard();
char PickSlotSymbol(double r, int i, int j)
{
if (r < 22.5) return 'A';
else if (r < 44.5) return 'B';
else if (r < 52.5) return 'C';
else if (r < 66.5) return 'D';
else if (r < 78.5) return 'E';
else if (r < 84.5) return 'F';
else if (r < 89.5) return 'G';
else if (r < 92.5) return 'H';
else if (r < 95.5) return 'I';
else if (r < 97.5) return 'J';
else if (r < 98.5) return WILD;
else if (r < (j <= 2 ? 99 : 99.5)) { if (!ex.Contains(j)) { return EXPANDER; } else return WILD; }
if (r < 15) return 'A';
else if (r < 30) return 'B';
else if (r < 40) return 'C';
else if (r < 50) return 'D';
else if (r < 65) return 'E';
else if (r < 72.5) return 'F';
else if (r < 80) return 'G';
else if (r < 86) return 'H';
else if (r < 92) return 'I';
else if (r < 97) return 'J';
else if (r < 97.5) return WILD;
else if (r < (j <= 2 ? 98.25 : 98.5)) { if (!ex.Contains(j)) { return EXPANDER; } else return WILD; }
else { if (fc < 5) { fc++;
return FEATURE;
} else return WILD; }