Get rid of the stealing neutral outcome

This commit is contained in:
Joseph Ferano 2022-02-19 23:08:45 +07:00
parent f354b9d6e8
commit a45152970d

View File

@ -9,12 +9,11 @@ open DSharpPlus.SlashCommands
open Degenz.Messaging open Degenz.Messaging
let ThiefCooldown = TimeSpan.FromMinutes(1) let ThiefCooldown = TimeSpan.FromMinutes(1)
let VictimRecovery = TimeSpan.FromHours(4) let VictimRecovery = TimeSpan.FromHours(1)
type StealResult = type StealResult =
| Success | Success
| WentToPrison | WentToPrison
| VictimRanAway
//let getRandomStealBtnLabels () = //let getRandomStealBtnLabels () =
// let rand = Random(Guid.NewGuid().GetHashCode()) // let rand = Random(Guid.NewGuid().GetHashCode())
@ -41,24 +40,6 @@ let payout defenderBank chance =
let randomAmount = baseAmount + randomBonus |> int let randomAmount = baseAmount + randomBonus |> int
max 1 randomAmount max 1 randomAmount
let getStealEmbed amount (chance : double) prize (target : PlayerData) =
let chance = int (chance * 100.0)
let buttons =
let btnId = $"Steal-yes-{target.DiscordId}-{target.Name}-{amount}"
[ DiscordButtonComponent(ButtonStyle.Success, btnId, "Do it") ]
|> Seq.cast<DiscordComponent>
let embed =
DiscordEmbedBuilder()
.AddField("Chance of Success", $"{chance}%%", true)
.AddField("Payout", $"{prize}", true)
.WithTitle($"Steal $GBT from {target.Name}")
DiscordFollowupMessageBuilder()
.AddEmbed(embed)
.AddComponents(buttons)
.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()
@ -74,11 +55,6 @@ let getResultEmbed chance prize (bank : int<GBT>) thief (victim : DiscordPlayer)
+ "Your mean ugly face and athletic physique intimidated your poor victim into giving you their money") + "Your mean ugly face and athletic physique intimidated your poor victim into giving you their money")
, "https://f8n-production-collection-assets.imgix.net/0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405/127502/QmPLPg1CLovKzS7mP8QkrMoHws1D4VZTzpfbZBALLwKZ5b/nft.png" , "https://f8n-production-collection-assets.imgix.net/0x3B3ee1931Dc30C1957379FAc9aba94D1C48a5405/127502/QmPLPg1CLovKzS7mP8QkrMoHws1D4VZTzpfbZBALLwKZ5b/nft.png"
, DiscordColor.Green , DiscordColor.Green
| VictimRanAway ->
embed.AddField("Result" , $"Ran Away", true) |> ignore
$"Target **ran away**...\n\n{thief.Name} saw a shadowy figure and got nervous so they ran in the opposite direction"
, "https://i.imgur.com/NLHMvVK.jpg"
, DiscordColor.Grayple
| WentToPrison -> | WentToPrison ->
embed.AddField("Result" , $"Imprisoned", true) |> ignore embed.AddField("Result" , $"Imprisoned", true) |> ignore
$"You're going to **PRISON**...\n\n{thief.Name} knows Karate and elbowed you in the nose. While unconscious, they called the cops." $"You're going to **PRISON**...\n\n{thief.Name} knows Karate and elbowed you in the nose. While unconscious, they called the cops."
@ -130,7 +106,6 @@ let steal target amount (ctx : IDiscordContext) =
Game.executePlayerActionWithTarget target ctx (fun thief victim -> async { do! Game.executePlayerActionWithTarget target ctx (fun thief victim -> async { do!
thief thief
|> checkVictimStealingCooldown victim |> checkVictimStealingCooldown victim
>>= checkThiefCooldown
|> handleResultWithResponse ctx (fun _ -> async { |> handleResultWithResponse ctx (fun _ -> async {
let cappedPrize , winPercentage , wasCapped = let cappedPrize , winPercentage , wasCapped =
calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength
@ -172,7 +147,6 @@ let handleSteal (ctx : IDiscordContext) =
let rand = Random(Guid.NewGuid().GetHashCode()) let rand = Random(Guid.NewGuid().GetHashCode())
let num = rand.NextDouble() let num = rand.NextDouble()
let result = winPercentage >= num , rand.Next(0,3) = 0
let dp = { DiscordPlayer.Id = targetId ; DiscordPlayer.Name = targetName } let dp = { DiscordPlayer.Id = targetId ; DiscordPlayer.Name = targetName }
let stealAction result = { let stealAction result = {
ItemId = -1 ItemId = -1
@ -186,11 +160,9 @@ let handleSteal (ctx : IDiscordContext) =
let getResultEmbed' = getResultEmbed winPercentage prize thief.Bank thief dp let getResultEmbed' = getResultEmbed winPercentage prize thief.Bank thief dp
// TODO: Send event to the hall of privacy // TODO: Send event to the hall of privacy
// TODO: We need to check if the player is on cooldown // TODO: We need to check if the player is on cooldown
match result with match winPercentage >= num with
| true , _ -> | true ->
let embed = getResultEmbed' Success let embed = getResultEmbed' Success
// let xp = 25
// embed.AddField("XP Gained", $"{xp}") |> ignore
do! Messaging.sendFollowUpEmbed ctx (embed.Build()) do! Messaging.sendFollowUpEmbed ctx (embed.Build())
match! DbService.tryFindPlayer targetId with match! DbService.tryFindPlayer targetId with
| Some t -> | Some t ->
@ -217,14 +189,8 @@ let handleSteal (ctx : IDiscordContext) =
Cooldown = ThiefCooldown.Minutes * 1<mins> Cooldown = ThiefCooldown.Minutes * 1<mins>
} }
let actions = thief |> Player.removeExpiredActions |> fun p -> Array.append [| stole |] p.Events let actions = thief |> Player.removeExpiredActions |> fun p -> Array.append [| stole |] p.Events
do! DbService.updatePlayer { thief with Bank = thief.Bank + prize ; XP = thief.XP + 0 ; Events = actions } do! DbService.updatePlayer { thief with Bank = thief.Bank + prize ; Events = actions }
// do! Async.Sleep 2000 | false ->
// do! ctx.FollowUp (XP.getRewardsEmbed 1 player) |> Async.AwaitTask
| false , false ->
let embed = getResultEmbed' VictimRanAway
do! DbService.updatePlayer { thief with Events = Array.append [| stealAction PlayerEventResult.Neutral |] thief.Events }
do! Messaging.sendFollowUpEmbed ctx (embed.Build())
| false , true ->
let embed = getResultEmbed' WentToPrison let embed = getResultEmbed' WentToPrison
do! DbService.updatePlayer { thief with Events = Array.append [| stealAction PlayerEventResult.Neutral |] thief.Events } do! DbService.updatePlayer { thief with Events = Array.append [| stealAction PlayerEventResult.Neutral |] thief.Events }
do! Messaging.sendFollowUpEmbed ctx (embed.Build()) do! Messaging.sendFollowUpEmbed ctx (embed.Build())