Embeds for bonus

This commit is contained in:
Joseph Ferano 2022-06-01 16:50:53 +07:00
parent f555b2f95a
commit 56525f2ac2
3 changed files with 33 additions and 19 deletions

View File

@ -49,7 +49,7 @@ let pickDefense actionId player isTrainer =
.AddEmbeds([ DiscordEmbedBuilder().WithImageUrl(shieldGif).Build() ; embed.Build() ]) .AddEmbeds([ DiscordEmbedBuilder().WithImageUrl(shieldGif).Build() ; embed.Build() ])
.AsEphemeral(true) .AsEphemeral(true)
let pickHack actionId attacker defender isTrainer = let pickHack actionId attacker defender bonus isTrainer =
let hackItems = let hackItems =
attacker.Inventory attacker.Inventory
|> Inventory.getItemsByType ItemType.Hack |> Inventory.getItemsByType ItemType.Hack
@ -57,10 +57,11 @@ let pickHack actionId attacker defender isTrainer =
let buttons = constructButtons actionId $"{defender.DiscordId}-{defender.Name}" attacker hackItems isTrainer let buttons = constructButtons actionId $"{defender.DiscordId}-{defender.Name}" attacker hackItems isTrainer
let stealMsg = if not isTrainer then $"{defender.Name} has **{defender.Bank} $GBT** we can take from them. " else "" let stealMsg = if not isTrainer then $"{defender.Name} has **{defender.Bank} $GBT** we can take from them. " else ""
let strengthMsg = $"You have `{attacker.Stats.Strength.Amount}` strength, while they have `{defender.Stats.Strength.Amount}`\n**Bonus:** `{bonus} 💰$GBT`"
let embed = let embed =
DiscordEmbedBuilder() DiscordEmbedBuilder()
.WithTitle("Hack Attack") .WithTitle("Hack Attack")
.WithDescription($"{stealMsg}Pick the hack you want to use.") .WithDescription($"{stealMsg}\n\n{strengthMsg}\n\nPick the hack you want to use.")
if not isTrainer then if not isTrainer then
for hack in Inventory.getHacks attacker.Inventory do for hack in Inventory.getHacks attacker.Inventory do
@ -72,14 +73,23 @@ let pickHack actionId attacker defender isTrainer =
.AddEmbeds([ DiscordEmbedBuilder().WithImageUrl(hackGif).Build() ; embed.Build() ]) .AddEmbeds([ DiscordEmbedBuilder().WithImageUrl(hackGif).Build() ; embed.Build() ])
.AsEphemeral true .AsEphemeral true
let responseSuccessfulHack earnedMoney (targetId : uint64) amountTaken (hack : HackItem) = let responseSuccessfulHack (hacker : PlayerData) (target : PlayerData) totalTaken bonus (hack : HackItem) =
let earnedMoney = totalTaken > 0<GBT>
let embed = let embed =
DiscordEmbedBuilder() DiscordEmbedBuilder()
.WithImageUrl(hack.ImageUrl) .WithImageUrl(hack.ImageUrl)
.WithTitle("Hack Attack") .WithTitle("Hack Attack")
.WithDescription($"You successfully hacked <@{targetId}> using {hack.Name}" .WithDescription($"You successfully hacked <@{target.DiscordId}> using {hack.Name}"
+ (if earnedMoney then $", and took {amountTaken} 💰$GBT from them!" else "!")) + (if earnedMoney then $", and took {totalTaken} 💰$GBT from them!" else "!"))
embed.AddField("Prize", $"`{totalTaken} 💰$GBT`", true) |> ignore
let bonusMsg =
if bonus > 0<GBT>
then $"{hacker.Stats.Strength.Amount} **VS** {target.Stats.Strength.Amount} -> `+{bonus} $GBT`"
else "None"
embed.AddField("Strength Bonus", bonusMsg, true) |> ignore
embed.AddField("New $GBT Balance", $"`💰` {hacker.Bank} `💰` {hacker.Bank + totalTaken} `(+{totalTaken} $GBT)`") |> ignore
DiscordFollowupMessageBuilder() DiscordFollowupMessageBuilder()
.AddEmbed(embed.Build()) .AddEmbed(embed.Build())
.AsEphemeral(true) .AsEphemeral(true)

View File

@ -69,6 +69,14 @@ let checkTargetHasFunds target player =
| true -> Error $"Looks like the poor bastard has no $GBT... pick a different victim." | true -> Error $"Looks like the poor bastard has no $GBT... pick a different victim."
| false -> Ok player | false -> Ok player
let strengthBonus attacker defender =
attacker - defender
|> max 0
|> float
|> (*) 0.01
|> (*) 200.0 // Bonus
|> int
let runHackerBattle defender (hack : HackItem) = let runHackerBattle defender (hack : HackItem) =
defender defender
|> Player.removeExpiredActions |> Player.removeExpiredActions
@ -102,19 +110,13 @@ let updateCombatants successfulHack (attacker : PlayerData) (defender : PlayerDa
|> Async.Ignore |> Async.Ignore
let successfulHack (ctx : IDiscordContext) attacker defender (hack : HackItem) = let successfulHack (ctx : IDiscordContext) attacker defender (hack : HackItem) =
let strengthBonus attacker defender =
attacker - defender
|> max 0
|> float
|> (*) 0.01
|> (*) 200.0 // Bonus
|> int
async { async {
let bonus = strengthBonus attacker.Stats.Strength.Amount defender.Stats.Strength.Amount let bonus = strengthBonus attacker.Stats.Strength.Amount defender.Stats.Strength.Amount |> (*) 1<GBT>
let prizeAmount = if hack.Power + bonus < int defender.Bank then hack.Power + bonus else int defender.Bank let basePrize = hack.Power * 1<GBT>
do! updateCombatants true attacker defender hack (prizeAmount * 1<GBT>) let prizeAmount = if basePrize + bonus < defender.Bank then basePrize + bonus else defender.Bank
do! updateCombatants true attacker defender hack prizeAmount
let embed = Embeds.responseSuccessfulHack true defender.DiscordId prizeAmount hack let embed = Embeds.responseSuccessfulHack attacker defender prizeAmount bonus hack
do! ctx.FollowUp embed |> Async.AwaitTask do! ctx.FollowUp embed |> Async.AwaitTask
let builder = Embeds.eventSuccessfulHack ctx defender prizeAmount let builder = Embeds.eventSuccessfulHack ctx defender prizeAmount
@ -150,7 +152,8 @@ let hack (target : DiscordUser) (ctx : IDiscordContext) =
>>= checkPlayerIsAttackingThemselves defender >>= checkPlayerIsAttackingThemselves defender
|> function |> function
| Ok atkr -> async { | Ok atkr -> async {
let embed = Embeds.pickHack "Attack" atkr defender false let bonus = strengthBonus attacker.Stats.Strength.Amount defender.Stats.Strength.Amount
let embed = Embeds.pickHack "Attack" atkr defender bonus false
do! ctx.FollowUp(embed) |> Async.AwaitTask do! ctx.FollowUp(embed) |> Async.AwaitTask
// TODO: Add a call when it's an error with the error type, must include an error code // TODO: Add a call when it's an error with the error type, must include an error code
do! Analytics.hackCommand (ctx.GetDiscordMember()) do! Analytics.hackCommand (ctx.GetDiscordMember())

View File

@ -126,7 +126,7 @@ let hack (target : DiscordUser) (ctx : IDiscordContext) =
| true -> | true ->
let player = { PlayerData.empty with Inventory = [ hackItem ] } let player = { PlayerData.empty with Inventory = [ hackItem ] }
let bot = { PlayerData.empty with DiscordId = Sensei.Id ; Name = Sensei.Name } let bot = { PlayerData.empty with DiscordId = Sensei.Id ; Name = Sensei.Name }
let embed = Embeds.pickHack "Trainer-4" player bot true let embed = Embeds.pickHack "Trainer-4" player bot 0 true
do! ctx.FollowUp(embed) |> Async.AwaitTask do! ctx.FollowUp(embed) |> Async.AwaitTask
| false -> | false ->
@ -143,7 +143,8 @@ let handleHack (ctx : IDiscordContext) =
PlayerInteractions.executePlayerAction ctx (fun player -> async { PlayerInteractions.executePlayerAction ctx (fun player -> async {
let sendMessage' = sendFollowUpMessage ctx let sendMessage' = sendFollowUpMessage ctx
do! Async.Sleep 1000 do! Async.Sleep 1000
let embed = Embeds.responseSuccessfulHack false Sensei.Id defaultHack.Power defaultHack let bot = { PlayerData.empty with DiscordId = Sensei.Id ; Name = Sensei.Name }
let embed = Embeds.responseSuccessfulHack player bot (defaultHack.Power * 1<GBT>) 0<GBT> defaultHack
do! ctx.FollowUp(embed) |> Async.AwaitTask do! ctx.FollowUp(embed) |> Async.AwaitTask
do! Async.Sleep 1000 do! Async.Sleep 1000
do! sendMessage' do! sendMessage'