diff --git a/Bot/Trainer.fs b/Bot/Trainer.fs index 2502a3e..a2a4cf7 100644 --- a/Bot/Trainer.fs +++ b/Bot/Trainer.fs @@ -154,22 +154,17 @@ let handleHack (ctx : IDiscordContext) = let handleArsenal (ctx : IDiscordContext) = Game.executePlayerAction ctx (fun player -> async { let hasStockWeapons = Player.getHacks player |> Array.exists (fun item -> item.Id = defaultHack.Id) - let updatedPlayer = Player.removeExpiredActions false player - let newPlayer = + let updatedPlayer = if not hasStockWeapons then { - updatedPlayer with - Events = if not (player.Events |> Array.exists (fun act -> act.Adversary = Sensei)) - then TrainerEvents - else [||] - |> Array.append player.Events - Inventory = if not hasStockWeapons then [| defaultHack ; defaultShield |] else Array.empty - |> Array.append player.Inventory + Player.removeExpiredActions false player with + Events = TrainerEvents |> Array.append player.Events + Inventory = [| defaultHack ; defaultShield |] |> Array.append player.Inventory } else - updatedPlayer + Player.removeExpiredActions false player if not hasStockWeapons then - do! DbService.updatePlayer newPlayer - let embed = Embeds.getArsenalEmbed newPlayer + do! DbService.updatePlayer updatedPlayer + let embed = Embeds.getArsenalEmbed updatedPlayer do! ctx.FollowUp(embed) |> Async.AwaitTask if not (player.Achievements |> Array.contains trainerAchievement) then do! Async.Sleep 3000 diff --git a/DbService/DbService.fs b/DbService/DbService.fs index f4bf795..8dfdb2e 100644 --- a/DbService/DbService.fs +++ b/DbService/DbService.fs @@ -23,8 +23,7 @@ let mapBack (bson : BsonDocument) : PlayerData = Inventory = tryWithDefault bson "Inventory" [||] (fun v -> v.AsBsonArray - |> Seq.map (fun (bv : BsonValue) -> bv.AsInt32) - |> Seq.map (fun w -> Armory.battleItems |> Array.find (fun w' -> w = w'.Id)) + |> Seq.map (fun (bv : BsonValue) -> BsonSerializer.Deserialize(bv.ToBsonDocument())) |> Seq.toArray) Events = tryWithDefault bson "Events" [||] (fun v -> v.AsBsonArray @@ -47,11 +46,10 @@ let tryFindPlayer (id : uint64) = let! player = players.FindAsync(filter) |> Async.AwaitTask match player.FirstOrDefault() with | null -> return None - | p -> return p - .GetValue("Player") - .ToBsonDocument() - |> mapBack - |> Some + | p -> + let v = p.GetValue("Player") + let playerData = v.ToBsonDocument() |> mapBack + return Some playerData } let insertNewPlayer (player : PlayerData) = diff --git a/Shared/Shared.fs b/Shared/Shared.fs index fe64861..93ed5a3 100644 --- a/Shared/Shared.fs +++ b/Shared/Shared.fs @@ -69,6 +69,14 @@ module Types = Cooldown : int Attributes : ItemAttributes } + with static member empty = + { Id = -1 + Name = "None" + Price = 0 + Type = ItemType.Hack + Power = 0 + Cooldown = 0 + Attributes = ItemAttributes.empty } type HackResult = | Strong