forked from EllieBotDevs/elliebot
added .rakeback to get a part of the house edge back. Rakeback is accumulated by betting (not winning or losing in particular). All games have manually specified rakeback values
slot now has 1 more icon (wheat!), and multipliers have been modified to even out the gains betroll is improved (around 2% better payout), as 66 is now a winning number, not a losing one
This commit is contained in:
parent
14ac3c92bb
commit
66870f6859
21 changed files with 7282 additions and 55 deletions
src/EllieBot/Modules/Gambling
|
@ -38,6 +38,7 @@ public partial class Gambling : GamblingModule<GamblingService>
|
|||
private readonly IRemindService _remind;
|
||||
private readonly GamblingTxTracker _gamblingTxTracker;
|
||||
private readonly IPatronageService _ps;
|
||||
private readonly RakebackService _rb;
|
||||
|
||||
public Gambling(
|
||||
IGamblingService gs,
|
||||
|
@ -50,7 +51,8 @@ public partial class Gambling : GamblingModule<GamblingService>
|
|||
IBankService bank,
|
||||
IRemindService remind,
|
||||
IPatronageService patronage,
|
||||
GamblingTxTracker gamblingTxTracker)
|
||||
GamblingTxTracker gamblingTxTracker,
|
||||
RakebackService rb)
|
||||
: base(configService)
|
||||
{
|
||||
_gs = gs;
|
||||
|
@ -60,6 +62,7 @@ public partial class Gambling : GamblingModule<GamblingService>
|
|||
_bank = bank;
|
||||
_remind = remind;
|
||||
_gamblingTxTracker = gamblingTxTracker;
|
||||
_rb = rb;
|
||||
_ps = patronage;
|
||||
_rng = new EllieRandom();
|
||||
|
||||
|
@ -318,7 +321,6 @@ public partial class Gambling : GamblingModule<GamblingService>
|
|||
|
||||
|
||||
var val = Config.Timely.Amount;
|
||||
|
||||
var boostGuilds = Config.BoostBonus.GuildIds ?? new();
|
||||
var guildUsers = await boostGuilds
|
||||
.Select(async gid =>
|
||||
|
@ -1089,4 +1091,45 @@ public partial class Gambling : GamblingModule<GamblingService>
|
|||
footer: $"Total Bet: {tests} | Payout: {payout:F0} | {payout * 1.0M / tests * 100}%")
|
||||
.SendAsync();
|
||||
}
|
||||
|
||||
private EllieInteractionBase CreateRakebackInteraction()
|
||||
=> _inter.Create(ctx.User.Id,
|
||||
new ButtonBuilder(
|
||||
customId: "cash:rakeback",
|
||||
emote: new Emoji("💸")),
|
||||
RakebackAction);
|
||||
|
||||
private async Task RakebackAction(SocketMessageComponent arg)
|
||||
{
|
||||
var rb = await _rb.ClaimRakebackAsync(ctx.User.Id);
|
||||
|
||||
if (rb == 0)
|
||||
{
|
||||
await arg.DeferAsync();
|
||||
return;
|
||||
}
|
||||
|
||||
await arg.RespondAsync(_sender, GetText(strs.rakeback_claimed(N(rb))), MsgType.Ok);
|
||||
}
|
||||
|
||||
[Cmd]
|
||||
public async Task Rakeback()
|
||||
{
|
||||
var rb = await _rb.GetRakebackAsync(ctx.User.Id);
|
||||
|
||||
if (rb < 1)
|
||||
{
|
||||
await Response()
|
||||
.Error(strs.rakeback_none)
|
||||
.SendAsync();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var inter = CreateRakebackInteraction();
|
||||
await Response()
|
||||
.Pending(strs.rakeback_available(N(rb)))
|
||||
.Interaction(inter)
|
||||
.SendAsync();
|
||||
}
|
||||
}
|
Reference in a new issue