Change steal to msg instead of embed with lore, Fix compiler error
This commit is contained in:
parent
9a665ab00f
commit
ab2c81c77a
49
Bot/Thief.fs
49
Bot/Thief.fs
@ -43,10 +43,8 @@ let payout defenderBank chance =
|
||||
let getStealEmbed amount (chance : double) prize (target : PlayerData) =
|
||||
let chance = int (chance * 100.0)
|
||||
let buttons =
|
||||
// let yes , no = getRandomStealBtnLabels ()
|
||||
let btnId = $"Steal-yes-{target.DiscordId}-{target.Name}-{amount}"
|
||||
[ DiscordButtonComponent(ButtonStyle.Success, btnId, "Do it") ]
|
||||
// DiscordButtonComponent(ButtonStyle.Danger, $"Steal-no", no) ]
|
||||
|> Seq.cast<DiscordComponent>
|
||||
let embed =
|
||||
DiscordEmbedBuilder()
|
||||
@ -59,6 +57,7 @@ let getStealEmbed amount (chance : double) prize (target : PlayerData) =
|
||||
.AddComponents(buttons)
|
||||
.AsEphemeral(true)
|
||||
|
||||
|
||||
let getResultEmbed chance prize (bank : int<GBT>) thief (victim : DiscordPlayer) result =
|
||||
let embed =
|
||||
DiscordEmbedBuilder()
|
||||
@ -118,23 +117,42 @@ let checkThiefCooldown attacker =
|
||||
let calculateWinPercentage amountRequested bank attackerStrength defenderStrength =
|
||||
let powerPercentage = float (attackerStrength - defenderStrength) * 0.005 + 0.1
|
||||
let cappedAmount = float bank * 0.5
|
||||
let cappedRequest = min amountRequested (cappedAmount |> ceil)
|
||||
let cappedRequest , wasCapped = if amountRequested > cappedAmount then ( cappedAmount , true ) else ( amountRequested , false )
|
||||
let wagerPercentage = 1.0 - (cappedRequest / cappedAmount)
|
||||
// Max chance of success is 90.0%
|
||||
( cappedRequest , max 0.0 (wagerPercentage * 0.7 + powerPercentage * 1.3 ) / 2.0 )
|
||||
( int cappedRequest , max 0.0 (wagerPercentage * 0.7 + powerPercentage * 1.3 ) / 2.0 , wasCapped )
|
||||
|
||||
//calculateWinPercentage 50 200 100 85
|
||||
|
||||
let steal target amount (ctx : IDiscordContext) =
|
||||
Game.executePlayerActionWithTarget target ctx (fun attacker defender -> async { do!
|
||||
attacker
|
||||
|> checkVictimStealingCooldown defender
|
||||
Game.executePlayerActionWithTarget target ctx (fun thief victim -> async { do!
|
||||
thief
|
||||
|> checkVictimStealingCooldown victim
|
||||
>>= checkThiefCooldown
|
||||
|> handleResultWithResponse ctx (fun _ -> async {
|
||||
let cappedPrize , winPercentage = calculateWinPercentage amount (int defender.Bank) attacker.Traits.Strength defender.Traits.Strength
|
||||
let embed = getStealEmbed amount winPercentage cappedPrize defender
|
||||
let cappedPrize , winPercentage , wasCapped =
|
||||
calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength
|
||||
|
||||
do! ctx.FollowUp(embed) |> Async.AwaitTask
|
||||
let chance = int (winPercentage * 100.0)
|
||||
let buttons =
|
||||
let btnId = $"Steal-yes-{victim.DiscordId}-{victim.Name}-{cappedPrize}"
|
||||
[ DiscordButtonComponent(ButtonStyle.Success, btnId, $"Steal {cappedPrize} $GBT") ]
|
||||
|> Seq.cast<DiscordComponent>
|
||||
|
||||
let cappedMsg = if wasCapped then $"They only have {cappedPrize} $GBT though... " else ""
|
||||
let strengthMsg =
|
||||
match thief.Traits.Strength - victim.Traits.Strength with
|
||||
| diff when diff < -50 -> "much stronger"
|
||||
| diff when diff < 0 -> "stronger"
|
||||
| diff when diff < 50 -> "weaker"
|
||||
| _ -> "much weaker"
|
||||
let msg =
|
||||
DiscordFollowupMessageBuilder()
|
||||
.WithContent($"Want to steal from <@{victim.DiscordId}>? They look {strengthMsg} than us so we have a **{chance}%% of success**. {cappedMsg}What do you say?")
|
||||
.AddComponents(buttons)
|
||||
.AsEphemeral(true)
|
||||
|
||||
do! ctx.FollowUp(msg) |> Async.AwaitTask
|
||||
})
|
||||
})
|
||||
|
||||
@ -146,7 +164,7 @@ let handleSteal (ctx : IDiscordContext) =
|
||||
let targetId = uint64 split.[2]
|
||||
let targetName = split.[3]
|
||||
let amount = int split.[4]
|
||||
let prize , winPercentage = calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength
|
||||
let prize , winPercentage , _ = calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength
|
||||
let prize = int prize * 1<GBT>
|
||||
|
||||
let rand = Random(Guid.NewGuid().GetHashCode())
|
||||
@ -231,15 +249,6 @@ let handleSteal (ctx : IDiscordContext) =
|
||||
type StealGame() =
|
||||
inherit ApplicationCommandModule ()
|
||||
|
||||
let enforceChannel (ctx : IDiscordContext) (storeFn : IDiscordContext -> Task) =
|
||||
match ctx.GetChannel().Id with
|
||||
| id when id = GuildEnvironment.channelThievery -> storeFn ctx
|
||||
| _ ->
|
||||
task {
|
||||
let msg = $"You must go to <#{GuildEnvironment.channelThievery}> channel if you want to mug some unsuspecting doofs"
|
||||
do! Messaging.sendSimpleResponse ctx msg
|
||||
}
|
||||
|
||||
[<SlashCommand("steal", "Steal some money from another player, but you might go to prison if caught")>]
|
||||
member this.Steal (ctx : InteractionContext,
|
||||
[<Option("target", "Who do you want to steal from?")>] target : DiscordUser,
|
||||
|
Loading…
x
Reference in New Issue
Block a user