Change steal to msg instead of embed with lore, Fix compiler error

This commit is contained in:
Joseph Ferano 2022-02-18 13:44:50 +07:00
parent 9a665ab00f
commit ab2c81c77a

View File

@ -43,10 +43,8 @@ let payout defenderBank chance =
let getStealEmbed amount (chance : double) prize (target : PlayerData) = let getStealEmbed amount (chance : double) prize (target : PlayerData) =
let chance = int (chance * 100.0) let chance = int (chance * 100.0)
let buttons = let buttons =
// let yes , no = getRandomStealBtnLabels ()
let btnId = $"Steal-yes-{target.DiscordId}-{target.Name}-{amount}" let btnId = $"Steal-yes-{target.DiscordId}-{target.Name}-{amount}"
[ DiscordButtonComponent(ButtonStyle.Success, btnId, "Do it") ] [ DiscordButtonComponent(ButtonStyle.Success, btnId, "Do it") ]
// DiscordButtonComponent(ButtonStyle.Danger, $"Steal-no", no) ]
|> Seq.cast<DiscordComponent> |> Seq.cast<DiscordComponent>
let embed = let embed =
DiscordEmbedBuilder() DiscordEmbedBuilder()
@ -59,6 +57,7 @@ let getStealEmbed amount (chance : double) prize (target : PlayerData) =
.AddComponents(buttons) .AddComponents(buttons)
.AsEphemeral(true) .AsEphemeral(true)
let getResultEmbed chance prize (bank : int<GBT>) thief (victim : DiscordPlayer) result = let getResultEmbed chance prize (bank : int<GBT>) thief (victim : DiscordPlayer) result =
let embed = let embed =
DiscordEmbedBuilder() DiscordEmbedBuilder()
@ -118,23 +117,42 @@ let checkThiefCooldown attacker =
let calculateWinPercentage amountRequested bank attackerStrength defenderStrength = let calculateWinPercentage amountRequested bank attackerStrength defenderStrength =
let powerPercentage = float (attackerStrength - defenderStrength) * 0.005 + 0.1 let powerPercentage = float (attackerStrength - defenderStrength) * 0.005 + 0.1
let cappedAmount = float bank * 0.5 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) let wagerPercentage = 1.0 - (cappedRequest / cappedAmount)
// Max chance of success is 90.0% // 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 //calculateWinPercentage 50 200 100 85
let steal target amount (ctx : IDiscordContext) = let steal target amount (ctx : IDiscordContext) =
Game.executePlayerActionWithTarget target ctx (fun attacker defender -> async { do! Game.executePlayerActionWithTarget target ctx (fun thief victim -> async { do!
attacker thief
|> checkVictimStealingCooldown defender |> checkVictimStealingCooldown victim
>>= checkThiefCooldown >>= checkThiefCooldown
|> handleResultWithResponse ctx (fun _ -> async { |> handleResultWithResponse ctx (fun _ -> async {
let cappedPrize , winPercentage = calculateWinPercentage amount (int defender.Bank) attacker.Traits.Strength defender.Traits.Strength let cappedPrize , winPercentage , wasCapped =
let embed = getStealEmbed amount winPercentage cappedPrize defender 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 targetId = uint64 split.[2]
let targetName = split.[3] let targetName = split.[3]
let amount = int split.[4] 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 prize = int prize * 1<GBT>
let rand = Random(Guid.NewGuid().GetHashCode()) let rand = Random(Guid.NewGuid().GetHashCode())
@ -231,15 +249,6 @@ let handleSteal (ctx : IDiscordContext) =
type StealGame() = type StealGame() =
inherit ApplicationCommandModule () 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")>] [<SlashCommand("steal", "Steal some money from another player, but you might go to prison if caught")>]
member this.Steal (ctx : InteractionContext, member this.Steal (ctx : InteractionContext,
[<Option("target", "Who do you want to steal from?")>] target : DiscordUser, [<Option("target", "Who do you want to steal from?")>] target : DiscordUser,