Remove shield if they sell it

This commit is contained in:
Joseph Ferano 2022-02-24 12:59:32 +07:00
parent 52e263bb90
commit 34d5d9c42a
2 changed files with 29 additions and 12 deletions

View File

@ -60,18 +60,22 @@ let handleBuyItem (ctx : IDiscordContext) itemId =
let handleSell (ctx : IDiscordContext) itemId = let handleSell (ctx : IDiscordContext) itemId =
Game.executePlayerAction ctx (fun player -> async { Game.executePlayerAction ctx (fun player -> async {
let item = Armory.getItem itemId let item = Armory.getItem itemId
do! player do!
|> checkSoldItemAlready item player
|> handleResultWithResponse ctx (fun player -> async { |> checkSoldItemAlready item
let updatedPlayer = { |> handleResultWithResponse ctx (fun player -> async {
player with let updatedPlayer = {
Bank = player.Bank + item.Price player with
Inventory = player.Inventory |> Array.filter (fun i -> i.Id <> itemId) Bank = player.Bank + item.Price
Events = player.Events |> Array.filter (fun e -> match e.Type with Shielding _ -> true | _ -> false) Inventory = player.Inventory |> Array.filter (fun i -> i.Id <> itemId)
} }
do! DbService.updatePlayer GuildEnvironment.pgDb updatedPlayer do!
|> Async.Ignore [ DbService.updatePlayer GuildEnvironment.pgDb updatedPlayer |> Async.Ignore
do! sendFollowUpMessage ctx $"Sold {item.Type} {item.Name} for {item.Price}! Current Balance: {updatedPlayer.Bank}" DbService.removeShieldEvent GuildEnvironment.pgDb updatedPlayer.DiscordId itemId |> Async.Ignore
sendFollowUpMessage ctx $"Sold {item.Type} {item.Name} for {item.Price}! Current Balance: {updatedPlayer.Bank}" ]
|> Async.Parallel
|> Async.Ignore
}) })
}) })

View File

@ -122,6 +122,19 @@ let checkHasAchievement connStr (did : uint64) (achievement : string) = async {
return List.isEmpty result |> not return List.isEmpty result |> not
} }
let removeShieldEvent connStr (did : uint64) shieldId =
connStr
|> Sql.connect
|> Sql.parameters
[ ( "did" , Sql.string (string did) )
( "shield_id", Sql.int shieldId ) ]
|> Sql.query """
WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
DELETE FROM player_event USING usr WHERE user_id = usr.id and event_type = 'Shielding' and item_id = @shield_id
"""
|> Sql.executeNonQueryAsync
|> Async.AwaitTask
let addPlayerEvent connStr (did : uint64) (playerEvent : PlayerEvent) = let addPlayerEvent connStr (did : uint64) (playerEvent : PlayerEvent) =
let sqlParams , query = let sqlParams , query =
match playerEvent.Type with match playerEvent.Type with