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 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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user