Optimizing from training steps
This commit is contained in:
parent
8652828892
commit
cacd9a32b1
@ -33,16 +33,16 @@ let getShieldGif = function
|
||||
| ShieldId.Cypher -> "https://s10.gifyu.com/images/Cypher-Smaller.gif"
|
||||
| _ -> shieldGif
|
||||
|
||||
let constructButtons (actionId: string) (buttonInfo : string) (player: PlayerData) itemType isTrainer =
|
||||
let constructButtons (actionId: string) (buttonInfo : string) (player: PlayerData) itemType ignoreCooldown =
|
||||
player
|
||||
|> Player.getItems itemType
|
||||
|> Array.map (fun item ->
|
||||
let action =
|
||||
player.Events
|
||||
|> Array.tryFind (fun i -> i.ItemId = item.Id)
|
||||
match action , isTrainer with
|
||||
match action , ignoreCooldown with
|
||||
| None , _ | Some _ , true ->
|
||||
DiscordButtonComponent(ButtonStyle.Primary, $"{actionId}-{item.Id}-{buttonInfo}", $"{item.Name}")
|
||||
DiscordButtonComponent(ButtonStyle.Primary, $"{actionId}-{item.Id}-{buttonInfo}-{player.Name}", $"{item.Name}")
|
||||
| Some act , false ->
|
||||
let c = ((Armory.getItem act.ItemId).Cooldown)
|
||||
let time = Messaging.getShortTimeText (TimeSpan.FromMinutes(int c)) act.Timestamp
|
||||
|
@ -139,10 +139,10 @@ let attack (target : DiscordUser) (ctx : IDiscordContext) =
|
||||
|
||||
let handleAttack (ctx : IDiscordContext) =
|
||||
Game.executePlayerAction ctx (fun attacker -> async {
|
||||
let split = ctx.GetInteractionId().Split("-")
|
||||
let hackId = int split.[1]
|
||||
let tokens = ctx.GetInteractionId().Split("-")
|
||||
let hackId = int tokens.[1]
|
||||
let hack = Armory.getItem hackId
|
||||
let resultId , targetId = UInt64.TryParse split.[2]
|
||||
let resultId , targetId = UInt64.TryParse tokens.[2]
|
||||
let! resultTarget = DbService.tryFindPlayer targetId
|
||||
|
||||
match resultTarget , true , resultId with
|
||||
@ -175,8 +175,8 @@ let defend (ctx : IDiscordContext) =
|
||||
|
||||
let handleDefense (ctx : IDiscordContext) =
|
||||
Game.executePlayerAction ctx (fun player -> async {
|
||||
let split = ctx.GetInteractionId().Split("-")
|
||||
let shieldId = int split.[1]
|
||||
let tokens = ctx.GetInteractionId().Split("-")
|
||||
let shieldId = int tokens.[1]
|
||||
let shield = Armory.getItem shieldId
|
||||
|
||||
do! player
|
||||
|
@ -96,10 +96,10 @@ let playRPS target ctx =
|
||||
})
|
||||
|
||||
let handleRPS (ctx : IDiscordContext) =
|
||||
let split = ctx.GetInteractionId().Split("-")
|
||||
let move = split.[1]
|
||||
let targetId = uint64 split.[2]
|
||||
let isResponse = split.[4] = "True"
|
||||
let tokens = ctx.GetInteractionId().Split("-")
|
||||
let move = tokens.[1]
|
||||
let targetId = uint64 tokens.[2]
|
||||
let isResponse = tokens.[4] = "True"
|
||||
Game.executePlayerActionWithTargetId false targetId ctx (fun attacker defender -> async {
|
||||
if isResponse then
|
||||
let eventCtx = ctx.GetContext() :?> ComponentInteractionCreateEventArgs
|
||||
@ -111,7 +111,7 @@ let handleRPS (ctx : IDiscordContext) =
|
||||
.AsEphemeral(true)
|
||||
do! eventCtx.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) |> Async.AwaitTask
|
||||
let move1 = moveFromString move
|
||||
let move2 = moveFromString split.[5]
|
||||
let move2 = moveFromString tokens.[5]
|
||||
let winner = getWinner move1 move2
|
||||
let embeds = matchResultsEmbed winner move1 move2 attacker defender |> Seq.map (fun e -> e.Build())
|
||||
let builder = DiscordMessageBuilder().AddEmbeds(embeds)
|
||||
|
12
Bot/Thief.fs
12
Bot/Thief.fs
@ -159,13 +159,13 @@ let steal target amount (ctx : IDiscordContext) =
|
||||
})
|
||||
|
||||
let handleSteal (ctx : IDiscordContext) =
|
||||
let split = ctx.GetInteractionId().Split("-")
|
||||
let answer = split.[1]
|
||||
let tokens = ctx.GetInteractionId().Split("-")
|
||||
let answer = tokens.[1]
|
||||
|
||||
let handleYes (victim : PlayerData) (thief : PlayerData) = async {
|
||||
let targetId = uint64 split.[2]
|
||||
let targetName = split.[3]
|
||||
let amount = int split.[4]
|
||||
let targetId = uint64 tokens.[2]
|
||||
let targetName = tokens.[3]
|
||||
let amount = int tokens.[4]
|
||||
let prize , winPercentage , _ = calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength
|
||||
let prize = int prize * 1<GBT>
|
||||
|
||||
@ -233,7 +233,7 @@ let handleSteal (ctx : IDiscordContext) =
|
||||
do! ctx.GetDiscordMember().GrantRoleAsync(role) |> Async.AwaitTask
|
||||
}
|
||||
if answer = "yes" then
|
||||
let targetId = uint64 split.[2]
|
||||
let targetId = uint64 tokens.[2]
|
||||
Game.executePlayerActionWithTargetId true targetId ctx (fun attacker defender -> async {
|
||||
do! attacker
|
||||
|> Player.removeExpiredActions
|
||||
|
@ -47,7 +47,10 @@ let sendInitialEmbed (client : DiscordClient) =
|
||||
} |> Async.RunSynchronously
|
||||
|
||||
let handleTrainerStep1 (ctx : IDiscordContext) =
|
||||
Game.executePlayerAction ctx (fun player -> async {
|
||||
async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
let role = ctx.GetGuild().GetRole(GuildEnvironment.roleTrainee)
|
||||
do! ctx.GetDiscordMember().GrantRoleAsync(role)
|
||||
|> Async.AwaitTask
|
||||
@ -56,10 +59,13 @@ let handleTrainerStep1 (ctx : IDiscordContext) =
|
||||
("Beautopia© is a dangerous place... quick, put up a SHIELD 🛡 before another Degen hacks you, and steals your 💰$GBT.\n\n"
|
||||
+ "To enable it, you need to run the `/shield` slash command.\n\n"
|
||||
+ $"Type the `/shield` command now, then select - `{defaultShield.Name}`\n")
|
||||
})
|
||||
} |> Async.StartAsTask :> Task
|
||||
|
||||
let defend (ctx : IDiscordContext) =
|
||||
async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
@ -76,20 +82,25 @@ let handleDefenseMsg hackId = {
|
||||
}
|
||||
|
||||
let handleDefense (ctx : IDiscordContext) =
|
||||
Game.executePlayerAction ctx (fun player -> async {
|
||||
async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
do! ctx.Respond InteractionResponseType.DeferredChannelMessageWithSource builder |> Async.AwaitTask
|
||||
let sendMessage' = sendFollowUpMessage ctx
|
||||
let split = ctx.GetInteractionId().Split("-")
|
||||
let shieldId = enum<ShieldId>(int split.[2])
|
||||
let tokens = ctx.GetInteractionId().Split("-")
|
||||
let shieldId = enum<ShieldId>(int tokens.[2])
|
||||
let shield = Armory.getItem (int shieldId)
|
||||
let playerName = enum<ShieldId>(int tokens.[3])
|
||||
let embed = Embeds.responseCreatedShield shield
|
||||
do! ctx.FollowUp embed |> Async.AwaitTask
|
||||
do! Async.Sleep 4000
|
||||
do! sendMessage' $"Ok, good, let me make sure that worked.\n\nI'll try to **hack** you now with **{defaultHack.Name}**"
|
||||
do! Async.Sleep 5000
|
||||
do! sendMessage' $"❌ HACKING FAILED!\n\n{player.Name} defended hack from <@{Sensei.Id}>!"
|
||||
do! sendMessage' $"❌ HACKING FAILED!\n\n{playerName} defended hack from <@{Sensei.Id}>!"
|
||||
do! Async.Sleep 4000
|
||||
do! sendFollowUpMessageWithButton ctx (handleDefenseMsg defaultHack.Name)
|
||||
})
|
||||
} |> Async.StartAsTask :> Task
|
||||
|
||||
let handleTrainerStep3 (ctx : IDiscordContext) =
|
||||
async {
|
||||
@ -184,8 +195,8 @@ let handleArsenal (ctx : IDiscordContext) =
|
||||
|
||||
let handleButtonEvent (ctx : IDiscordContext) =
|
||||
async {
|
||||
let split = ctx.GetInteractionId().Split("-")
|
||||
match int split.[1] with
|
||||
let tokens = ctx.GetInteractionId().Split("-")
|
||||
match int tokens.[1] with
|
||||
| 1 -> do! handleTrainerStep1 ctx |> Async.AwaitTask
|
||||
| 2 -> do! handleDefense ctx |> Async.AwaitTask
|
||||
| 3 -> do! handleTrainerStep3 ctx |> Async.AwaitTask
|
||||
|
Loading…
x
Reference in New Issue
Block a user