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"
|
| ShieldId.Cypher -> "https://s10.gifyu.com/images/Cypher-Smaller.gif"
|
||||||
| _ -> shieldGif
|
| _ -> shieldGif
|
||||||
|
|
||||||
let constructButtons (actionId: string) (buttonInfo : string) (player: PlayerData) itemType isTrainer =
|
let constructButtons (actionId: string) (buttonInfo : string) (player: PlayerData) itemType ignoreCooldown =
|
||||||
player
|
player
|
||||||
|> Player.getItems itemType
|
|> Player.getItems itemType
|
||||||
|> Array.map (fun item ->
|
|> Array.map (fun item ->
|
||||||
let action =
|
let action =
|
||||||
player.Events
|
player.Events
|
||||||
|> Array.tryFind (fun i -> i.ItemId = item.Id)
|
|> Array.tryFind (fun i -> i.ItemId = item.Id)
|
||||||
match action , isTrainer with
|
match action , ignoreCooldown with
|
||||||
| None , _ | Some _ , true ->
|
| 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 ->
|
| Some act , false ->
|
||||||
let c = ((Armory.getItem act.ItemId).Cooldown)
|
let c = ((Armory.getItem act.ItemId).Cooldown)
|
||||||
let time = Messaging.getShortTimeText (TimeSpan.FromMinutes(int c)) act.Timestamp
|
let time = Messaging.getShortTimeText (TimeSpan.FromMinutes(int c)) act.Timestamp
|
||||||
|
@ -139,10 +139,10 @@ let attack (target : DiscordUser) (ctx : IDiscordContext) =
|
|||||||
|
|
||||||
let handleAttack (ctx : IDiscordContext) =
|
let handleAttack (ctx : IDiscordContext) =
|
||||||
Game.executePlayerAction ctx (fun attacker -> async {
|
Game.executePlayerAction ctx (fun attacker -> async {
|
||||||
let split = ctx.GetInteractionId().Split("-")
|
let tokens = ctx.GetInteractionId().Split("-")
|
||||||
let hackId = int split.[1]
|
let hackId = int tokens.[1]
|
||||||
let hack = Armory.getItem hackId
|
let hack = Armory.getItem hackId
|
||||||
let resultId , targetId = UInt64.TryParse split.[2]
|
let resultId , targetId = UInt64.TryParse tokens.[2]
|
||||||
let! resultTarget = DbService.tryFindPlayer targetId
|
let! resultTarget = DbService.tryFindPlayer targetId
|
||||||
|
|
||||||
match resultTarget , true , resultId with
|
match resultTarget , true , resultId with
|
||||||
@ -175,8 +175,8 @@ let defend (ctx : IDiscordContext) =
|
|||||||
|
|
||||||
let handleDefense (ctx : IDiscordContext) =
|
let handleDefense (ctx : IDiscordContext) =
|
||||||
Game.executePlayerAction ctx (fun player -> async {
|
Game.executePlayerAction ctx (fun player -> async {
|
||||||
let split = ctx.GetInteractionId().Split("-")
|
let tokens = ctx.GetInteractionId().Split("-")
|
||||||
let shieldId = int split.[1]
|
let shieldId = int tokens.[1]
|
||||||
let shield = Armory.getItem shieldId
|
let shield = Armory.getItem shieldId
|
||||||
|
|
||||||
do! player
|
do! player
|
||||||
|
@ -96,10 +96,10 @@ let playRPS target ctx =
|
|||||||
})
|
})
|
||||||
|
|
||||||
let handleRPS (ctx : IDiscordContext) =
|
let handleRPS (ctx : IDiscordContext) =
|
||||||
let split = ctx.GetInteractionId().Split("-")
|
let tokens = ctx.GetInteractionId().Split("-")
|
||||||
let move = split.[1]
|
let move = tokens.[1]
|
||||||
let targetId = uint64 split.[2]
|
let targetId = uint64 tokens.[2]
|
||||||
let isResponse = split.[4] = "True"
|
let isResponse = tokens.[4] = "True"
|
||||||
Game.executePlayerActionWithTargetId false targetId ctx (fun attacker defender -> async {
|
Game.executePlayerActionWithTargetId false targetId ctx (fun attacker defender -> async {
|
||||||
if isResponse then
|
if isResponse then
|
||||||
let eventCtx = ctx.GetContext() :?> ComponentInteractionCreateEventArgs
|
let eventCtx = ctx.GetContext() :?> ComponentInteractionCreateEventArgs
|
||||||
@ -111,7 +111,7 @@ let handleRPS (ctx : IDiscordContext) =
|
|||||||
.AsEphemeral(true)
|
.AsEphemeral(true)
|
||||||
do! eventCtx.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) |> Async.AwaitTask
|
do! eventCtx.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) |> Async.AwaitTask
|
||||||
let move1 = moveFromString move
|
let move1 = moveFromString move
|
||||||
let move2 = moveFromString split.[5]
|
let move2 = moveFromString tokens.[5]
|
||||||
let winner = getWinner move1 move2
|
let winner = getWinner move1 move2
|
||||||
let embeds = matchResultsEmbed winner move1 move2 attacker defender |> Seq.map (fun e -> e.Build())
|
let embeds = matchResultsEmbed winner move1 move2 attacker defender |> Seq.map (fun e -> e.Build())
|
||||||
let builder = DiscordMessageBuilder().AddEmbeds(embeds)
|
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 handleSteal (ctx : IDiscordContext) =
|
||||||
let split = ctx.GetInteractionId().Split("-")
|
let tokens = ctx.GetInteractionId().Split("-")
|
||||||
let answer = split.[1]
|
let answer = tokens.[1]
|
||||||
|
|
||||||
let handleYes (victim : PlayerData) (thief : PlayerData) = async {
|
let handleYes (victim : PlayerData) (thief : PlayerData) = async {
|
||||||
let targetId = uint64 split.[2]
|
let targetId = uint64 tokens.[2]
|
||||||
let targetName = split.[3]
|
let targetName = tokens.[3]
|
||||||
let amount = int split.[4]
|
let amount = int tokens.[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>
|
||||||
|
|
||||||
@ -233,7 +233,7 @@ let handleSteal (ctx : IDiscordContext) =
|
|||||||
do! ctx.GetDiscordMember().GrantRoleAsync(role) |> Async.AwaitTask
|
do! ctx.GetDiscordMember().GrantRoleAsync(role) |> Async.AwaitTask
|
||||||
}
|
}
|
||||||
if answer = "yes" then
|
if answer = "yes" then
|
||||||
let targetId = uint64 split.[2]
|
let targetId = uint64 tokens.[2]
|
||||||
Game.executePlayerActionWithTargetId true targetId ctx (fun attacker defender -> async {
|
Game.executePlayerActionWithTargetId true targetId ctx (fun attacker defender -> async {
|
||||||
do! attacker
|
do! attacker
|
||||||
|> Player.removeExpiredActions
|
|> Player.removeExpiredActions
|
||||||
|
@ -47,7 +47,10 @@ let sendInitialEmbed (client : DiscordClient) =
|
|||||||
} |> Async.RunSynchronously
|
} |> Async.RunSynchronously
|
||||||
|
|
||||||
let handleTrainerStep1 (ctx : IDiscordContext) =
|
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)
|
let role = ctx.GetGuild().GetRole(GuildEnvironment.roleTrainee)
|
||||||
do! ctx.GetDiscordMember().GrantRoleAsync(role)
|
do! ctx.GetDiscordMember().GrantRoleAsync(role)
|
||||||
|> Async.AwaitTask
|
|> 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"
|
("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"
|
+ "To enable it, you need to run the `/shield` slash command.\n\n"
|
||||||
+ $"Type the `/shield` command now, then select - `{defaultShield.Name}`\n")
|
+ $"Type the `/shield` command now, then select - `{defaultShield.Name}`\n")
|
||||||
})
|
} |> Async.StartAsTask :> Task
|
||||||
|
|
||||||
let defend (ctx : IDiscordContext) =
|
let defend (ctx : IDiscordContext) =
|
||||||
async {
|
async {
|
||||||
|
let builder = DiscordInteractionResponseBuilder()
|
||||||
|
builder.IsEphemeral <- true
|
||||||
|
builder.Content <- "Content"
|
||||||
let builder = DiscordInteractionResponseBuilder()
|
let builder = DiscordInteractionResponseBuilder()
|
||||||
builder.IsEphemeral <- true
|
builder.IsEphemeral <- true
|
||||||
builder.Content <- "Content"
|
builder.Content <- "Content"
|
||||||
@ -76,20 +82,25 @@ let handleDefenseMsg hackId = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let handleDefense (ctx : IDiscordContext) =
|
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 sendMessage' = sendFollowUpMessage ctx
|
||||||
let split = ctx.GetInteractionId().Split("-")
|
let tokens = ctx.GetInteractionId().Split("-")
|
||||||
let shieldId = enum<ShieldId>(int split.[2])
|
let shieldId = enum<ShieldId>(int tokens.[2])
|
||||||
let shield = Armory.getItem (int shieldId)
|
let shield = Armory.getItem (int shieldId)
|
||||||
|
let playerName = enum<ShieldId>(int tokens.[3])
|
||||||
let embed = Embeds.responseCreatedShield shield
|
let embed = Embeds.responseCreatedShield shield
|
||||||
do! ctx.FollowUp embed |> Async.AwaitTask
|
do! ctx.FollowUp embed |> Async.AwaitTask
|
||||||
do! Async.Sleep 4000
|
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! 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! 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! Async.Sleep 4000
|
||||||
do! sendFollowUpMessageWithButton ctx (handleDefenseMsg defaultHack.Name)
|
do! sendFollowUpMessageWithButton ctx (handleDefenseMsg defaultHack.Name)
|
||||||
})
|
} |> Async.StartAsTask :> Task
|
||||||
|
|
||||||
let handleTrainerStep3 (ctx : IDiscordContext) =
|
let handleTrainerStep3 (ctx : IDiscordContext) =
|
||||||
async {
|
async {
|
||||||
@ -184,8 +195,8 @@ let handleArsenal (ctx : IDiscordContext) =
|
|||||||
|
|
||||||
let handleButtonEvent (ctx : IDiscordContext) =
|
let handleButtonEvent (ctx : IDiscordContext) =
|
||||||
async {
|
async {
|
||||||
let split = ctx.GetInteractionId().Split("-")
|
let tokens = ctx.GetInteractionId().Split("-")
|
||||||
match int split.[1] with
|
match int tokens.[1] with
|
||||||
| 1 -> do! handleTrainerStep1 ctx |> Async.AwaitTask
|
| 1 -> do! handleTrainerStep1 ctx |> Async.AwaitTask
|
||||||
| 2 -> do! handleDefense ctx |> Async.AwaitTask
|
| 2 -> do! handleDefense ctx |> Async.AwaitTask
|
||||||
| 3 -> do! handleTrainerStep3 ctx |> Async.AwaitTask
|
| 3 -> do! handleTrainerStep3 ctx |> Async.AwaitTask
|
||||||
|
Loading…
x
Reference in New Issue
Block a user