Read inventory int array

This commit is contained in:
Joseph Ferano 2022-02-22 12:06:09 +07:00
parent 49d29a249a
commit 24ce8bdc7f
4 changed files with 28 additions and 22 deletions

View File

@ -16,8 +16,8 @@ module Commands =
Name = nickname Name = nickname
Inventory = [| hack ; shield |] Inventory = [| hack ; shield |]
Events = [||] Events = [||]
XP = 0 // XP = 0
Achievements = [||] // Achievements = [||]
Traits = PlayerTraits.empty Traits = PlayerTraits.empty
Bank = 100<GBT> } Bank = 100<GBT> }

View File

@ -148,7 +148,9 @@ let handleHack (ctx : IDiscordContext) =
let sb = StringBuilder("Here, ") let sb = StringBuilder("Here, ")
let isFirstTrainer = player.Achievements |> Seq.contains trainerAchievement |> not // TODO DB:
// let isFirstTrainer = player.Achievements |> Seq.contains trainerAchievement |> not
let isFirstTrainer = true
if isFirstTrainer then if isFirstTrainer then
do! DbService.addAchievement player.DiscordId trainerAchievement do! DbService.addAchievement player.DiscordId trainerAchievement
@ -180,7 +182,9 @@ let handleArsenal (ctx : IDiscordContext) =
do! DbService.updatePlayer updatedPlayer do! DbService.updatePlayer updatedPlayer
let embed = Embeds.getArsenalEmbed updatedPlayer let embed = Embeds.getArsenalEmbed updatedPlayer
do! ctx.FollowUp(embed) |> Async.AwaitTask do! ctx.FollowUp(embed) |> Async.AwaitTask
if not (player.Achievements |> Array.contains trainerAchievement) then // TODO DB:
// if not (player.Achievements |> Array.contains trainerAchievement) then
if true then
do! Async.Sleep 3000 do! Async.Sleep 3000
let rewards = [ $"{defaultHack.Name} Hack" ; $"{defaultShield.Name} Shield" ] let rewards = [ $"{defaultHack.Name} Hack" ; $"{defaultShield.Name} Shield" ]
let embed = Embeds.getAchievementEmbed rewards "You completed the Training Dojo and collected loot." trainerAchievement let embed = Embeds.getAchievementEmbed rewards "You completed the Training Dojo and collected loot." trainerAchievement

View File

@ -13,6 +13,7 @@ type User = {
DiscordId : uint64 DiscordId : uint64
Bank : int<GBT> Bank : int<GBT>
Strength : int Strength : int
Inventory : int array
} }
let mongo = MongoClient(Environment.GetEnvironmentVariable("CONN_STRING")) let mongo = MongoClient(Environment.GetEnvironmentVariable("CONN_STRING"))
@ -29,24 +30,24 @@ let mapBack user (bson : BsonDocument) : PlayerData =
{ DiscordId = user.DiscordId { DiscordId = user.DiscordId
Name = user.Name Name = user.Name
Inventory = Inventory =
tryWithDefault bson "Inventory" [||] (fun v -> user.Inventory
v.AsBsonArray |> Array.map (fun iId ->
|> Seq.map (fun (bv : BsonValue) -> BsonSerializer.Deserialize<Item>(bv.ToBsonDocument())) Armory.battleItems
|> Seq.toArray) |> Array.tryFind (fun i -> i.Id = iId)
|> function
| Some i -> [| i |]
| None -> [||])
|> Array.concat
Events = tryWithDefault bson "Events" [||] (fun v -> Events = tryWithDefault bson "Events" [||] (fun v ->
v.AsBsonArray v.AsBsonArray
|> Seq.map (fun (bv : BsonValue) -> |> Seq.map (fun (bv : BsonValue) ->
BsonSerializer.Deserialize<PlayerEvent>(bv.ToBsonDocument())) BsonSerializer.Deserialize<PlayerEvent>(bv.ToBsonDocument()))
|> Seq.toArray) |> Seq.toArray)
Traits = Traits = { PlayerTraits.empty with Strength = user.Strength }
(let traits = // Achievements =
tryWithDefault bson "Traits" PlayerTraits.empty (fun v -> // tryWithDefault bson "Achievements" [||] (fun v ->
BsonSerializer.Deserialize<PlayerTraits>(v.ToBsonDocument())) // v.AsBsonArray |> Seq.map (fun (bv : BsonValue) -> bv.AsString) |> Seq.toArray)
{ traits with Strength = user.Strength}) // XP = tryWithDefault bson "XP" 0 (fun v -> v.AsInt32)
Achievements =
tryWithDefault bson "Achievements" [||] (fun v ->
v.AsBsonArray |> Seq.map (fun (bv : BsonValue) -> bv.AsString) |> Seq.toArray)
XP = tryWithDefault bson "XP" 0 (fun v -> v.AsInt32)
Bank = user.Bank Bank = user.Bank
} }
@ -62,9 +63,10 @@ let tryFindPlayer connStr (id : uint64) =
|> Sql.executeAsync (fun read -> |> Sql.executeAsync (fun read ->
{ {
DiscordId = read.int64 "discordId" |> uint64 DiscordId = read.int64 "discordId" |> uint64
Name = read.string "displayName"
Bank = read.int "gbt" * 1<GBT> Bank = read.int "gbt" * 1<GBT>
Strength = read.int "strength" Strength = read.int "strength"
Name = read.string "displayName" Inventory = read.intArray "inventory"
}) })
|> Async.AwaitTask |> Async.AwaitTask

View File

@ -124,8 +124,8 @@ module Types =
Inventory : Item array Inventory : Item array
Events : PlayerEvent array Events : PlayerEvent array
Traits : PlayerTraits Traits : PlayerTraits
Achievements : string array // Achievements : string array
XP : int // XP : int
Bank : int<GBT> Bank : int<GBT>
} }
with member this.basicPlayer = { Id = this.DiscordId ; Name = this.Name } with member this.basicPlayer = { Id = this.DiscordId ; Name = this.Name }
@ -135,8 +135,8 @@ module Types =
Inventory = [||] Inventory = [||]
Events = [||] Events = [||]
Traits = PlayerTraits.empty Traits = PlayerTraits.empty
Achievements = [||] // Achievements = [||]
XP = 0 // XP = 0
Bank = 0<GBT> } Bank = 0<GBT> }
module Armory = module Armory =