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