Fix store bugs

This commit is contained in:
Joseph Ferano 2022-01-24 01:38:08 +07:00
parent ed68f0b87d
commit b501dfbb73
2 changed files with 34 additions and 39 deletions

View File

@ -2,61 +2,61 @@
{
"Name" : "Virus",
"ItemType" : { "Case" : "Hack" },
"Cost" : 5.0
"Cost" : 5
},
{
"Name" : "Ransom",
"ItemType" : { "Case" : "Hack" },
"Cost" : 10.0
"Cost" : 10
},
{
"Name" : "Worm",
"ItemType" : { "Case" : "Hack" },
"Cost" : 5.0
"Cost" : 5
},
{
"Name" : "DDos",
"ItemType" : { "Case" : "Hack" },
"Cost" : 10.0
"Cost" : 10
},
{
"Name" : "Crack",
"ItemType" : { "Case" : "Hack" },
"Cost" : 5.0
"Cost" : 5
},
{
"Name" : "Injection",
"ItemType" : { "Case" : "Hack" },
"Cost" : 10.0
"Cost" : 10
},
{
"Name" : "Firewall",
"ItemType" : { "Case" : "Shield" },
"Cost" : 5.0
"Cost" : 5
},
{
"Name" : "PortScan",
"ItemType" : { "Case" : "Shield" },
"Cost" : 10.0
"Cost" : 10
},
{
"Name" : "Cypher",
"ItemType" : { "Case" : "Shield" },
"Cost" : 5.0
"Cost" : 5
},
{
"Name" : "Encryption",
"ItemType" : { "Case" : "Shield" },
"Cost" : 10.0
"Cost" : 10
},
{
"Name" : "Sanitation",
"ItemType" : { "Case" : "Shield" },
"Cost" : 5.0
"Cost" : 5
},
{
"Name" : "Hardening",
"ItemType" : { "Case" : "Shield" },
"Cost" : 10.0
"Cost" : 10
}
]

View File

@ -11,11 +11,9 @@ open Degenz.Shared
open Newtonsoft.Json
let store =
try
let file = System.IO.File.ReadAllText("Items.json")
JsonConvert.DeserializeObject<Item array>(file)
|> Array.groupBy (fun (i : Item) -> i.ItemType)
with _ -> [||]
let viewStore (ctx : InteractionContext) =
async {
@ -85,7 +83,7 @@ let constructItemButtons playerInfo itemType (items : 'a array) =
items
|> Seq.map (fun item -> DiscordButtonComponent(ButtonStyle.Primary, $"{playerInfo}-{itemType}-{item}", $"{item}"))
let sellItem (ctx : InteractionContext) =
let sell (ctx : InteractionContext) =
async {
let! playerResult = DbService.tryFindPlayer ctx.Member.Id
match playerResult with
@ -123,6 +121,23 @@ let sellItem (ctx : InteractionContext) =
} |> Async.StartAsTask
:> Task
let updateShields player salePrice updatedShields = { player with Bank = player.Bank + salePrice ; Shields = updatedShields }
let updateHacks player salePrice updatedHacks = { player with Bank = player.Bank + salePrice ; Weapons = updatedHacks }
let sellItem (event : ComponentInteractionCreateEventArgs) updateFn player inventory itemType itemName =
async {
let item = getItems itemType |> Array.find (fun i -> i.Name = itemName)
let salePrice = item.Cost
let updatedItems = inventory |> Array.filter (fun i -> string i <> itemName)
let updatedPlayer = updateFn player salePrice updatedItems
do! DbService.updatePlayer updatedPlayer
let builder = DiscordInteractionResponseBuilder()
builder.IsEphemeral <- true
builder.Content <- $"Sold {itemType.ToString().ToLower()} {itemName} for {salePrice}! Current Balance: {updatedPlayer.Bank}"
do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder)
|> Async.AwaitTask
}
let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
async {
let! playerResult = DbService.tryFindPlayer event.User.Id
@ -132,28 +147,8 @@ let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCrea
let itemType = match split.[0] with "Hack" -> ItemType.Hack | _ -> ItemType.Shield
let itemName = split.[1]
match itemType with
| ItemType.Hack ->
let item = getItems ItemType.Hack |> Array.find (fun w -> w.Name = itemName)
let salePrice = item.Cost / 2
let updatedWeapons = player.Weapons |> Array.filter (fun (w : Hack) -> string w <> itemName)
let updatedPlayer = { player with Bank = player.Bank + salePrice ; Weapons = updatedWeapons }
do! DbService.updatePlayer updatedPlayer
let builder = DiscordInteractionResponseBuilder()
builder.IsEphemeral <- true
builder.Content <- $"Sold hack {itemName} for {salePrice}! Current Balance: {updatedPlayer.Bank}"
do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder)
|> Async.AwaitTask
| ItemType.Shield ->
let item = getItems ItemType.Shield |> Array.find (fun s -> s.Name = itemName)
let salePrice = item.Cost / 2
let updatedShields = player.Shields |> Array.filter (fun (s : Shield) -> string s <> itemName)
let updatedPlayer = { player with Bank = player.Bank + salePrice ; Shields = updatedShields }
do! DbService.updatePlayer updatedPlayer
let builder = DiscordInteractionResponseBuilder()
builder.IsEphemeral <- true
builder.Content <- $"Sold shield {itemName} for {salePrice}! Current Balance: {updatedPlayer.Bank}"
do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder)
|> Async.AwaitTask
| ItemType.Hack -> do! sellItem event updateHacks player player.Weapons ItemType.Hack itemName
| ItemType.Shield -> do! sellItem event updateShields player player.Shields ItemType.Hack itemName
| None ->
let builder = DiscordInteractionResponseBuilder()
builder.IsEphemeral <- true
@ -166,7 +161,7 @@ let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCrea
type Store() =
inherit ApplicationCommandModule ()
[<SlashCommand("store", "View items available for purchase")>]
[<SlashCommand("view-store", "View items available for purchase")>]
member _.ViewStore (ctx : InteractionContext) = viewStore ctx
[<SlashCommand("buy-hack", "Purchase a hack attack you can use to earn GoodBoyTokenz")>]
@ -178,5 +173,5 @@ type Store() =
buyShield ctx shieldId
[<SlashCommand("sell", "Sell an item in your inventory for GoodBoyTokenz")>]
member this.SellItem (ctx : InteractionContext) = sellItem ctx
member this.SellItem (ctx : InteractionContext) = sell ctx