From 555c17d308c0d17580617fe96e176d62660354a8 Mon Sep 17 00:00:00 2001 From: CWX Date: Sat, 17 Sep 2022 20:47:01 +0100 Subject: [PATCH] update for 3.2.3 and added feature for trader name --- .../plugins/Faupi-HideoutArchitect.dll | Bin .../user/mods/HideoutArchitect/config.jsonc | 0 .../user/mods/HideoutArchitect/package.json | 4 +- .../res/icon_neededforhideout_small.png | Bin .../HideoutArchitect/res/translations.json | 0 .../HideoutArchitect/src/hideoutarchitect.ts | 0 .../server/dist/package.json | 4 +- .../server/dist/types/Utils.d.ts | 0 .../types/callbacks/InsuranceCallbacks.d.ts | 5 +- .../types/callbacks/LocationCallbacks.d.ts | 1 + .../types/callbacks/ProfileCallbacks.d.ts | 38 +++- .../types/callbacks/RagfairCallbacks.d.ts | 3 + .../dist/types/callbacks/RepairCallbacks.d.ts | 14 ++ .../dist/types/callbacks/TraderCallbacks.d.ts | 2 +- .../dist/types/context/ContextVariable.d.ts | 2 +- .../dist/types/controllers/BotController.d.ts | 23 +- .../types/controllers/GameController.d.ts | 9 +- .../types/controllers/HideoutController.d.ts | 4 +- .../types/controllers/InraidController.d.ts | 35 ++- .../controllers/InventoryController.d.ts | 6 +- .../types/controllers/LocationController.d.ts | 17 +- .../types/controllers/MatchController.d.ts | 12 +- .../types/controllers/QuestController.d.ts | 33 ++- .../types/controllers/RagfairController.d.ts | 12 +- .../types/controllers/RepairController.d.ts | 18 +- .../RepeatableQuestController.d.ts | 17 +- .../types/controllers/TraderController.d.ts | 26 ++- .../server/dist/types/di/Container.d.ts | 3 + .../dist/types/generators/BotGenerator.d.ts | 54 +++-- .../generators/BotInventoryGenerator.d.ts | 25 ++- .../types/generators/BotLootGenerator.d.ts | 8 +- .../types/generators/BotWeaponGenerator.d.ts | 104 ++++----- .../types/generators/LocationGenerator.d.ts | 21 +- .../dist/types/generators/LootGenerator.d.ts | 58 +++++ .../types/generators/PMCLootGenerator.d.ts | 12 +- .../generators/RagfairAssortGenerator.d.ts | 27 ++- .../generators/RagfairOfferGenerator.d.ts | 34 ++- .../generators/ScavCaseRewardGenerator.d.ts | 7 +- .../types/generators/WeatherGenerator.d.ts | 11 +- .../weapongen/IInventoryMagGen.d.ts | 6 + .../generators/weapongen/InventoryMagGen.d.ts | 16 ++ .../BarrelInventoryMagGen.d.ts | 12 + .../ExternalInventoryMagGen.d.ts | 14 ++ .../InternalMagazineInventoryMagGen.d.ts | 10 + .../dist/types/helpers/AssortHelper.d.ts | 4 +- .../types/helpers/BotGeneratorHelper.d.ts | 180 ++++++++++++--- .../server/dist/types/helpers/BotHelper.d.ts | 31 ++- .../helpers/BotWeaponGeneratorHelper.d.ts | 78 +++++++ .../types/helpers/ExtendedProfileHelper.d.ts | 27 --- .../dist/types/helpers/HideoutHelper.d.ts | 64 +++++- .../dist/types/helpers/InRaidHelper.d.ts | 33 +-- .../dist/types/helpers/InventoryHelper.d.ts | 1 + .../server/dist/types/helpers/ItemHelper.d.ts | 44 ++-- .../dist/types/helpers/ProfileHelper.d.ts | 19 +- .../dist/types/helpers/QuestHelper.d.ts | 25 ++- .../types/helpers/RagfairOfferHelper.d.ts | 6 +- .../dist/types/helpers/RagfairSellHelper.d.ts | 10 +- .../types/helpers/RagfairServerHelper.d.ts | 7 +- .../dist/types/helpers/RepairHelper.d.ts | 15 +- .../dist/types/helpers/TradeHelper.d.ts | 6 + .../types/helpers/TraderAssortHelper.d.ts | 27 ++- .../dist/types/helpers/TraderHelper.d.ts | 17 +- .../dist/types/loaders/DelayedModLoader.d.ts | 21 -- .../dist/types/loaders/InitialModLoader.d.ts | 64 ------ .../dist/types/loaders/PreAkiModLoader.d.ts | 24 +- .../types/models/eft/common/IGlobals.d.ts | 1 + .../models/eft/common/ILocationBase.d.ts | 8 +- .../models/eft/common/MemberCategory.d.ts | 13 -- .../models/eft/common/tables/IBotBase.d.ts | 26 ++- .../eft/common/tables/ITemplateItem.d.ts | 10 +- .../models/eft/common/tables/ITrader.d.ts | 5 +- .../dist/types/models/eft/health/Effect.d.ts | 6 +- .../eft/health/IOffraidHealRequestData.d.ts | 16 +- .../models/eft/hideout/HideoutAreasEnum.d.ts | 25 --- .../types/models/eft/notifier/INotifier.d.ts | 10 +- .../models/eft/ragfair/IRagfairOffer.d.ts | 2 + .../dist/types/models/enums/AmmoTypes.d.ts | 8 +- .../dist/types/models/enums/BaseClasses.d.ts | 3 +- .../dist/types/models/enums/BotAmount.d.ts | 10 +- .../types/models/enums/BotDifficulty.d.ts | 12 +- .../dist/types/models/enums/ConfigTypes.d.ts | 1 + .../types/models/enums/ELocationName.d.ts | 1 + .../types/models/enums/MemberCategory.d.ts | 22 +- .../types/models/enums/QuestRewardType.d.ts | 12 +- .../dist/types/models/enums/RaidMode.d.ts | 6 +- .../dist/types/models/enums/WeaponTypes.d.ts | 151 +++++++++++++ .../dist/types/models/external/mod.d.ts | 5 - .../types/models/spt/bots/BotLootCache.d.ts | 18 +- .../models/spt/config/IAirdropConfig.d.ts | 14 +- .../types/models/spt/config/IBotConfig.d.ts | 98 +++----- .../models/spt/config/IBotDurability.d.ts | 47 ++++ .../models/spt/config/IHideoutConfig.d.ts | 6 +- .../types/models/spt/config/IItemConfig.d.ts | 5 + .../types/models/spt/config/IPmcConfig.d.ts | 26 +++ .../types/models/spt/config/IQuestConfig.d.ts | 6 + .../models/spt/config/IRagfairConfig.d.ts | 8 + .../models/spt/config/ITraderConfig.d.ts | 4 +- .../types/models/spt/helpers/Traders.d.ts | 10 - .../models/spt/location/AirDropLootItem.d.ts | 6 + .../spt/logging/LogBackgroundColor.d.ts | 18 +- .../models/spt/logging/LogTextColor.d.ts | 18 +- .../types/models/spt/server/ILocaleBase.d.ts | 20 +- .../types/models/spt/services/LootItem.d.ts | 6 + .../models/spt/services/LootRequest.d.ts | 11 + .../dist/types/servers/DatabaseServer.d.ts | 2 +- .../dist/types/servers/RagfairServer.d.ts | 11 +- .../services/BotEquipmentFilterService.d.ts | 6 +- .../services/BotGenerationCacheService.d.ts | 52 +++++ .../types/services/BotLootCacheService.d.ts | 11 + .../dist/types/services/FenceService.d.ts | 94 +++++++- .../dist/types/services/InsuranceService.d.ts | 17 +- .../types/services/ItemFilterService.d.ts | 24 ++ .../dist/types/services/PmcAiService.d.ts | 27 +++ .../types/services/ProfileFixerService.d.ts | 5 + .../services/ProfileSnapshotService.d.ts | 30 +++ .../types/services/RagfairOfferService.d.ts | 12 +- .../types/services/RagfairPriceService.d.ts | 14 ++ .../dist/types/services/RepairService.d.ts | 75 +++++++ .../types/services/TraderAssortService.d.ts | 5 + .../server/dist/types/utils/HashUtil.d.ts | 10 + .../server/dist/types/utils/RandomUtil.d.ts | 8 +- .../server/dist/types/utils/TimeUtil.d.ts | 13 ++ Faupi-HideoutArchitect/server/package.json | 4 +- .../server/types/Utils.d.ts | 0 .../types/callbacks/InsuranceCallbacks.d.ts | 5 +- .../types/callbacks/LocationCallbacks.d.ts | 1 + .../types/callbacks/ProfileCallbacks.d.ts | 38 +++- .../types/callbacks/RagfairCallbacks.d.ts | 3 + .../types/callbacks/RepairCallbacks.d.ts | 14 ++ .../types/callbacks/TraderCallbacks.d.ts | 2 +- .../server/types/context/ContextVariable.d.ts | 2 +- .../types/controllers/BotController.d.ts | 23 +- .../types/controllers/GameController.d.ts | 9 +- .../types/controllers/HideoutController.d.ts | 4 +- .../types/controllers/InraidController.d.ts | 35 ++- .../controllers/InventoryController.d.ts | 6 +- .../types/controllers/LocationController.d.ts | 17 +- .../types/controllers/MatchController.d.ts | 12 +- .../types/controllers/QuestController.d.ts | 33 ++- .../types/controllers/RagfairController.d.ts | 12 +- .../types/controllers/RepairController.d.ts | 18 +- .../RepeatableQuestController.d.ts | 17 +- .../types/controllers/TraderController.d.ts | 26 ++- .../server/types/di/Container.d.ts | 3 + .../server/types/generators/BotGenerator.d.ts | 54 +++-- .../generators/BotInventoryGenerator.d.ts | 25 ++- .../types/generators/BotLootGenerator.d.ts | 8 +- .../types/generators/BotWeaponGenerator.d.ts | 104 ++++----- .../types/generators/LocationGenerator.d.ts | 21 +- .../types/generators/LootGenerator.d.ts | 58 +++++ .../types/generators/PMCLootGenerator.d.ts | 12 +- .../generators/RagfairAssortGenerator.d.ts | 27 ++- .../generators/RagfairOfferGenerator.d.ts | 34 ++- .../generators/ScavCaseRewardGenerator.d.ts | 7 +- .../types/generators/WeatherGenerator.d.ts | 11 +- .../weapongen/IInventoryMagGen.d.ts | 6 + .../generators/weapongen/InventoryMagGen.d.ts | 16 ++ .../BarrelInventoryMagGen.d.ts | 12 + .../ExternalInventoryMagGen.d.ts | 14 ++ .../InternalMagazineInventoryMagGen.d.ts | 10 + .../server/types/helpers/AssortHelper.d.ts | 4 +- .../types/helpers/BotGeneratorHelper.d.ts | 180 ++++++++++++--- .../server/types/helpers/BotHelper.d.ts | 31 ++- .../helpers/BotWeaponGeneratorHelper.d.ts | 78 +++++++ .../types/helpers/ExtendedProfileHelper.d.ts | 27 --- .../server/types/helpers/HideoutHelper.d.ts | 64 +++++- .../server/types/helpers/InRaidHelper.d.ts | 33 +-- .../server/types/helpers/InventoryHelper.d.ts | 1 + .../server/types/helpers/ItemHelper.d.ts | 44 ++-- .../server/types/helpers/ProfileHelper.d.ts | 19 +- .../server/types/helpers/QuestHelper.d.ts | 25 ++- .../types/helpers/RagfairOfferHelper.d.ts | 6 +- .../types/helpers/RagfairSellHelper.d.ts | 10 +- .../types/helpers/RagfairServerHelper.d.ts | 7 +- .../server/types/helpers/RepairHelper.d.ts | 15 +- .../server/types/helpers/TradeHelper.d.ts | 6 + .../types/helpers/TraderAssortHelper.d.ts | 27 ++- .../server/types/helpers/TraderHelper.d.ts | 17 +- .../types/loaders/DelayedModLoader.d.ts | 21 -- .../types/loaders/InitialModLoader.d.ts | 64 ------ .../server/types/loaders/PreAkiModLoader.d.ts | 24 +- .../types/models/eft/common/IGlobals.d.ts | 1 + .../models/eft/common/ILocationBase.d.ts | 8 +- .../models/eft/common/MemberCategory.d.ts | 13 -- .../models/eft/common/tables/IBotBase.d.ts | 26 ++- .../eft/common/tables/ITemplateItem.d.ts | 10 +- .../models/eft/common/tables/ITrader.d.ts | 5 +- .../types/models/eft/health/Effect.d.ts | 6 +- .../eft/health/IOffraidHealRequestData.d.ts | 16 +- .../models/eft/hideout/HideoutAreasEnum.d.ts | 25 --- .../types/models/eft/notifier/INotifier.d.ts | 10 +- .../models/eft/ragfair/IRagfairOffer.d.ts | 2 + .../server/types/models/enums/AmmoTypes.d.ts | 8 +- .../types/models/enums/BaseClasses.d.ts | 3 +- .../server/types/models/enums/BotAmount.d.ts | 10 +- .../types/models/enums/BotDifficulty.d.ts | 12 +- .../types/models/enums/ConfigTypes.d.ts | 1 + .../types/models/enums/ELocationName.d.ts | 1 + .../types/models/enums/MemberCategory.d.ts | 22 +- .../types/models/enums/QuestRewardType.d.ts | 12 +- .../server/types/models/enums/RaidMode.d.ts | 6 +- .../types/models/enums/WeaponTypes.d.ts | 151 +++++++++++++ .../server/types/models/external/mod.d.ts | 5 - .../types/models/spt/bots/BotLootCache.d.ts | 18 +- .../models/spt/config/IAirdropConfig.d.ts | 14 +- .../types/models/spt/config/IBotConfig.d.ts | 98 +++----- .../models/spt/config/IBotDurability.d.ts | 47 ++++ .../models/spt/config/IHideoutConfig.d.ts | 6 +- .../types/models/spt/config/IItemConfig.d.ts | 5 + .../types/models/spt/config/IPmcConfig.d.ts | 26 +++ .../types/models/spt/config/IQuestConfig.d.ts | 6 + .../models/spt/config/IRagfairConfig.d.ts | 8 + .../models/spt/config/ITraderConfig.d.ts | 4 +- .../types/models/spt/helpers/Traders.d.ts | 10 - .../models/spt/location/AirDropLootItem.d.ts | 6 + .../spt/logging/LogBackgroundColor.d.ts | 18 +- .../models/spt/logging/LogTextColor.d.ts | 18 +- .../types/models/spt/server/ILocaleBase.d.ts | 20 +- .../types/models/spt/services/LootItem.d.ts | 6 + .../models/spt/services/LootRequest.d.ts | 11 + .../server/types/servers/DatabaseServer.d.ts | 2 +- .../server/types/servers/RagfairServer.d.ts | 11 +- .../services/BotEquipmentFilterService.d.ts | 6 +- .../services/BotGenerationCacheService.d.ts | 52 +++++ .../types/services/BotLootCacheService.d.ts | 11 + .../server/types/services/FenceService.d.ts | 94 +++++++- .../types/services/InsuranceService.d.ts | 17 +- .../types/services/ItemFilterService.d.ts | 24 ++ .../server/types/services/PmcAiService.d.ts | 27 +++ .../types/services/ProfileFixerService.d.ts | 5 + .../services/ProfileSnapshotService.d.ts | 30 +++ .../types/services/RagfairOfferService.d.ts | 12 +- .../types/services/RagfairPriceService.d.ts | 14 ++ .../server/types/services/RepairService.d.ts | 75 +++++++ .../types/services/TraderAssortService.d.ts | 5 + .../server/types/utils/HashUtil.d.ts | 10 + .../server/types/utils/RandomUtil.d.ts | 8 +- .../server/types/utils/TimeUtil.d.ts | 13 ++ .../bepInEx/plugins/Faupi-MunitionsExpert.dll | Bin 12800 -> 12800 bytes .../Faupi-MunitionsExpert 1.6.4}/LICENSE.txt | 0 .../Faupi-MunitionsExpert 1.6.4}/package.json | 4 +- .../res/armorDamage.png | Bin .../res/ricochet.png | Bin .../res/translations.json | 0 .../src/MunitionsExpert.ts | 2 +- .../src/config.json | 0 .../MunitionsExpert/Program.cs | 2 +- .../server/dist/package.json | 4 +- .../server/dist/src/MunitionsExpert.ts | 2 +- .../server/dist/types/Utils.d.ts | 0 .../types/callbacks/InsuranceCallbacks.d.ts | 5 +- .../types/callbacks/LocationCallbacks.d.ts | 1 + .../types/callbacks/ProfileCallbacks.d.ts | 38 +++- .../types/callbacks/RagfairCallbacks.d.ts | 3 + .../dist/types/callbacks/RepairCallbacks.d.ts | 14 ++ .../dist/types/callbacks/TraderCallbacks.d.ts | 2 +- .../dist/types/context/ContextVariable.d.ts | 2 +- .../dist/types/controllers/BotController.d.ts | 23 +- .../types/controllers/GameController.d.ts | 9 +- .../types/controllers/HideoutController.d.ts | 4 +- .../types/controllers/InraidController.d.ts | 35 ++- .../controllers/InventoryController.d.ts | 6 +- .../types/controllers/LocationController.d.ts | 17 +- .../types/controllers/MatchController.d.ts | 12 +- .../types/controllers/QuestController.d.ts | 33 ++- .../types/controllers/RagfairController.d.ts | 12 +- .../types/controllers/RepairController.d.ts | 18 +- .../RepeatableQuestController.d.ts | 17 +- .../types/controllers/TraderController.d.ts | 26 ++- .../server/dist/types/di/Container.d.ts | 3 + .../dist/types/generators/BotGenerator.d.ts | 54 +++-- .../generators/BotInventoryGenerator.d.ts | 25 ++- .../types/generators/BotLootGenerator.d.ts | 8 +- .../types/generators/BotWeaponGenerator.d.ts | 104 ++++----- .../types/generators/LocationGenerator.d.ts | 21 +- .../dist/types/generators/LootGenerator.d.ts | 58 +++++ .../types/generators/PMCLootGenerator.d.ts | 12 +- .../generators/RagfairAssortGenerator.d.ts | 27 ++- .../generators/RagfairOfferGenerator.d.ts | 34 ++- .../generators/ScavCaseRewardGenerator.d.ts | 7 +- .../types/generators/WeatherGenerator.d.ts | 11 +- .../weapongen/IInventoryMagGen.d.ts | 6 + .../generators/weapongen/InventoryMagGen.d.ts | 16 ++ .../BarrelInventoryMagGen.d.ts | 12 + .../ExternalInventoryMagGen.d.ts | 14 ++ .../InternalMagazineInventoryMagGen.d.ts | 10 + .../dist/types/helpers/AssortHelper.d.ts | 4 +- .../types/helpers/BotGeneratorHelper.d.ts | 180 ++++++++++++--- .../server/dist/types/helpers/BotHelper.d.ts | 31 ++- .../helpers/BotWeaponGeneratorHelper.d.ts | 78 +++++++ .../types/helpers/ExtendedProfileHelper.d.ts | 27 --- .../dist/types/helpers/HideoutHelper.d.ts | 64 +++++- .../dist/types/helpers/InRaidHelper.d.ts | 33 +-- .../dist/types/helpers/InventoryHelper.d.ts | 1 + .../server/dist/types/helpers/ItemHelper.d.ts | 44 ++-- .../dist/types/helpers/ProfileHelper.d.ts | 19 +- .../dist/types/helpers/QuestHelper.d.ts | 25 ++- .../types/helpers/RagfairOfferHelper.d.ts | 6 +- .../dist/types/helpers/RagfairSellHelper.d.ts | 10 +- .../types/helpers/RagfairServerHelper.d.ts | 7 +- .../dist/types/helpers/RepairHelper.d.ts | 15 +- .../dist/types/helpers/TradeHelper.d.ts | 6 + .../types/helpers/TraderAssortHelper.d.ts | 27 ++- .../dist/types/helpers/TraderHelper.d.ts | 17 +- .../dist/types/loaders/DelayedModLoader.d.ts | 21 -- .../dist/types/loaders/InitialModLoader.d.ts | 64 ------ .../dist/types/loaders/PreAkiModLoader.d.ts | 24 +- .../types/models/eft/common/IGlobals.d.ts | 1 + .../models/eft/common/ILocationBase.d.ts | 8 +- .../models/eft/common/MemberCategory.d.ts | 13 -- .../models/eft/common/tables/IBotBase.d.ts | 26 ++- .../eft/common/tables/ITemplateItem.d.ts | 10 +- .../models/eft/common/tables/ITrader.d.ts | 5 +- .../dist/types/models/eft/health/Effect.d.ts | 6 +- .../eft/health/IOffraidHealRequestData.d.ts | 16 +- .../models/eft/hideout/HideoutAreasEnum.d.ts | 25 --- .../types/models/eft/notifier/INotifier.d.ts | 10 +- .../models/eft/ragfair/IRagfairOffer.d.ts | 2 + .../dist/types/models/enums/AmmoTypes.d.ts | 8 +- .../dist/types/models/enums/BaseClasses.d.ts | 3 +- .../dist/types/models/enums/BotAmount.d.ts | 10 +- .../types/models/enums/BotDifficulty.d.ts | 12 +- .../dist/types/models/enums/ConfigTypes.d.ts | 1 + .../types/models/enums/ELocationName.d.ts | 1 + .../types/models/enums/MemberCategory.d.ts | 22 +- .../types/models/enums/QuestRewardType.d.ts | 12 +- .../dist/types/models/enums/RaidMode.d.ts | 6 +- .../dist/types/models/enums/WeaponTypes.d.ts | 151 +++++++++++++ .../dist/types/models/external/mod.d.ts | 5 - .../types/models/spt/bots/BotLootCache.d.ts | 18 +- .../models/spt/config/IAirdropConfig.d.ts | 14 +- .../types/models/spt/config/IBotConfig.d.ts | 98 +++----- .../models/spt/config/IBotDurability.d.ts | 47 ++++ .../models/spt/config/IHideoutConfig.d.ts | 6 +- .../types/models/spt/config/IItemConfig.d.ts | 5 + .../types/models/spt/config/IPmcConfig.d.ts | 26 +++ .../types/models/spt/config/IQuestConfig.d.ts | 6 + .../models/spt/config/IRagfairConfig.d.ts | 8 + .../models/spt/config/ITraderConfig.d.ts | 4 +- .../types/models/spt/helpers/Traders.d.ts | 10 - .../models/spt/location/AirDropLootItem.d.ts | 6 + .../spt/logging/LogBackgroundColor.d.ts | 18 +- .../models/spt/logging/LogTextColor.d.ts | 18 +- .../types/models/spt/server/ILocaleBase.d.ts | 20 +- .../types/models/spt/services/LootItem.d.ts | 6 + .../models/spt/services/LootRequest.d.ts | 11 + .../dist/types/servers/DatabaseServer.d.ts | 2 +- .../dist/types/servers/RagfairServer.d.ts | 11 +- .../services/BotEquipmentFilterService.d.ts | 6 +- .../services/BotGenerationCacheService.d.ts | 52 +++++ .../types/services/BotLootCacheService.d.ts | 11 + .../dist/types/services/FenceService.d.ts | 94 +++++++- .../dist/types/services/InsuranceService.d.ts | 17 +- .../types/services/ItemFilterService.d.ts | 24 ++ .../dist/types/services/PmcAiService.d.ts | 27 +++ .../types/services/ProfileFixerService.d.ts | 5 + .../services/ProfileSnapshotService.d.ts | 30 +++ .../types/services/RagfairOfferService.d.ts | 12 +- .../types/services/RagfairPriceService.d.ts | 14 ++ .../dist/types/services/RepairService.d.ts | 75 +++++++ .../types/services/TraderAssortService.d.ts | 5 + .../server/dist/types/utils/HashUtil.d.ts | 10 + .../server/dist/types/utils/RandomUtil.d.ts | 8 +- .../server/dist/types/utils/TimeUtil.d.ts | 13 ++ Faupi-MunitionsExpert/server/package.json | 4 +- .../server/src/MunitionsExpert.ts | 2 +- Faupi-MunitionsExpert/server/types/Utils.d.ts | 0 .../types/callbacks/InsuranceCallbacks.d.ts | 5 +- .../types/callbacks/LocationCallbacks.d.ts | 1 + .../types/callbacks/ProfileCallbacks.d.ts | 38 +++- .../types/callbacks/RagfairCallbacks.d.ts | 3 + .../types/callbacks/RepairCallbacks.d.ts | 14 ++ .../types/callbacks/TraderCallbacks.d.ts | 2 +- .../server/types/context/ContextVariable.d.ts | 2 +- .../types/controllers/BotController.d.ts | 23 +- .../types/controllers/GameController.d.ts | 9 +- .../types/controllers/HideoutController.d.ts | 4 +- .../types/controllers/InraidController.d.ts | 35 ++- .../controllers/InventoryController.d.ts | 6 +- .../types/controllers/LocationController.d.ts | 17 +- .../types/controllers/MatchController.d.ts | 12 +- .../types/controllers/QuestController.d.ts | 33 ++- .../types/controllers/RagfairController.d.ts | 12 +- .../types/controllers/RepairController.d.ts | 18 +- .../RepeatableQuestController.d.ts | 17 +- .../types/controllers/TraderController.d.ts | 26 ++- .../server/types/di/Container.d.ts | 3 + .../server/types/generators/BotGenerator.d.ts | 54 +++-- .../generators/BotInventoryGenerator.d.ts | 25 ++- .../types/generators/BotLootGenerator.d.ts | 8 +- .../types/generators/BotWeaponGenerator.d.ts | 104 ++++----- .../types/generators/LocationGenerator.d.ts | 21 +- .../types/generators/LootGenerator.d.ts | 58 +++++ .../types/generators/PMCLootGenerator.d.ts | 12 +- .../generators/RagfairAssortGenerator.d.ts | 27 ++- .../generators/RagfairOfferGenerator.d.ts | 34 ++- .../generators/ScavCaseRewardGenerator.d.ts | 7 +- .../types/generators/WeatherGenerator.d.ts | 11 +- .../weapongen/IInventoryMagGen.d.ts | 6 + .../generators/weapongen/InventoryMagGen.d.ts | 16 ++ .../BarrelInventoryMagGen.d.ts | 12 + .../ExternalInventoryMagGen.d.ts | 14 ++ .../InternalMagazineInventoryMagGen.d.ts | 10 + .../server/types/helpers/AssortHelper.d.ts | 4 +- .../types/helpers/BotGeneratorHelper.d.ts | 180 ++++++++++++--- .../server/types/helpers/BotHelper.d.ts | 31 ++- .../helpers/BotWeaponGeneratorHelper.d.ts | 78 +++++++ .../types/helpers/ExtendedProfileHelper.d.ts | 27 --- .../server/types/helpers/HideoutHelper.d.ts | 64 +++++- .../server/types/helpers/InRaidHelper.d.ts | 33 +-- .../server/types/helpers/InventoryHelper.d.ts | 1 + .../server/types/helpers/ItemHelper.d.ts | 44 ++-- .../server/types/helpers/ProfileHelper.d.ts | 19 +- .../server/types/helpers/QuestHelper.d.ts | 25 ++- .../types/helpers/RagfairOfferHelper.d.ts | 6 +- .../types/helpers/RagfairSellHelper.d.ts | 10 +- .../types/helpers/RagfairServerHelper.d.ts | 7 +- .../server/types/helpers/RepairHelper.d.ts | 15 +- .../server/types/helpers/TradeHelper.d.ts | 6 + .../types/helpers/TraderAssortHelper.d.ts | 27 ++- .../server/types/helpers/TraderHelper.d.ts | 17 +- .../types/loaders/DelayedModLoader.d.ts | 21 -- .../types/loaders/InitialModLoader.d.ts | 64 ------ .../server/types/loaders/PreAkiModLoader.d.ts | 24 +- .../types/models/eft/common/IGlobals.d.ts | 1 + .../models/eft/common/ILocationBase.d.ts | 8 +- .../models/eft/common/MemberCategory.d.ts | 13 -- .../models/eft/common/tables/IBotBase.d.ts | 26 ++- .../eft/common/tables/ITemplateItem.d.ts | 10 +- .../models/eft/common/tables/ITrader.d.ts | 5 +- .../types/models/eft/health/Effect.d.ts | 6 +- .../eft/health/IOffraidHealRequestData.d.ts | 16 +- .../models/eft/hideout/HideoutAreasEnum.d.ts | 25 --- .../types/models/eft/notifier/INotifier.d.ts | 10 +- .../models/eft/ragfair/IRagfairOffer.d.ts | 2 + .../server/types/models/enums/AmmoTypes.d.ts | 8 +- .../types/models/enums/BaseClasses.d.ts | 3 +- .../server/types/models/enums/BotAmount.d.ts | 10 +- .../types/models/enums/BotDifficulty.d.ts | 12 +- .../types/models/enums/ConfigTypes.d.ts | 1 + .../types/models/enums/ELocationName.d.ts | 1 + .../types/models/enums/MemberCategory.d.ts | 22 +- .../types/models/enums/QuestRewardType.d.ts | 12 +- .../server/types/models/enums/RaidMode.d.ts | 6 +- .../types/models/enums/WeaponTypes.d.ts | 151 +++++++++++++ .../server/types/models/external/mod.d.ts | 5 - .../types/models/spt/bots/BotLootCache.d.ts | 18 +- .../models/spt/config/IAirdropConfig.d.ts | 14 +- .../types/models/spt/config/IBotConfig.d.ts | 98 +++----- .../models/spt/config/IBotDurability.d.ts | 47 ++++ .../models/spt/config/IHideoutConfig.d.ts | 6 +- .../types/models/spt/config/IItemConfig.d.ts | 5 + .../types/models/spt/config/IPmcConfig.d.ts | 26 +++ .../types/models/spt/config/IQuestConfig.d.ts | 6 + .../models/spt/config/IRagfairConfig.d.ts | 8 + .../models/spt/config/ITraderConfig.d.ts | 4 +- .../types/models/spt/helpers/Traders.d.ts | 10 - .../models/spt/location/AirDropLootItem.d.ts | 6 + .../spt/logging/LogBackgroundColor.d.ts | 18 +- .../models/spt/logging/LogTextColor.d.ts | 18 +- .../types/models/spt/server/ILocaleBase.d.ts | 20 +- .../types/models/spt/services/LootItem.d.ts | 6 + .../models/spt/services/LootRequest.d.ts | 11 + .../server/types/servers/DatabaseServer.d.ts | 2 +- .../server/types/servers/RagfairServer.d.ts | 11 +- .../services/BotEquipmentFilterService.d.ts | 6 +- .../services/BotGenerationCacheService.d.ts | 52 +++++ .../types/services/BotLootCacheService.d.ts | 11 + .../server/types/services/FenceService.d.ts | 94 +++++++- .../types/services/InsuranceService.d.ts | 17 +- .../types/services/ItemFilterService.d.ts | 24 ++ .../server/types/services/PmcAiService.d.ts | 27 +++ .../types/services/ProfileFixerService.d.ts | 5 + .../services/ProfileSnapshotService.d.ts | 30 +++ .../types/services/RagfairOfferService.d.ts | 12 +- .../types/services/RagfairPriceService.d.ts | 14 ++ .../server/types/services/RepairService.d.ts | 75 +++++++ .../types/services/TraderAssortService.d.ts | 5 + .../server/types/utils/HashUtil.d.ts | 10 + .../server/types/utils/RandomUtil.d.ts | 8 +- .../server/types/utils/TimeUtil.d.ts | 13 ++ .../bepInEx/plugins/KcY-SeeItemValue.dll | Bin 9216 -> 0 bytes .../bepInEx/plugins/KcY-SeeItemValue.dll | Bin 0 -> 10240 bytes .../mods/KcY-SeeItemValue 1.4.4}/LICENSE.txt | 0 .../mods/KcY-SeeItemValue 1.4.4}/package.json | 4 +- .../KcY-SeeItemValue 1.4.4}/src/config.json | 0 .../mods/KcY-SeeItemValue 1.4.4}/src/mod.ts | 211 ++++++++---------- KcY-SeeItemValue/itemValue/Program.cs | 2 +- KcY-SeeItemValue/itemValue/itemValueMod.cs | 137 ++++++++---- .../itemValue/itemValueMod.csproj | 2 +- KcY-SeeItemValue/itemValue/jsonClass.cs | 1 + .../itemValue/server/dist/package.json | 4 +- .../itemValue/server/dist/src/mod.ts | 211 ++++++++---------- .../dist/types/callbacks/RepairCallbacks.d.ts | 14 ++ .../dist/types/context/ContextVariable.d.ts | 2 +- .../dist/types/controllers/BotController.d.ts | 23 +- .../types/controllers/GameController.d.ts | 8 +- .../types/controllers/MatchController.d.ts | 6 +- .../types/controllers/RepairController.d.ts | 18 +- .../dist/types/generators/BotGenerator.d.ts | 50 +++-- .../generators/BotInventoryGenerator.d.ts | 25 ++- .../types/generators/BotLootGenerator.d.ts | 4 +- .../types/generators/BotWeaponGenerator.d.ts | 49 +--- .../dist/types/generators/LootGenerator.d.ts | 7 +- .../generators/RagfairAssortGenerator.d.ts | 27 ++- .../weapongen/IInventoryMagGen.d.ts | 6 + .../generators/weapongen/InventoryMagGen.d.ts | 16 ++ .../BarrelInventoryMagGen.d.ts | 12 + .../ExternalInventoryMagGen.d.ts | 14 ++ .../InternalMagazineInventoryMagGen.d.ts | 10 + .../types/helpers/BotGeneratorHelper.d.ts | 133 +++++++---- .../server/dist/types/helpers/BotHelper.d.ts | 31 ++- .../helpers/BotWeaponGeneratorHelper.d.ts | 78 +++++++ .../server/dist/types/helpers/ItemHelper.d.ts | 7 +- .../dist/types/helpers/RepairHelper.d.ts | 15 +- .../dist/types/loaders/PreAkiModLoader.d.ts | 13 +- .../types/models/eft/common/IGlobals.d.ts | 1 + .../models/eft/common/tables/IBotBase.d.ts | 2 + .../eft/common/tables/ITemplateItem.d.ts | 8 +- .../dist/types/models/enums/BaseClasses.d.ts | 2 +- .../dist/types/models/enums/WeaponTypes.d.ts | 151 +++++++++++++ .../models/spt/config/IAirdropConfig.d.ts | 2 + .../types/models/spt/config/IBotConfig.d.ts | 3 +- .../types/models/spt/config/IPmcConfig.d.ts | 8 +- .../models/spt/config/IRagfairConfig.d.ts | 1 + .../models/spt/location/AirDropLootItem.d.ts | 6 + .../types/models/spt/services/LootItem.d.ts | 1 + .../models/spt/services/LootRequest.d.ts | 2 + .../dist/types/servers/DatabaseServer.d.ts | 2 +- .../services/BotGenerationCacheService.d.ts | 52 +++++ .../types/services/BotLootCacheService.d.ts | 11 + .../dist/types/services/FenceService.d.ts | 11 + .../dist/types/services/PmcAiService.d.ts | 27 +++ .../dist/types/services/RepairService.d.ts | 75 +++++++ .../server/dist/types/utils/RandomUtil.d.ts | 2 +- .../itemValue/server/package.json | 4 +- KcY-SeeItemValue/itemValue/server/src/mod.ts | 211 ++++++++---------- .../types/callbacks/RepairCallbacks.d.ts | 14 ++ .../server/types/context/ContextVariable.d.ts | 2 +- .../types/controllers/BotController.d.ts | 23 +- .../types/controllers/GameController.d.ts | 8 +- .../types/controllers/MatchController.d.ts | 6 +- .../types/controllers/RepairController.d.ts | 18 +- .../server/types/generators/BotGenerator.d.ts | 50 +++-- .../generators/BotInventoryGenerator.d.ts | 25 ++- .../types/generators/BotLootGenerator.d.ts | 4 +- .../types/generators/BotWeaponGenerator.d.ts | 49 +--- .../types/generators/LootGenerator.d.ts | 7 +- .../generators/RagfairAssortGenerator.d.ts | 27 ++- .../weapongen/IInventoryMagGen.d.ts | 6 + .../generators/weapongen/InventoryMagGen.d.ts | 16 ++ .../BarrelInventoryMagGen.d.ts | 12 + .../ExternalInventoryMagGen.d.ts | 14 ++ .../InternalMagazineInventoryMagGen.d.ts | 10 + .../types/helpers/BotGeneratorHelper.d.ts | 133 +++++++---- .../server/types/helpers/BotHelper.d.ts | 31 ++- .../helpers/BotWeaponGeneratorHelper.d.ts | 78 +++++++ .../server/types/helpers/ItemHelper.d.ts | 7 +- .../server/types/helpers/RepairHelper.d.ts | 15 +- .../server/types/loaders/PreAkiModLoader.d.ts | 13 +- .../types/models/eft/common/IGlobals.d.ts | 1 + .../models/eft/common/tables/IBotBase.d.ts | 2 + .../eft/common/tables/ITemplateItem.d.ts | 8 +- .../types/models/enums/BaseClasses.d.ts | 2 +- .../types/models/enums/WeaponTypes.d.ts | 151 +++++++++++++ .../models/spt/config/IAirdropConfig.d.ts | 2 + .../types/models/spt/config/IBotConfig.d.ts | 3 +- .../types/models/spt/config/IPmcConfig.d.ts | 8 +- .../models/spt/config/IRagfairConfig.d.ts | 1 + .../models/spt/location/AirDropLootItem.d.ts | 6 + .../types/models/spt/services/LootItem.d.ts | 1 + .../models/spt/services/LootRequest.d.ts | 2 + .../server/types/servers/DatabaseServer.d.ts | 2 +- .../services/BotGenerationCacheService.d.ts | 52 +++++ .../types/services/BotLootCacheService.d.ts | 11 + .../server/types/services/FenceService.d.ts | 11 + .../server/types/services/PmcAiService.d.ts | 27 +++ .../server/types/services/RepairService.d.ts | 75 +++++++ .../server/types/utils/RandomUtil.d.ts | 2 +- Shared/EFT/Aki.Build.dll | Bin 0 -> 3584 bytes Shared/EFT/Aki.Common.dll | Bin 0 -> 13824 bytes Shared/EFT/Aki.Reflection.dll | Bin 0 -> 13824 bytes Shared/EFT/Assembly-CSharp.dll | Bin 9720832 -> 9720832 bytes 583 files changed, 9540 insertions(+), 3117 deletions(-) rename Faupi-HideoutArchitect/Built/{Faupi-HideoutArchitect 1.6.4 => Faupi-HideoutArchitect 1.6.5}/bepInEx/plugins/Faupi-HideoutArchitect.dll (100%) rename Faupi-HideoutArchitect/Built/{Faupi-HideoutArchitect 1.6.4 => Faupi-HideoutArchitect 1.6.5}/user/mods/HideoutArchitect/config.jsonc (100%) rename Faupi-HideoutArchitect/Built/{Faupi-HideoutArchitect 1.6.4 => Faupi-HideoutArchitect 1.6.5}/user/mods/HideoutArchitect/package.json (95%) rename Faupi-HideoutArchitect/Built/{Faupi-HideoutArchitect 1.6.4 => Faupi-HideoutArchitect 1.6.5}/user/mods/HideoutArchitect/res/icon_neededforhideout_small.png (100%) rename Faupi-HideoutArchitect/Built/{Faupi-HideoutArchitect 1.6.4 => Faupi-HideoutArchitect 1.6.5}/user/mods/HideoutArchitect/res/translations.json (100%) rename Faupi-HideoutArchitect/Built/{Faupi-HideoutArchitect 1.6.4 => Faupi-HideoutArchitect 1.6.5}/user/mods/HideoutArchitect/src/hideoutarchitect.ts (100%) delete mode 100644 Faupi-HideoutArchitect/server/dist/types/Utils.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/generators/LootGenerator.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/generators/weapongen/InventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts delete mode 100644 Faupi-HideoutArchitect/server/dist/types/helpers/ExtendedProfileHelper.d.ts delete mode 100644 Faupi-HideoutArchitect/server/dist/types/loaders/DelayedModLoader.d.ts delete mode 100644 Faupi-HideoutArchitect/server/dist/types/loaders/InitialModLoader.d.ts delete mode 100644 Faupi-HideoutArchitect/server/dist/types/models/eft/common/MemberCategory.d.ts delete mode 100644 Faupi-HideoutArchitect/server/dist/types/models/eft/hideout/HideoutAreasEnum.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/models/enums/WeaponTypes.d.ts delete mode 100644 Faupi-HideoutArchitect/server/dist/types/models/external/mod.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/models/spt/config/IBotDurability.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/models/spt/config/IItemConfig.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/models/spt/config/IPmcConfig.d.ts delete mode 100644 Faupi-HideoutArchitect/server/dist/types/models/spt/helpers/Traders.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/models/spt/location/AirDropLootItem.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/models/spt/services/LootItem.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/models/spt/services/LootRequest.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/services/BotGenerationCacheService.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/services/ItemFilterService.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/services/PmcAiService.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/services/ProfileSnapshotService.d.ts create mode 100644 Faupi-HideoutArchitect/server/dist/types/services/RepairService.d.ts delete mode 100644 Faupi-HideoutArchitect/server/types/Utils.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/generators/LootGenerator.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/generators/weapongen/IInventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/generators/weapongen/InventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/helpers/BotWeaponGeneratorHelper.d.ts delete mode 100644 Faupi-HideoutArchitect/server/types/helpers/ExtendedProfileHelper.d.ts delete mode 100644 Faupi-HideoutArchitect/server/types/loaders/DelayedModLoader.d.ts delete mode 100644 Faupi-HideoutArchitect/server/types/loaders/InitialModLoader.d.ts delete mode 100644 Faupi-HideoutArchitect/server/types/models/eft/common/MemberCategory.d.ts delete mode 100644 Faupi-HideoutArchitect/server/types/models/eft/hideout/HideoutAreasEnum.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/models/enums/WeaponTypes.d.ts delete mode 100644 Faupi-HideoutArchitect/server/types/models/external/mod.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/models/spt/config/IBotDurability.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/models/spt/config/IItemConfig.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/models/spt/config/IPmcConfig.d.ts delete mode 100644 Faupi-HideoutArchitect/server/types/models/spt/helpers/Traders.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/models/spt/location/AirDropLootItem.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/models/spt/services/LootItem.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/models/spt/services/LootRequest.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/services/BotGenerationCacheService.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/services/ItemFilterService.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/services/PmcAiService.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/services/ProfileSnapshotService.d.ts create mode 100644 Faupi-HideoutArchitect/server/types/services/RepairService.d.ts rename Faupi-MunitionsExpert/Built/{Faupi-MunitionsExpert 1.6.3 => Faupi-MunitionsExpert 1.6.4}/bepInEx/plugins/Faupi-MunitionsExpert.dll (97%) rename Faupi-MunitionsExpert/Built/{Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3 => Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4}/LICENSE.txt (100%) rename Faupi-MunitionsExpert/Built/{Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3 => Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4}/package.json (95%) rename Faupi-MunitionsExpert/Built/{Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3 => Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4}/res/armorDamage.png (100%) rename Faupi-MunitionsExpert/Built/{Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3 => Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4}/res/ricochet.png (100%) rename Faupi-MunitionsExpert/Built/{Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3 => Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4}/res/translations.json (100%) rename Faupi-MunitionsExpert/Built/{Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3 => Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4}/src/MunitionsExpert.ts (98%) rename Faupi-MunitionsExpert/Built/{Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3 => Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4}/src/config.json (100%) delete mode 100644 Faupi-MunitionsExpert/server/dist/types/Utils.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/generators/LootGenerator.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/generators/weapongen/InventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts delete mode 100644 Faupi-MunitionsExpert/server/dist/types/helpers/ExtendedProfileHelper.d.ts delete mode 100644 Faupi-MunitionsExpert/server/dist/types/loaders/DelayedModLoader.d.ts delete mode 100644 Faupi-MunitionsExpert/server/dist/types/loaders/InitialModLoader.d.ts delete mode 100644 Faupi-MunitionsExpert/server/dist/types/models/eft/common/MemberCategory.d.ts delete mode 100644 Faupi-MunitionsExpert/server/dist/types/models/eft/hideout/HideoutAreasEnum.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/models/enums/WeaponTypes.d.ts delete mode 100644 Faupi-MunitionsExpert/server/dist/types/models/external/mod.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/models/spt/config/IBotDurability.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/models/spt/config/IItemConfig.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/models/spt/config/IPmcConfig.d.ts delete mode 100644 Faupi-MunitionsExpert/server/dist/types/models/spt/helpers/Traders.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/models/spt/location/AirDropLootItem.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/models/spt/services/LootItem.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/models/spt/services/LootRequest.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/services/BotGenerationCacheService.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/services/ItemFilterService.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/services/PmcAiService.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/services/ProfileSnapshotService.d.ts create mode 100644 Faupi-MunitionsExpert/server/dist/types/services/RepairService.d.ts delete mode 100644 Faupi-MunitionsExpert/server/types/Utils.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/generators/LootGenerator.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/generators/weapongen/IInventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/generators/weapongen/InventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/helpers/BotWeaponGeneratorHelper.d.ts delete mode 100644 Faupi-MunitionsExpert/server/types/helpers/ExtendedProfileHelper.d.ts delete mode 100644 Faupi-MunitionsExpert/server/types/loaders/DelayedModLoader.d.ts delete mode 100644 Faupi-MunitionsExpert/server/types/loaders/InitialModLoader.d.ts delete mode 100644 Faupi-MunitionsExpert/server/types/models/eft/common/MemberCategory.d.ts delete mode 100644 Faupi-MunitionsExpert/server/types/models/eft/hideout/HideoutAreasEnum.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/models/enums/WeaponTypes.d.ts delete mode 100644 Faupi-MunitionsExpert/server/types/models/external/mod.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/models/spt/config/IBotDurability.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/models/spt/config/IItemConfig.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/models/spt/config/IPmcConfig.d.ts delete mode 100644 Faupi-MunitionsExpert/server/types/models/spt/helpers/Traders.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/models/spt/location/AirDropLootItem.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/models/spt/services/LootItem.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/models/spt/services/LootRequest.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/services/BotGenerationCacheService.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/services/ItemFilterService.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/services/PmcAiService.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/services/ProfileSnapshotService.d.ts create mode 100644 Faupi-MunitionsExpert/server/types/services/RepairService.d.ts delete mode 100644 KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/bepInEx/plugins/KcY-SeeItemValue.dll create mode 100644 KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/bepInEx/plugins/KcY-SeeItemValue.dll rename KcY-SeeItemValue/itemValue/Built/{KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3 => KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4}/LICENSE.txt (100%) rename KcY-SeeItemValue/itemValue/Built/{KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3 => KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4}/package.json (95%) rename KcY-SeeItemValue/itemValue/Built/{KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3 => KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4}/src/config.json (100%) rename KcY-SeeItemValue/itemValue/Built/{KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3 => KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4}/src/mod.ts (51%) create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/InventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/models/enums/WeaponTypes.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/models/spt/location/AirDropLootItem.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/services/BotGenerationCacheService.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/services/PmcAiService.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/dist/types/services/RepairService.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/generators/weapongen/IInventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/generators/weapongen/InventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/helpers/BotWeaponGeneratorHelper.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/models/enums/WeaponTypes.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/models/spt/location/AirDropLootItem.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/services/BotGenerationCacheService.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/services/PmcAiService.d.ts create mode 100644 KcY-SeeItemValue/itemValue/server/types/services/RepairService.d.ts create mode 100644 Shared/EFT/Aki.Build.dll create mode 100644 Shared/EFT/Aki.Common.dll create mode 100644 Shared/EFT/Aki.Reflection.dll diff --git a/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/bepInEx/plugins/Faupi-HideoutArchitect.dll b/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/bepInEx/plugins/Faupi-HideoutArchitect.dll similarity index 100% rename from Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/bepInEx/plugins/Faupi-HideoutArchitect.dll rename to Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/bepInEx/plugins/Faupi-HideoutArchitect.dll diff --git a/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/config.jsonc b/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/config.jsonc similarity index 100% rename from Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/config.jsonc rename to Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/config.jsonc diff --git a/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/package.json b/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/package.json similarity index 95% rename from Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/package.json rename to Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/package.json index f2d0a58..70cefcc 100644 --- a/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/package.json +++ b/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/package.json @@ -1,10 +1,10 @@ { "name": "HideoutArchitect", - "version": "1.6.4", + "version": "1.6.5", "main": "./src/hideoutarchitect.js", "license": "NCSA Open Source", "author": "Faupi", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "updated by": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/res/icon_neededforhideout_small.png b/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/res/icon_neededforhideout_small.png similarity index 100% rename from Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/res/icon_neededforhideout_small.png rename to Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/res/icon_neededforhideout_small.png diff --git a/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/res/translations.json b/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/res/translations.json similarity index 100% rename from Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/res/translations.json rename to Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/res/translations.json diff --git a/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/src/hideoutarchitect.ts b/Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/src/hideoutarchitect.ts similarity index 100% rename from Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.4/user/mods/HideoutArchitect/src/hideoutarchitect.ts rename to Faupi-HideoutArchitect/Built/Faupi-HideoutArchitect 1.6.5/user/mods/HideoutArchitect/src/hideoutarchitect.ts diff --git a/Faupi-HideoutArchitect/server/dist/package.json b/Faupi-HideoutArchitect/server/dist/package.json index befdd32..70cefcc 100644 --- a/Faupi-HideoutArchitect/server/dist/package.json +++ b/Faupi-HideoutArchitect/server/dist/package.json @@ -1,10 +1,10 @@ { "name": "HideoutArchitect", - "version": "1.6.3", + "version": "1.6.5", "main": "./src/hideoutarchitect.js", "license": "NCSA Open Source", "author": "Faupi", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "updated by": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/Faupi-HideoutArchitect/server/dist/types/Utils.d.ts b/Faupi-HideoutArchitect/server/dist/types/Utils.d.ts deleted file mode 100644 index e69de29..0000000 diff --git a/Faupi-HideoutArchitect/server/dist/types/callbacks/InsuranceCallbacks.d.ts b/Faupi-HideoutArchitect/server/dist/types/callbacks/InsuranceCallbacks.d.ts index 6819960..8835ba2 100644 --- a/Faupi-HideoutArchitect/server/dist/types/callbacks/InsuranceCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/callbacks/InsuranceCallbacks.d.ts @@ -1,5 +1,5 @@ import { InsuranceController } from "../controllers/InsuranceController"; -import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate"; +import { OnUpdate } from "../di/OnUpdate"; import { IPmcData } from "../models/eft/common/IPmcData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData"; @@ -10,14 +10,13 @@ import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { InsuranceService } from "../services/InsuranceService"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; -export declare class InsuranceCallbacks extends OnLoadOnUpdate { +export declare class InsuranceCallbacks extends OnUpdate { protected insuranceController: InsuranceController; protected insuranceService: InsuranceService; protected httpResponse: HttpResponseUtil; protected configServer: ConfigServer; protected insuranceConfig: IInsuranceConfig; constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer); - onLoad(): void; getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData; insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; onUpdate(secondsSinceLastRun: number): boolean; diff --git a/Faupi-HideoutArchitect/server/dist/types/callbacks/LocationCallbacks.d.ts b/Faupi-HideoutArchitect/server/dist/types/callbacks/LocationCallbacks.d.ts index cc69369..6e0b538 100644 --- a/Faupi-HideoutArchitect/server/dist/types/callbacks/LocationCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/callbacks/LocationCallbacks.d.ts @@ -11,4 +11,5 @@ export declare class LocationCallbacks { constructor(httpResponse: HttpResponseUtil, locationController: LocationController); getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; + getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string; } diff --git a/Faupi-HideoutArchitect/server/dist/types/callbacks/ProfileCallbacks.d.ts b/Faupi-HideoutArchitect/server/dist/types/callbacks/ProfileCallbacks.d.ts index 6a86fc0..183bb0a 100644 --- a/Faupi-HideoutArchitect/server/dist/types/callbacks/ProfileCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/callbacks/ProfileCallbacks.d.ts @@ -1,5 +1,6 @@ import { ProfileController } from "../controllers/ProfileController"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData"; @@ -12,20 +13,51 @@ import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendRespon import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { TimeUtil } from "../utils/TimeUtil"; +/** Handle profile related client events */ export declare class ProfileCallbacks { protected httpResponse: HttpResponseUtil; protected timeUtil: TimeUtil; protected profileController: ProfileController; constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController); createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; - getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Get the complete player profile (scav + pmc character) + * @param url + * @param info Empty + * @param sessionID Session id + * @returns Profile object + */ + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle the creation of a scav profile for player + * Occurs post-raid and when profile first created immediately after character details are confirmed by player + * @param url + * @param info empty + * @param sessionID Session id + * @returns Profile object + */ + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/voice/change event + * @param url + * @param info Change voice request object + * @param sessionID Session id + * @returns Client response + */ changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/profile/nickname/change event + * Client allows player to adjust their profile name + * @param url + * @param info Change nickname request object + * @param sessionID Session id + * @returns client response + */ changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; /** - * Called when creating a character, when you choose a character face/voice + * Called when creating a character when choosing a character face/voice * @param url * @param info response (empty) * @param sessionID diff --git a/Faupi-HideoutArchitect/server/dist/types/callbacks/RagfairCallbacks.d.ts b/Faupi-HideoutArchitect/server/dist/types/callbacks/RagfairCallbacks.d.ts index 3a405c9..c609f2f 100644 --- a/Faupi-HideoutArchitect/server/dist/types/callbacks/RagfairCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/callbacks/RagfairCallbacks.d.ts @@ -19,6 +19,9 @@ import { ConfigServer } from "../servers/ConfigServer"; import { RagfairServer } from "../servers/RagfairServer"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { JsonUtil } from "../utils/JsonUtil"; +/** + * Handle ragfair related callback events + */ export declare class RagfairCallbacks extends OnLoadOnUpdate { protected httpResponse: HttpResponseUtil; protected logger: ILogger; diff --git a/Faupi-HideoutArchitect/server/dist/types/callbacks/RepairCallbacks.d.ts b/Faupi-HideoutArchitect/server/dist/types/callbacks/RepairCallbacks.d.ts index 63733fa..14edeeb 100644 --- a/Faupi-HideoutArchitect/server/dist/types/callbacks/RepairCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/callbacks/RepairCallbacks.d.ts @@ -6,6 +6,20 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa export declare class RepairCallbacks { protected repairController: RepairController; constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; } diff --git a/Faupi-HideoutArchitect/server/dist/types/callbacks/TraderCallbacks.d.ts b/Faupi-HideoutArchitect/server/dist/types/callbacks/TraderCallbacks.d.ts index 128d9b2..e4fd099 100644 --- a/Faupi-HideoutArchitect/server/dist/types/callbacks/TraderCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/callbacks/TraderCallbacks.d.ts @@ -9,10 +9,10 @@ export declare class TraderCallbacks extends OnLoadOnUpdate { protected traderController: TraderController; constructor(httpResponse: HttpResponseUtil, traderController: TraderController); onLoad(): void; + onUpdate(): boolean; getRoute(): string; getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - onUpdate(): boolean; } diff --git a/Faupi-HideoutArchitect/server/dist/types/context/ContextVariable.d.ts b/Faupi-HideoutArchitect/server/dist/types/context/ContextVariable.d.ts index e438947..0fe0a63 100644 --- a/Faupi-HideoutArchitect/server/dist/types/context/ContextVariable.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/context/ContextVariable.d.ts @@ -4,7 +4,7 @@ export declare class ContextVariable { private timestamp; private type; constructor(value: any, type: ContextVariableType); - getValue(): any; + getValue(): T; getTimestamp(): Date; getType(): ContextVariableType; } diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/BotController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/BotController.d.ts index 5e6f05d..a5111d5 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/BotController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/BotController.d.ts @@ -1,3 +1,4 @@ +import { ApplicationContext } from "../context/ApplicationContext"; import { BotGenerator } from "../generators/BotGenerator"; import { BotHelper } from "../helpers/BotHelper"; import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; @@ -5,15 +6,22 @@ import { IBotBase } from "../models/eft/common/tables/IBotBase"; import { IBotCore } from "../models/eft/common/tables/IBotCore"; import { Difficulty } from "../models/eft/common/tables/IBotType"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { PmcAiService } from "../services/PmcAiService"; export declare class BotController { + protected logger: ILogger; protected databaseServer: DatabaseServer; protected botGenerator: BotGenerator; protected botHelper: BotHelper; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; protected botConfig: IBotConfig; - constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); /** * Return the number of bot loadout varieties to be generated * @param type bot Type we want the loadout gen count for @@ -29,7 +37,18 @@ export declare class BotController { * @returns Difficulty object */ getBotDifficulty(type: string, difficulty: string): Difficulty; - protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty; + protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ getBotCap(): number; } diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/GameController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/GameController.d.ts index 85ec418..2d00898 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/GameController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/GameController.d.ts @@ -7,11 +7,13 @@ import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { IHttpConfig } from "../models/spt/config/IHttpConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { LocaleService } from "../services/LocaleService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { Watermark } from "../utils/Watermark"; export declare class GameController { protected logger: ILogger; + protected databaseServer: DatabaseServer; protected watermark: Watermark; protected httpServerHelper: HttpServerHelper; protected localeService: LocaleService; @@ -20,9 +22,14 @@ export declare class GameController { protected configServer: ConfigServer; protected httpConfig: IHttpConfig; protected coreConfig: ICoreConfig; - constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; protected logProfileDetails(fullProfile: IAkiProfile): void; getGameConfig(sessionID: string): IGameConfigResponse; getServer(): any[]; + getValidGameVersion(): any; } diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/HideoutController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/HideoutController.d.ts index 3eefe1a..dcd8894 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/HideoutController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/HideoutController.d.ts @@ -28,6 +28,7 @@ import { HashUtil } from "../utils/HashUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; +import { JsonUtil } from "../utils/JsonUtil"; export declare class HideoutController { protected logger: ILogger; protected hashUtil: HashUtil; @@ -45,9 +46,10 @@ export declare class HideoutController { protected hideoutHelper: HideoutHelper; protected scavCaseRewardGenerator: ScavCaseRewardGenerator; protected configServer: ConfigServer; + protected jsonUtil: JsonUtil; protected static nameBackendCountersCrafting: string; protected hideoutConfig: IHideoutConfig; - constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer, jsonUtil: JsonUtil); upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; /** diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/InraidController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/InraidController.d.ts index b899e7d..102a2fb 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/InraidController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/InraidController.d.ts @@ -5,9 +5,11 @@ import { ItemHelper } from "../helpers/ItemHelper"; import { ProfileHelper } from "../helpers/ProfileHelper"; import { QuestHelper } from "../helpers/QuestHelper"; import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; @@ -15,6 +17,7 @@ import { InsuranceService } from "../services/InsuranceService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class InraidController { + protected logger: ILogger; protected saveServer: SaveServer; protected jsonUtil: JsonUtil; protected timeUtil: TimeUtil; @@ -29,16 +32,40 @@ export declare class InraidController { protected inRaidHelper: InRaidHelper; protected configServer: ConfigServer; protected inraidConfig: IInRaidConfig; - constructor(saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer); + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer); addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void; saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Handle updating the profile post-pmc raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePmcProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Reduce body part hp to % of max + * @param pmcData profile to edit + * @param multipler multipler to apply to max health + */ + protected reducePmcHealthToPercent(pmcData: IPmcData, multipler: number): void; + /** + * Handle updating the profile post-pscav raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Is the player dead after a raid - dead is anything other than "survived" / "runner" + * @param statusOnExit exit value from offraidData object + * @returns true if dead + */ + protected isPlayerDead(statusOnExit: string): boolean; /** * Mark inventory items as FiR if player survived raid, otherwise remove FiR from them * @param offraidData Save Progress Request * @param pmcData player profile * @param isPlayerScav Was the player a pScav */ - private markOrRemoveFoundInRaidItems; - private handlePostRaidPlayerScavProcess; - private handlePostRaidPlayerScavKarmaChanges; + protected markOrRemoveFoundInRaidItems(offraidData: ISaveProgressRequestData, pmcData: IPmcData, isPlayerScav: boolean): void; + protected handlePostRaidPlayerScavProcess(scavData: IPmcData, sessionID: string, offraidData: ISaveProgressRequestData, pmcData: IPmcData, isDead: boolean): void; + protected handlePostRaidPlayerScavKarmaChanges(pmcData: IPmcData, offraidData: ISaveProgressRequestData, scavData: IPmcData, sessionID: string): void; } diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/InventoryController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/InventoryController.d.ts index f57f731..f564919 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/InventoryController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/InventoryController.d.ts @@ -92,7 +92,11 @@ export declare class InventoryController { */ toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse; /** - * Handles Tagging of items (primary Containers). + * Add a tag to an inventory item + * @param pmcData profile with item to add tag to + * @param body tag request data + * @param sessionID session id + * @returns client response object */ tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/LocationController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/LocationController.d.ts index 90b6d7a..9db3205 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/LocationController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/LocationController.d.ts @@ -1,18 +1,33 @@ import { LocationGenerator } from "../generators/LocationGenerator"; +import { LootGenerator } from "../generators/LootGenerator"; import { ILocationBase } from "../models/eft/common/ILocationBase"; import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { LootItem } from "../models/spt/services/LootItem"; import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class LocationController { protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; protected logger: ILogger; protected locationGenerator: LocationGenerator; + protected lootGenerator: LootGenerator; protected databaseServer: DatabaseServer; protected timeUtil: TimeUtil; - constructor(jsonUtil: JsonUtil, logger: ILogger, locationGenerator: LocationGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil); + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger, locationGenerator: LocationGenerator, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer); get(location: string): ILocationBase; generate(name: string): ILocationBase; generateAll(): ILocationsGenerateAllResponse; + /** + * Get loot for an airdop container + * Generates it randomly based on config/airdrop.json values + * @returns Array of LootItem + */ + getAirdropLoot(): LootItem[]; } diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/MatchController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/MatchController.d.ts index 71cb7d3..07f6a89 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/MatchController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/MatchController.d.ts @@ -9,23 +9,33 @@ import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestDa import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; import { IMatchConfig } from "../models/spt/config/IMatchConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; import { BotLootCacheService } from "../services/BotLootCacheService"; import { MatchLocationService } from "../services/MatchLocationService"; +import { PmcAiService } from "../services/PmcAiService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; export declare class MatchController { + protected logger: ILogger; protected saveServer: SaveServer; protected profileHelper: ProfileHelper; protected matchLocationService: MatchLocationService; protected traderHelper: TraderHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; + protected profileSnapshotService: ProfileSnapshotService; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected applicationContext: ApplicationContext; protected matchConfig: IMatchConfig; protected inraidConfig: IInRaidConfig; - constructor(saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); + protected botConfig: IBotConfig; + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); getEnabled(): boolean; getProfile(info: IGetProfileRequestData): IPmcData[]; createGroup(sessionID: string, info: ICreateGroupRequestData): any; diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/QuestController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/QuestController.d.ts index 2cbccfb..282f50e 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/QuestController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/QuestController.d.ts @@ -39,16 +39,31 @@ export declare class QuestController { * @returns array of IQuest */ getClientQuests(sessionID: string): IQuest[]; + /** + * Is the quest for the opposite side the player is on + * @param side player side (usec/bear) + * @param questId questId to check + */ + protected questIsForOtherSide(side: string, questId: string): boolean; + /** + * Handle the client accepting a quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update + * @param acceptedQuest Quest accepted + * @param sessionID Session id + * @returns client response + */ acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; /** - * Remove completed quest from profile + * Update completed quest in profile * Add newly unlocked quests to profile * Also recalculate thier level due to exp rewards * @param pmcData Player profile - * @param body completed quest request - * @param sessionID session id - * @returns ItemEvent response + * @param body Completed quest request + * @param sessionID Session id + * @returns ItemEvent client response */ completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; /** @@ -67,10 +82,20 @@ export declare class QuestController { protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]; /** * Fail the quests provided + * Update quest in profile, otherwise add fresh quest object with failed status * @param sessionID session id * @param pmcData player profile * @param questsToFail quests to fail */ protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void; handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment a backend counter stored value by an amount, + * Create counter if it does not exist + * @param pmcData Profile to find backend counter in + * @param conditionId backend counter id to update + * @param questId quest id counter is associated with + * @param counterValue value to increment the backend counter with + */ + protected updateProfileBackendCounterValue(pmcData: IPmcData, conditionId: string, questId: string, counterValue: number): void; } diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/RagfairController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/RagfairController.d.ts index c4ffc15..06af740 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/RagfairController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/RagfairController.d.ts @@ -9,6 +9,7 @@ import { RagfairOfferHelper } from "../helpers/RagfairOfferHelper"; import { RagfairSellHelper } from "../helpers/RagfairSellHelper"; import { RagfairSortHelper } from "../helpers/RagfairSortHelper"; import { RagfairTaxHelper } from "../helpers/RagfairTaxHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; import { IPmcData } from "../models/eft/common/IPmcData"; import { Item } from "../models/eft/common/tables/IItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; @@ -33,6 +34,9 @@ import { RagfairPriceService } from "../services/RagfairPriceService"; import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { TimeUtil } from "../utils/TimeUtil"; +/** + * Handle RagfairCallback events + */ export declare class RagfairController { protected logger: ILogger; protected timeUtil: TimeUtil; @@ -52,14 +56,20 @@ export declare class RagfairController { protected handbookHelper: HandbookHelper; protected paymentHelper: PaymentHelper; protected inventoryHelper: InventoryHelper; + protected traderHelper: TraderHelper; protected ragfairHelper: RagfairHelper; protected ragfairOfferService: RagfairOfferService; protected ragfairRequiredItemsService: RagfairRequiredItemsService; protected ragfairOfferGenerator: RagfairOfferGenerator; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; - constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer); + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer); getOffers(sessionID: string, info: ISearchRequestData): IGetOffersResult; + /** + * Update a trader flea offer with buy restrictions stored in the traders assort + * @param offer flea offer to update + */ + protected setTraderOfferPurchaseLimits(offer: IRagfairOffer): void; protected isLinkedSearch(info: ISearchRequestData): boolean; protected isRequiredSearch(info: ISearchRequestData): boolean; update(): void; diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/RepairController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/RepairController.d.ts index 0e78ef6..ae54a53 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/RepairController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/RepairController.d.ts @@ -8,9 +8,9 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa import { IRepairConfig } from "../models/spt/config/IRepairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; -import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; export declare class RepairController { protected logger: ILogger; protected itemEventRouter: ItemEventRouter; @@ -19,23 +19,23 @@ export declare class RepairController { protected traderHelper: TraderHelper; protected paymentService: PaymentService; protected repairHelper: RepairHelper; - protected configServer: ConfigServer; + protected repairService: RepairService; protected repairConfig: IRepairConfig; - constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); /** * Repair with trader - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; /** * Repair with repair kit - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; } diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/RepeatableQuestController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/RepeatableQuestController.d.ts index 98d05dd..4c31a3d 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/RepeatableQuestController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/RepeatableQuestController.d.ts @@ -7,6 +7,7 @@ import { Exit } from "../models/eft/common/ILocationBase"; import { IPmcData } from "../models/eft/common/IPmcData"; import { TraderInfo } from "../models/eft/common/tables/IBotBase"; import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; import { ELocationName } from "../models/enums/ELocationName"; @@ -15,6 +16,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { PaymentService } from "../services/PaymentService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; @@ -64,9 +66,10 @@ export declare class RepeatableQuestController { protected itemEventRouter: ItemEventRouter; protected paymentService: PaymentService; protected objectId: ObjectId; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected questConfig: IQuestConfig; - constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, configServer: ConfigServer); + constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint * Returns an array of objects in the format of repeatable quests to the client. @@ -217,4 +220,16 @@ export declare class RepeatableQuestController { debugLogRepeatableQuestIds(pmcData: IPmcData): void; probabilityObjectArray(configArrayInput: ProbabilityObject[]): ProbabilityObjectArray; changeRepeatableQuest(pmcDataIn: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + /** + * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) + * @returns a list of rewardable items [[_tpl, itemTemplate],...] + */ + protected getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig): [string, ITemplateItem][]; + /** + * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward + * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. + * @param {*} tpl template id of item to check + * @returns boolean: true if item is valid reward + */ + isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean; } diff --git a/Faupi-HideoutArchitect/server/dist/types/controllers/TraderController.d.ts b/Faupi-HideoutArchitect/server/dist/types/controllers/TraderController.d.ts index 7bab158..b79f55e 100644 --- a/Faupi-HideoutArchitect/server/dist/types/controllers/TraderController.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/controllers/TraderController.d.ts @@ -4,6 +4,7 @@ import { TraderHelper } from "../helpers/TraderHelper"; import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; @@ -15,12 +16,29 @@ export declare class TraderController { protected traderHelper: TraderHelper; protected timeUtil: TimeUtil; protected traderAssortService: TraderAssortService; + protected fenceService: FenceService; protected jsonUtil: JsonUtil; - constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, jsonUtil: JsonUtil); + constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, fenceService: FenceService, jsonUtil: JsonUtil); + /** + * Runs when onLoad event is fired + * Iterate over traders, ensure an unmolested copy of their assorts is stored in traderAssortService + * Store timestamp of next assort refresh in nextResupply property of traders .base object + */ load(): void; - getTrader(traderID: string, sessionID: string): ITraderBase; + /** + * Runs when onUpdate is fired + * If current time is > nextResupply(expire) time of trader, refresh traders assorts and + * Fence is handled slightly differently + * @returns has run + */ + update(): boolean; + /** + * Return an array of all traders + * @param sessionID Session id + * @returns array if ITraderBase objects + */ getAllTraders(sessionID: string): ITraderBase[]; - updateTraders(): boolean; + getTrader(sessionID: string, traderID: string): ITraderBase; getAssort(sessionId: string, traderId: string): ITraderAssort; - getPurchasesData(traderID: string, sessionID: string): Record; + getPurchasesData(sessionID: string, traderID: string): Record; } diff --git a/Faupi-HideoutArchitect/server/dist/types/di/Container.d.ts b/Faupi-HideoutArchitect/server/dist/types/di/Container.d.ts index 17791b0..98d1fa1 100644 --- a/Faupi-HideoutArchitect/server/dist/types/di/Container.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/di/Container.d.ts @@ -1,4 +1,7 @@ import { DependencyContainer } from "tsyringe"; +/** + * Handle the registration of classes to be used by the Dependency Injection code + */ export declare class Container { static registerTypes(depContainer: DependencyContainer): void; static registerListTypes(depContainer: DependencyContainer): void; diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/BotGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/BotGenerator.d.ts index a5fc0ad..2ac51db 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/BotGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/BotGenerator.d.ts @@ -9,6 +9,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { PmcAiService } from "../services/PmcAiService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; @@ -30,9 +31,10 @@ export declare class BotGenerator { protected botEquipmentFilterService: BotEquipmentFilterService; protected botHelper: BotHelper; protected gameEventHelper: GameEventHelper; + protected pmcAiService: PmcAiService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, pmcAiService: PmcAiService, configServer: ConfigServer); /** * Generate a player scav bot object * @param role e.g. assault / pmcbot @@ -40,14 +42,14 @@ export declare class BotGenerator { * @param botTemplate base bot template to use (e.g. assault/pmcbot) * @returns */ - generatePlayerScav(role: string, difficulty: string, botTemplate: IBotType): IBotBase; - generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; /** - * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check - * @param botRole the bot role to check if should be a pmc - * @returns true if should be a pmc + * Generate an array of bot objects for populate a raid with + * @param sessionId session id + * @param info request object + * @returns bot array */ - protected shouldBotBePmc(botRole: string): boolean; + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; /** * Get a randomised PMC side based on bot config value 'isUsec' * @returns pmc side as string @@ -58,12 +60,30 @@ export declare class BotGenerator { * @returns IBotBase object */ protected getCloneOfBotBase(): IBotBase; - protected generateBot(bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param role botRole bot will use + * @param node Bot template from db/bots/x.json + * @param isPmc Is bot to be a PMC + * @param isPlayerScav is bot to be a p scav bot + * @returns IBotBase object + */ + protected generateBot(sessionId: string, bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; /** * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client */ protected logPmcGeneratedCount(output: IBotBase[]): void; - protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult; + /** + * Return a randomised bot level and exp value + * @param role botRole being generated for + * @param min Min exp value + * @param max Max exp value + * @returns IRandomisedBotLevelResult object + */ + protected generateRandomLevel(role: string, min: number, max: number): BotGenerator.IRandomisedBotLevelResult; /** * Converts health object to the required format * @param healthObj health object from bot json @@ -72,19 +92,23 @@ export declare class BotGenerator { */ protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; protected generateSkills(skillsObj: Skills): Skills; - /** - * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) - * @param pmcSide eft side (usec/bear) - * @returns pmc side as defined in config - */ - protected getPmcRole(pmcSide: string): string; /** * Iterate through bots inventory and loot to find and remove christmas items (as defined in GameEventHelper) * @param nodeInventory Bots inventory to iterate over */ protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ protected generateId(bot: IBotBase): IBotBase; protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ protected getPMCDifficulty(requestedDifficulty: string): string; /** * Add a side-specific (usec/bear) dogtag item to a bots inventory diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/BotInventoryGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/BotInventoryGenerator.d.ts index 35d1ee8..c5ed545 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/BotInventoryGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/BotInventoryGenerator.d.ts @@ -1,13 +1,16 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; -import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType"; +import { Chances, Generation, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; -import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; -import { BotWeaponGenerator } from "./BotWeaponGenerator"; import { BotLootGenerator } from "./BotLootGenerator"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; export declare class BotInventoryGenerator { protected logger: ILogger; protected hashUtil: HashUtil; @@ -17,8 +20,14 @@ export declare class BotInventoryGenerator { protected botLootGenerator: BotLootGenerator; protected botGeneratorHelper: BotGeneratorHelper; protected weightedRandomHelper: WeightedRandomHelper; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper); - generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer); + generateInventory(sessionId: string, templateInventory: Inventory, equipmentChances: Chances, itemGenerationLimitsMinMax: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation): void; protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void; protected generateInventoryBase(): PmcInventory; } diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/BotLootGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/BotLootGenerator.d.ts index c6a3f29..c1f5310 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/BotLootGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/BotLootGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { HandbookHelper } from "../helpers/HandbookHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; @@ -20,11 +21,12 @@ export declare class BotLootGenerator { protected handbookHelper: HandbookHelper; protected botGeneratorHelper: BotGeneratorHelper; protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botLootCacheService: BotLootCacheService, configServer: ConfigServer); - generateLoot(templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer); + generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; protected getRandomisedCount(min: number, max: number, nValue: number): number; /** * Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit is reached @@ -47,7 +49,7 @@ export declare class BotLootGenerator { * @param botRole bots role, .e.g. pmcBot * @param isPmc are we generating for a pmc */ - protected addLooseWeaponsToInventorySlot(botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean): void; + protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean): void; /** * Get a random item from the pool parameter using the biasedRandomNumber system * @param pool pool of items to pick an item from diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/BotWeaponGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/BotWeaponGenerator.d.ts index 9215214..487901b 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/BotWeaponGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/BotWeaponGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { MinMax } from "../models/common/MinMax"; @@ -14,6 +15,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; export declare class BotWeaponGenerator { protected jsonUtil: JsonUtil; protected logger: ILogger; @@ -24,11 +26,24 @@ export declare class BotWeaponGenerator { protected botGeneratorHelper: BotGeneratorHelper; protected randomUtil: RandomUtil; protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected inventoryMagGenComponents: IInventoryMagGen[]; protected readonly modMagazineSlotId = "mod_magazine"; protected botConfig: IBotConfig; - constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer); + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, inventoryMagGenComponents: IInventoryMagGen[]); /** - * Get a random weapon from a bots pool of weapons (weighted) + * Pick a random weapon based on weightings and generate a functional weapon + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId + * @param modChances + * @param botRole role of bot, e.g. assault/followerBully + * @param isPmc Is weapon generated for a pmc + * @returns GenerateWeaponResult object + */ + generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; + /** + * Get a random weighted weapon from a bots pool of weapons * @param equipmentSlot Primary/secondary/holster * @param botTemplateInventory e.g. assault.json * @returns weapon tpl @@ -39,43 +54,24 @@ export declare class BotWeaponGenerator { * @param weaponTpl weapon tpl to generate (use pickWeightedWeaponTplFromPool()) * @param equipmentSlot slot to fit into, primary/secondary/holster * @param botTemplateInventory e.g. assault.json - * @param weaponParentId - * @param modChances - * @param botRole + * @param weaponParentId ParentId of the weapon being generated + * @param modChances Dictionary of item types and % chance weapon will have that mod + * @param botRole e.g. assault/exusec * @param isPmc * @returns GenerateWeaponResult object */ - generateWeaponByTpl(weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; + generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; /** - * Generate an entirely random weapon - * @param equipmentSlot Primary/secondary/holster - * @param botTemplateInventory e.g. assault.json - * @param weaponParentId - * @param modChances - * @param botRole - * @param isPmc - * @returns GenerateWeaponResult object - */ - generateRandomWeapon(equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; - /** - * Create array with weapon base as only element - * Add additional properties as required - * @param weaponTpl - * @param weaponParentId - * @param equipmentSlot - * @param weaponItemTemplate + * Create array with weapon base as only element and + * add additional properties based on weapon type + * @param weaponTpl Weapon tpl to create item with + * @param weaponParentId Weapons parent id + * @param equipmentSlot e.g. primary/secondary/holster + * @param weaponItemTemplate db template for weapon * @param botRole for durability values - * @returns + * @returns Base weapon item in array */ - constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; - /** - * Add compatible magazines to an inventory based on a generated weapon - * @param weaponDetails - * @param magCounts - * @param inventory - * @param botRole the bot type we're getting generating extra mags for - */ - addExtraMagazinesToInventory(weaponDetails: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; /** * Get the mods necessary to kit out a weapon to its preset level * @param weaponTpl weapon to find preset for @@ -84,33 +80,21 @@ export declare class BotWeaponGenerator { * @returns array of weapon mods */ protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[]; - /** Checks if all required slots are occupied on a weapon and all it's mods */ + /** + * Checks if all required slots are occupied on a weapon and all it's mods + * @param weaponItemArray Weapon + mods + * @returns true if valid + */ protected isWeaponValid(weaponItemArray: Item[]): boolean; /** * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. * Additionally, adds extra bullets to SecuredContainer - * @param weaponMods - * @param weaponTemplate - * @param magCounts - * @param ammoTpl - * @param inventory - * @param botRole the bot type we're getting generating extra mags for - * @returns + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for */ - protected generateExtraMagazines(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory, botRole: string): void; - /** - * Get a randomised number of bullets for a specific magazine - * @param magCounts min and max count of magazines - * @param magTemplate magazine to generate bullet count for - * @returns bullet count number - */ - protected getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; - /** - * Get a randomised count of magazines - * @param magCounts min and max value returned value can be between - * @returns numberical value of magazine count - */ - protected getRandomisedMagazineCount(magCounts: MinMax): number; + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; /** * Add ammo to the secure container * @param stackCount How many stacks of ammo to add @@ -127,21 +111,13 @@ export declare class BotWeaponGenerator { * @returns magazine tpl string */ protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; - /** - * Get a weapons default magazine template id - * @param weaponTemplate weapon to get default magazine for - * @returns tpl of magazine - */ - protected getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; - protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void; /** * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) * @param ammo a list of ammo tpls the weapon can use * @param weaponTemplate the weapon we want to pick ammo for - * @param isPmc is the ammo being gathered for a pmc (runs pmc ammo filtering) * @returns an ammo tpl that works with the desired gun */ - protected getCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem, isPmc: boolean): string; + protected getWeightedCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem): string; /** * Get a weapons compatible cartridge caliber * @param weaponTemplate Weapon to look up caliber of diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/LocationGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/LocationGenerator.d.ts index bd368b5..cc61dcf 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/LocationGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/LocationGenerator.d.ts @@ -3,10 +3,9 @@ import { GameEventHelper } from "../helpers/GameEventHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { PresetHelper } from "../helpers/PresetHelper"; import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; -import { ILooseLoot, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; +import { ILooseLoot, SpawnpointsForced, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; import { Item } from "../models/eft/common/tables/IItem"; import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase"; -import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { ILocationConfig } from "../models/spt/config/ILocationConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -36,11 +35,19 @@ export declare class LocationGenerator { generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; protected getLooseLootMultiplerForLocation(location: string): number; protected getStaticLootMultiplerForLocation(location: string): number; + /** + * Create array of loose + forced loot using probability system + * @param dynamicLootDist + * @param staticAmmoDist + * @param locationName Location to generate loot for + * @returns Array of spawn points with loot in them + */ generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; + /** + * Add forced spawn point loot into loot parameter array + * @param loot array to add forced loot to + * @param forcedSpawnPoints forced loot to add + */ + protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[]): void; protected createItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; - protected getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; - protected getRandomValidCaliber(magTemplate: ITemplateItem): string; - protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; - protected createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; - protected createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item; } diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/LootGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/LootGenerator.d.ts new file mode 100644 index 0000000..bbc1915 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/generators/LootGenerator.d.ts @@ -0,0 +1,58 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { LootItem } from "../models/spt/services/LootItem"; +import { LootRequest } from "../models/spt/services/LootRequest"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class LootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected itemFilterService: ItemFilterService; + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, itemFilterService: ItemFilterService); + /** + * Generate a list of items based on options passed in + * @param options parameters to adjust what loot is generated + * @returns An array of loot items + */ + createRandomloot(options: LootRequest): LootItem[]; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Find a random item in items.json and add to result array + * @param items items to choose from + * @param itemTypeCounts item limit counts + * @param options item filters + * @param result array to add found item to + * @returns true if item was valid and added to pool + */ + protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, options: LootRequest, result: LootItem[]): boolean; + /** + * + * Find a random item in items.json and add to result array + * @param globalDefaultPresets presets to choose from + * @param itemTypeCounts item limit counts + * @param result array to add found preset to + * @returns true if preset was valid and added to pool + */ + protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record, result: LootItem[]): boolean; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/PMCLootGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/PMCLootGenerator.d.ts index 64e6f7f..b9f2a83 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/PMCLootGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/PMCLootGenerator.d.ts @@ -1,15 +1,21 @@ import { ItemHelper } from "../helpers/ItemHelper"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { ConfigServer } from "../servers/ConfigServer"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +/** + * Handle the generation of dynamic PMC loot in pockets and backpacks + * and the removal of blacklisted items + */ export declare class PMCLootGenerator { protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected configServer: ConfigServer; + protected itemFilterService: ItemFilterService; protected pocketLootPool: string[]; protected backpackLootPool: string[]; protected botConfig: IBotConfig; - constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService); generatePMCPocketLootPool(): string[]; generatePMCBackpackLootPool(): string[]; } diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/RagfairAssortGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/RagfairAssortGenerator.d.ts index cbdd7f2..db4811d 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/RagfairAssortGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/RagfairAssortGenerator.d.ts @@ -1,5 +1,8 @@ import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -8,18 +11,40 @@ export declare class RagfairAssortGenerator { protected hashUtil: HashUtil; protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; protected generatedAssortItems: Item[]; - constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer); + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); /** * Get an array of unique items that can be sold on the flea * @returns array of unique items */ getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ protected assortsAreGenerated(): boolean; /** * Generate an array of items the flea can sell * @returns array of unique items */ protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ protected createRagfairAssortItem(tplId: string, id?: string): Item; } diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/RagfairOfferGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/RagfairOfferGenerator.d.ts index 3e7f4cc..317cd6b 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/RagfairOfferGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/RagfairOfferGenerator.d.ts @@ -41,15 +41,37 @@ export declare class RagfairOfferGenerator { createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; protected getTraderId(userID: string): string; protected getRating(userID: string): number; + /** + * Is the offers user rating growing + * @param userID user to check rating of + * @returns true if its growing + */ protected getRatingGrowing(userID: string): boolean; + /** + * Get number of section until offer should expire + * @param userID Id of the offer owner + * @param time Time the offer is posted + * @returns number of seconds until offer expires + */ protected getOfferEndTime(userID: string, time: number): number; /** * Create multiple offers for items by using a unique list of items we've generated previously - * @param expiredOffers + * @param expiredOffers optional, expired offers to regenerate */ generateDynamicOffers(expiredOffers?: Item[]): void; - generateTraderOffers(traderID: string): void; + /** + * Generate trader offers on flea using the traders assort data + * @param traderID Trader to generate offers for + */ + generateFleaOffersForTrader(traderID: string): void; protected getItemCondition(userID: string, items: Item[], itemDetails: ITemplateItem): Item[]; + /** + * Add missing conditions to an item if needed + * Durabiltiy for repairable items + * HpResource for medical items + * @param item item to add conditions to + * @returns Item with conditions added + */ protected addMissingCondition(item: Item): Item; protected getOfferRequirements(items: Item[]): { count: number; @@ -57,6 +79,14 @@ export declare class RagfairOfferGenerator { }[]; /** * Create a flea offer and store it in the Ragfair server offers array + * @param userID owner of the offer + * @param time time offer is put up + * @param items items in the offer + * @param barterScheme + * @param loyalLevel + * @param price price of offer + * @param sellInOnePiece + * @returns */ createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; } diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/ScavCaseRewardGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/ScavCaseRewardGenerator.d.ts index c7d6ab7..89cb5c8 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/ScavCaseRewardGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/ScavCaseRewardGenerator.d.ts @@ -8,9 +8,13 @@ import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "../mo import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { RagfairPriceService } from "../services/RagfairPriceService"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; +/** + * Handle the creation of randomised scav case rewards + */ export declare class ScavCaseRewardGenerator { protected logger: ILogger; protected randomUtil: RandomUtil; @@ -18,9 +22,10 @@ export declare class ScavCaseRewardGenerator { protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected ragfairPriceService: RagfairPriceService; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected scavCaseConfig: IScavCaseConfig; - constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); + constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * Create an array of rewards that will be given to the player upon completing their scav case build * @param body client request diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/WeatherGenerator.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/WeatherGenerator.d.ts index 44cecbb..8ddbe49 100644 --- a/Faupi-HideoutArchitect/server/dist/types/generators/WeatherGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/generators/WeatherGenerator.d.ts @@ -1,7 +1,7 @@ import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; -import { ConfigServer } from "../servers/ConfigServer"; import { IWeatherData } from "../models/eft/weather/IWeatherData"; import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class WeatherGenerator { @@ -21,11 +21,16 @@ export declare class WeatherGenerator { protected getAcceleratedTime(computedDate: Date): string; /** * Get current time formatted to fit BSGs requirement - * @param computedDate + * @param computedDate date to format into bsg style * @returns */ protected getNormalTime(computedDate: Date): string; - generateWeather(data: IWeatherData): IWeatherData; + /** + * Return randomised Weather data + * @param weatherData weather input data + * @returns Randomised weather data + */ + generateWeather(weatherData: IWeatherData): IWeatherData; protected getWeightedFog(): string; protected getWeightedRain(): number; protected getRandomFloat(node: string): number; diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/InventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..4fcb1e2 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,14 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/AssortHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/AssortHelper.d.ts index 15586b9..bfc157f 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/AssortHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/AssortHelper.d.ts @@ -17,7 +17,7 @@ export declare class AssortHelper { * @param assort assort items from a trader * @returns assort items minus locked quest assorts */ - stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort; + stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, flea?: boolean): ITraderAssort; /** * Remove assorts from a trader that have not been unlocked yet * @param pmcProfile player profile @@ -32,5 +32,5 @@ export declare class AssortHelper { * @param itemID item id to remove from asort * @returns Modified assort */ - removeItemFromAssort(assort: ITraderAssort, itemID: string): ITraderAssort; + removeItemFromAssort(assort: ITraderAssort, itemID: string, flea?: boolean): ITraderAssort; } diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/BotGeneratorHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/BotGeneratorHelper.d.ts index 3cd7256..5e3e501 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/BotGeneratorHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/BotGeneratorHelper.d.ts @@ -1,19 +1,33 @@ import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; -import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; -import { Grid, ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; -import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { ItemFilterService } from "../services/ItemFilterService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGeneratorHelper } from "./BotWeaponGeneratorHelper"; import { ContainerHelper } from "./ContainerHelper"; import { InventoryHelper } from "./InventoryHelper"; import { ItemHelper } from "./ItemHelper"; import { ProbabilityHelper } from "./ProbabilityHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} export declare class BotGeneratorHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; @@ -25,16 +39,121 @@ export declare class BotGeneratorHelper { protected itemHelper: ItemHelper; protected inventoryHelper: InventoryHelper; protected containerHelper: ContainerHelper; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected itemFilterService: ItemFilterService; + protected profileHelper: ProfileHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer); - generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, configServer: ConfigServer); /** - * Is this magazine cylinder related (revolvers and grenade launchers) - * @param magazineParentName the name of the magazines parent - * @returns true if it is cylinder related + * Check mods are compatible and add to array + * @param equipment Equipment item to add mods to + * @param modPool Mod list to choose frm + * @param parentId parentid of item to add mod to + * @param parentTemplate template objet of item to add mods to + * @param modSpawnChances dictionary of mod items and their chance to spawn for this bot type + * @returns Item + compatible mods as an array */ - magazineIsCylinderRelated(magazineParentName: string): boolean; + generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; + /** + * @param sessionId session id + * @param weapon Weapon to add mods to + * @param modPool Pool of compatible mods to attach to weapon + * @param weaponParentId parentId of weapon + * @param parentWeaponTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @returns Weapon + mods array + */ + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentWeaponTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string): Item[]; + /** + * + * @param modSlot + * @param isRandomisableSlot + * @param modsParent + * @param botEquipBlacklist + * @param itemModPool + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate + * @returns + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, modsParent: Slot, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Check if mod item is on limited list + has surpassed the limit set for it + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @returns true if over item limit + */ + protected modHasReachedItemLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits): boolean; + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + protected initModLimits(botRole: string): BotModLimits; + /** + * Generate a pool of mods for this bots mod type if bot has values inside `randomisedWeaponModSlots` array found in bot.json/equipment[botrole] + * @param allowedMods Mods to be added to mod pool + * @param botEquipBlacklist blacklist of items not allowed to be added to mod pool + * @param modSlot Slot to generate mods for + * @param itemModPool base mod pool to replace values of + */ + protected generateDynamicWeaponModPool(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string, itemModPool: Record): void; + /** + * Find all compatible mods for equipment item and add to modPool + * @param itemDetails item to find mods for + * @param modPool ModPool to add mods to + */ + generateDynamicModPool(itemDetails: ITemplateItem, modPool: Mods): void; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; + /** + * Check if the specific item type on the weapon has reached the set limit + * @param modTpl log mod tpl if over type limit + * @param currentCount current number of this item on gun + * @param maxLimit mod limit allowed + * @param botRole role of bot we're checking weapon of + * @returns true if limit reached + */ + protected weaponModLimitReached(modTpl: string, currentCount: { + count: number; + }, maxLimit: number, botRole: string): boolean; + /** + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate tempalte of the mods parent item + * @returns true if valid + */ + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; + /** + * Create a mod item with parameters as properties + * @param modId _id + * @param modTpl _tpl + * @param parentId parentId + * @param modSlot slotId + * @param modTemplate Used to add additional properites in the upd object + * @returns Item object + */ + protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem): Item; /** * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot * never return true for an item that has 0% spawn chance @@ -46,7 +165,7 @@ export declare class BotGeneratorHelper { protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; /** * Get a list of containers that hold ammo - * e.g. mod_magazine + * e.g. mod_magazine / patron_in_weapon_000 * @returns string array */ protected getAmmoContainers(): string[]; @@ -62,11 +181,11 @@ export declare class BotGeneratorHelper { * Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0. * Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots. * This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine" - * - * @param {object} items The items where the CylinderMagazine's camora are appended to - * @param {object} modPool modPool which should include available cartrigdes - * @param {string} parentId The CylinderMagazine's UID - * @param {object} parentTemplate The CylinderMagazine's template + * @param items The items where the CylinderMagazine's camora are appended to + * @param modPool modPool which should include available cartrigdes + * @param parentId The CylinderMagazine's UID + * @param parentTemplate The CylinderMagazine's template + * @returns */ protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void; /** @@ -75,6 +194,13 @@ export declare class BotGeneratorHelper { * @returns string array of shells fro luitple camora sources */ protected mergeCamoraPoolsTogether(camorasWithShells: Record): string[]; + /** + * Adds properties to an item + * e.g. Repairable / HasHinge / Foldable / MaxDurability + * @param itemTemplate + * @param botRole Used by weapons to randomise the durability values + * @returns Item Upd object with extra properties + */ generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: any): { upd?: Upd; }; @@ -92,13 +218,15 @@ export declare class BotGeneratorHelper { * @returns Repairable object */ protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; - protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** - * Sort by spawn chance, highest to lowest, higher is more common - * @param unsortedModArray String array to sort - * @returns Sorted string array + * Get a random mod from an items compatible mods Filter array + * @param modTpl + * @param parentSlot + * @param modSlot + * @param items + * @returns item tpl */ - protected sortModArray(unsortedModArray: string[]): string[]; + protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** * Can an item be added to an item without issue * @param items @@ -107,18 +235,8 @@ export declare class BotGeneratorHelper { * @returns true if possible */ isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean; - /** - * Adds an item with all its childern into specified equipmentSlots, wherever it fits. - * @param equipmentSlots - * @param parentId - * @param parentTpl - * @param itemWithChildren - * @param inventory - * @returns a `boolean` indicating item was added - */ - addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean; - protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; } +/** TODO - move into own class */ export declare class ExhaustableArray { private itemPool; private randomUtil; diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/BotHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/BotHelper.d.ts index 9b89481..18738e5 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/BotHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/BotHelper.d.ts @@ -13,11 +13,34 @@ export declare class BotHelper { protected configServer: ConfigServer; protected botConfig: IBotConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retreive difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ getBotTemplate(role: string): IBotType; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ getPmcDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; /** * Randomise the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent * @param difficultySettings pmc difficulty settings */ randomisePmcHostility(difficultySettings: Difficulty): void; @@ -31,7 +54,7 @@ export declare class BotHelper { */ addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; /** - * Add a bot to the ENEMY_BOT_TYPES array + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list * @param difficultySettings bot settings to alter * @param typesToAdd bot type to add to enemy list */ @@ -42,4 +65,10 @@ export declare class BotHelper { * @param typesToAdd bot type to add to revenge list */ addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; } diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..7e25f56 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,78 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper); + /** + * Get a randomised number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomised count of magazines + * @param magCounts min and max value returned value can be between + * @returns numberical value of magazine count + */ + getRandomisedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartrdiges to a bots inventory (vest/pocket) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + */ + addBulletsToVestAndPockets(ammoTpl: string, cartridgeCount: number, inventory: Inventory): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * Adds an item with all its childern into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/ExtendedProfileHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/ExtendedProfileHelper.d.ts deleted file mode 100644 index c05d88e..0000000 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/ExtendedProfileHelper.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BotGenerator } from "../generators/BotGenerator"; -import { IPmcData, Skills, Stats } from "../models/eft/common/IPmcData"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { SaveServer } from "../servers/SaveServer"; -import { BotLootCacheService } from "../services/BotLootCacheService"; -import { FenceService } from "../services/FenceService"; -import { JsonUtil } from "../utils/JsonUtil"; -import { TimeUtil } from "../utils/TimeUtil"; -import { Watermark } from "../utils/Watermark"; -import { ItemHelper } from "./ItemHelper"; -import { ProfileHelper } from "./ProfileHelper"; -/** - * This class needs to exist outside of ProfileHelper to ensure cyclic deps don't cause the server to fail on load - */ -export declare class ExtendedProfileHelper extends ProfileHelper { - protected botLootCacheService: BotLootCacheService; - protected botGenerator: BotGenerator; - constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, botLootCacheService: BotLootCacheService, fenceService: FenceService, botGenerator: BotGenerator); - generatePlayerScav(sessionID: string): IPmcData; - protected getScavSkills(sessionID: string): Skills; - protected removeSecureContainer(profile: IPmcData): IPmcData; - protected getDefaultScavSkills(): Skills; - protected getScavStats(sessionID: string): Stats; - protected getScavLevel(sessionID: string): number; - protected getScavExperience(sessionID: string): number; - protected setScavCooldownTimer(profile: IPmcData, pmcData: IPmcData): IPmcData; -} diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/HideoutHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/HideoutHelper.d.ts index 36e4009..7495a6a 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/HideoutHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/HideoutHelper.d.ts @@ -44,14 +44,72 @@ export declare class HideoutHelper { initProduction(recipeId: string, productionTime: number): Production; isProductionType(productive: Productive): productive is Production; applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void; + /** + * TODO: + * After looking at the skills there doesnt seem to be a configuration per skill to boost + * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it) + * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure! + * @param pmcData + * @param bonus + */ protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void; + /** + * Process a players hideout, update areas that use resources + increment production timers + * @param sessionID Session id + */ updatePlayerHideout(sessionID: string): void; + /** + * Update progress timer for water collector + * @param pmcData profile to update + * @param productionId id of water collection production to update + * @param hideoutProperties Hideout properties + */ + protected updateWaterCollectorProductionTimer(pmcData: IPmcData, productionId: string, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Iterate over productions and update their progress timers + * @param pmcData Profile to check for productions and update + * @param hideoutProperties Hideout properties + */ + protected updateProductionTimers(pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Update progress timer for scav case + * @param pmcData Profile to update + * @param productionId Id of scav case production to update + */ + protected updateScavCaseProductionTimer(pmcData: IPmcData, productionId: string): void; + /** + * Iterate over hideout areas that use resources (fuel/filters etc) and update associated values + * @param sessionID Session id + * @param pmcData Profile to update areas of + * @param hideoutProperties hideout properties + */ + protected updateAreasWithResources(sessionID: string, pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void; protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean; - protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): HideoutArea; - protected updateWaterFilters(waterFilterArea: HideoutArea, pwProd: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; + protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void; + /** + * Adjust water filter objects resourceValue or delete when they reach 0 resource + * @param waterFilterArea water filter area to update + * @param production production object + * @param isGeneratorOn is generatory enabled + * @param pmcData Player profile + * @returns Updated HideoutArea object + */ + protected updateWaterFilters(waterFilterArea: HideoutArea, production: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd; - protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): HideoutArea; + protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): void; protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production; protected getBTCSlots(pmcData: IPmcData): number; protected getManagementSkillsSlots(): number; diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/InRaidHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/InRaidHelper.d.ts index c3cbfbb..962df38 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/InRaidHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/InRaidHelper.d.ts @@ -5,6 +5,7 @@ import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequ import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; import { InventoryHelper } from "./InventoryHelper"; import { PaymentHelper } from "./PaymentHelper"; @@ -15,19 +16,8 @@ export declare class InRaidHelper { protected databaseServer: DatabaseServer; protected inventoryHelper: InventoryHelper; protected paymentHelper: PaymentHelper; - constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper); - /** - * Reset the SPT inraid property stored in a profile to 'none' - * @param sessionID Session id - */ - protected removePlayer(sessionID: string): void; - /** - * Some maps have one-time-use keys (e.g. Labs - * Remove the relevant key from an inventory based on the post-raid request data passed in - * @param offraidData post-raid data - * @param sessionID Session id - */ - protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + protected profileFixerService: ProfileFixerService; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, profileFixerService: ProfileFixerService); /** * Check an array of items and add an upd object to money items with a stack count of 1 * Single stack money items have no upd object and thus no StackObjectsCount, causing issues @@ -52,6 +42,18 @@ export declare class InRaidHelper { * @returns Reset profile object */ updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData; + /** + * Some maps have one-time-use keys (e.g. Labs + * Remove the relevant key from an inventory based on the post-raid request data passed in + * @param offraidData post-raid data + * @param sessionID Session id + */ + protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Set the SPT inraid location Profile property to 'none' + * @param sessionID Session id + */ + protected setPlayerInRaidLocationStatusToNone(sessionID: string): void; /** * Adds SpawnedInSession property to items found in a raid * Removes SpawnedInSession for non-scav players if item was taken into raid with SpawnedInSession = true @@ -93,5 +95,10 @@ export declare class InRaidHelper { * @returns true if item is kept after death */ isItemKeptAfterDeath(slotId: string): boolean; + /** + * Return the equipped items from a players inventory + * @param items Players inventory to search through + * @returns an array of equipped items + */ getPlayerGear(items: Item[]): Item[]; } diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/InventoryHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/InventoryHelper.d.ts index dc7cbca..b8e5c9d 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/InventoryHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/InventoryHelper.d.ts @@ -43,6 +43,7 @@ export declare class InventoryHelper { constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, httpResponse: HttpResponseUtil, fenceService: FenceService, databaseServer: DatabaseServer, paymentHelper: PaymentHelper, traderAssortHelper: TraderAssortHelper, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, containerHelper: ContainerHelper, profileHelper: ProfileHelper, configServer: ConfigServer); addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse; removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + removeItemByCount(pmcData: IPmcData, itemId: string, count: number, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record; protected getSizeByInventoryItemHash(itemTpl: string, itemID: string, inventoryItemHash: InventoryHelper.InventoryItemHash): Record; protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash; diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/ItemHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/ItemHelper.d.ts index 1701c62..0effaf2 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/ItemHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/ItemHelper.d.ts @@ -1,35 +1,30 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { InsuredItem } from "../models/eft/common/tables/IBotBase"; import { Item, Repairable } from "../models/eft/common/tables/IItem"; +import { IStaticAmmoDetails } from "../models/eft/common/tables/ILootBase"; import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; declare class ItemHelper { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected objectId: ObjectId; + protected mathUtil: MathUtil; protected databaseServer: DatabaseServer; - constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer); + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer); /** - * Checks if a id is a valid item. Valid meaning that it's an item that be stored in stash + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash * @param {string} tpl the template id / tpl * @returns boolean; true for items that may be in player posession and not quest items */ isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean; - /** - * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward - * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. - * @param {*} tpl template id of item to check - * @returns boolean: true if item is valid reward - */ - isValidRewardItem(tpl: string): boolean; - /** - * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) - * @returns a list of rewardable items [[_tpl, itemTemplate],...] - */ - getRewardableItems(): [string, ITemplateItem][]; /** * Check if the tpl / template Id provided is a descendent of the baseclass * @@ -84,6 +79,11 @@ declare class ItemHelper { * @returns {array} The array of StackSlotItems */ generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; /** * Gets item data from items.json * @param tpl items template id to look up @@ -196,6 +196,22 @@ declare class ItemHelper { * @returns ItemSize object (width and height) */ getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; + /** + * Get a random cartridge from an items Filter property + * @param item + * @returns + */ + getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; + createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; + protected getRandomValidCaliber(magTemplate: ITemplateItem): string; + protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; + createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item; + /** + * Get the size of a stack, return 1 if no stack object count property found + * @param item Item to get stack size of + * @returns size of stack + */ + getItemStackSize(item: Item): number; } declare namespace ItemHelper { interface ItemSize { diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/ProfileHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/ProfileHelper.d.ts index 6c150c8..9c6560a 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/ProfileHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/ProfileHelper.d.ts @@ -2,24 +2,41 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { Stats } from "../models/eft/common/tables/IBotBase"; import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { FenceService } from "../services/FenceService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; import { Watermark } from "../utils/Watermark"; import { ItemHelper } from "./ItemHelper"; export declare class ProfileHelper { + protected logger: ILogger; protected jsonUtil: JsonUtil; protected watermark: Watermark; protected timeUtil: TimeUtil; protected saveServer: SaveServer; protected databaseServer: DatabaseServer; protected itemHelper: ItemHelper; + protected profileSnapshotService: ProfileSnapshotService; protected fenceService: FenceService; - constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, fenceService: FenceService); + constructor(logger: ILogger, jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService, fenceService: FenceService); resetProfileQuestCondition(sessionID: string, conditionId: string): void; getCompleteProfile(sessionID: string): IPmcData[]; + /** + * Fix xp doubling on post-raid xp reward screen by sending a 'dummy' profile to the post-raid screen + * Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using + * the now updated profile values as a base, meaning it shows x2 xp gained + * Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return + * Delete snapshot of pre-raid profile prior to returning profile data + * @param sessionId Session id + * @param output pmc and scav profiles array + * @param pmcProfile post-raid pmc profile + * @param scavProfile post-raid scav profile + * @returns updated profile array + */ + protected postRaidXpWorkaroundFix(sessionId: string, output: IPmcData[], pmcProfile: IPmcData, scavProfile: IPmcData): IPmcData[]; isNicknameTaken(info: IValidateNicknameRequestData, sessionID: string): boolean; /** * Add experience to a PMC inside the players profile diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/QuestHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/QuestHelper.d.ts index 0f68cd5..d66d150 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/QuestHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/QuestHelper.d.ts @@ -36,13 +36,30 @@ export declare class QuestHelper { protected configServer: ConfigServer; protected questConfig: IQuestConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, traderHelper: TraderHelper, configServer: ConfigServer); - questStatus(pmcData: IPmcData, questID: string): QuestStatus; /** - * returns true is the condition is satisfied + * Get status of a quest by quest id + * @param pmcData Profile to search + * @param questID Quest id to look up + * @returns QuestStauts enum + */ + getQuestStatus(pmcData: IPmcData, questID: string): QuestStatus; + /** + * returns true is the level condition is satisfied + * @param playerLevel Players level + * @param condition Quest condition + * @returns true if player level is greater than or equal to quest */ - evaluateLevel(pmcProfile: IPmcData, cond: AvailableForConditions): boolean; + doesPlayerLevelFulfilCondition(playerLevel: number, condition: AvailableForConditions): boolean; getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[]; - rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progress: number): void; + /** + * Increase skill points of a skill on player profile + * @param sessionID Session id + * @param pmcData Player profile + * @param output output object to send back to client + * @param skillName Name of skill to increase skill points of + * @param progressAmount Amount of skill points to add to skill + */ + rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progressAmount: number): void; getQuestLocale(questId: string): any; /** * Debug Routine for showing some information on the diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairOfferHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairOfferHelper.d.ts index 8d03bee..e9d72ca 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairOfferHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairOfferHelper.d.ts @@ -22,12 +22,14 @@ import { ProfileHelper } from "./ProfileHelper"; import { RagfairHelper } from "./RagfairHelper"; import { RagfairServerHelper } from "./RagfairServerHelper"; import { RagfairSortHelper } from "./RagfairSortHelper"; +import { TraderHelper } from "./TraderHelper"; export declare class RagfairOfferHelper { protected logger: ILogger; protected timeUtil: TimeUtil; protected hashUtil: HashUtil; protected itemEventRouter: ItemEventRouter; protected databaseServer: DatabaseServer; + protected traderHelper: TraderHelper; protected saveServer: SaveServer; protected dialogueHelper: DialogueHelper; protected itemHelper: ItemHelper; @@ -43,10 +45,10 @@ export declare class RagfairOfferHelper { protected static goodSoldTemplate: string; protected ragfairConfig: IRagfairConfig; protected questConfig: IQuestConfig; - constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); + constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); getValidOffers(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; - processOffers(sessionID: string): boolean; + processOffersOnProfile(sessionID: string): boolean; protected getProfileOffers(sessionID: string): IRagfairOffer[]; protected deleteOfferByOfferId(sessionID: string, offerId: string): void; protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse; diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairSellHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairSellHelper.d.ts index 6ec004a..91b8a20 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairSellHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairSellHelper.d.ts @@ -11,6 +11,12 @@ export declare class RagfairSellHelper { protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer); - calculateSellChance(baseChance: number, offerPrice: number, requirementsPriceInRub: number): number; - rollForSale(sellChance: number, count: number): SellResult[]; + calculateSellChance(baseChancePercent: number, offerPriceRub: number, playerListedPriceRub: number): number; + /** + * Determine if the offer being listed will be sold + * @param sellChancePercent chance item will sell + * @param itemSellCount count of items to sell + * @returns Array of purchases of item(s) lsited + */ + rollForSale(sellChancePercent: number, itemSellCount: number): SellResult[]; } diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairServerHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairServerHelper.d.ts index e4939d1..a03cdda 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairServerHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/RagfairServerHelper.d.ts @@ -6,6 +6,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { LocaleService } from "../services/LocaleService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -13,6 +14,9 @@ import { RandomUtil } from "../utils/RandomUtil"; import { DialogueHelper } from "./DialogueHelper"; import { ItemHelper } from "./ItemHelper"; import { ProfileHelper } from "./ProfileHelper"; +/** + * Helper class for common ragfair server actions + */ export declare class RagfairServerHelper { protected randomUtil: RandomUtil; protected hashUtil: HashUtil; @@ -23,11 +27,12 @@ export declare class RagfairServerHelper { protected localeService: LocaleService; protected dialogueHelper: DialogueHelper; protected jsonUtil: JsonUtil; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; protected questConfig: IQuestConfig; protected static goodsReturnedTemplate: string; - constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, configServer: ConfigServer); + constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * Is item valid / on blacklist / quest item * @param itemDetails diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/RepairHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/RepairHelper.d.ts index 9a3ab29..5b09320 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/RepairHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/RepairHelper.d.ts @@ -14,8 +14,17 @@ export declare class RepairHelper { protected configServer: ConfigServer; protected repairConfig: IRepairConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); - updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit?: boolean, applyRandomDegradation?: boolean): Item; - protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number): number; - protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, armorMax: number): number; + /** + * + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; isWeaponTemplate(tpl: string): boolean; } diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/TradeHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/TradeHelper.d.ts index 975062b..7ab9768 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/TradeHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/TradeHelper.d.ts @@ -39,6 +39,12 @@ export declare class TradeHelper { * @returns */ sellItem(pmcData: IPmcData, body: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment the assorts buy count by number of items purchased + * Show error on screen if player attepts to buy more than what the buy max allows + * @param assortBeingPurchased assort being bought + * @param itemsPurchasedCount number of items being bought + */ protected incrementAssortBuyCount(assortBeingPurchased: Item, itemsPurchasedCount: number): void; protected checkPurchaseIsWithinTraderItemLimit(assortBeingPurchased: Item, assortId: string, count: number): void; } diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/TraderAssortHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/TraderAssortHelper.d.ts index 91ba6b9..025efd6 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/TraderAssortHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/TraderAssortHelper.d.ts @@ -1,7 +1,7 @@ import { RagfairAssortGenerator } from "../generators/RagfairAssortGenerator"; import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; import { Item } from "../models/eft/common/tables/IItem"; -import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITrader, ITraderAssort } from "../models/eft/common/tables/ITrader"; import { ITraderConfig } from "../models/spt/config/ITraderConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -10,13 +10,16 @@ import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { JsonUtil } from "../utils/JsonUtil"; import { MathUtil } from "../utils/MathUtil"; +import { TimeUtil } from "../utils/TimeUtil"; import { AssortHelper } from "./AssortHelper"; import { PaymentHelper } from "./PaymentHelper"; import { ProfileHelper } from "./ProfileHelper"; +import { TraderHelper } from "./TraderHelper"; export declare class TraderAssortHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; protected mathUtil: MathUtil; + protected timeUtil: TimeUtil; protected databaseServer: DatabaseServer; protected profileHelper: ProfileHelper; protected assortHelper: AssortHelper; @@ -24,18 +27,32 @@ export declare class TraderAssortHelper { protected ragfairAssortGenerator: RagfairAssortGenerator; protected ragfairOfferGenerator: RagfairOfferGenerator; protected traderAssortService: TraderAssortService; + protected traderHelper: TraderHelper; protected fenceService: FenceService; protected configServer: ConfigServer; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, fenceService: FenceService, configServer: ConfigServer); + constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, traderHelper: TraderHelper, fenceService: FenceService, configServer: ConfigServer); /** * Get a traders assorts * Can be used for returning ragfair / fence assorts + * Filter out assorts not unlocked due to level OR quest completion * @param sessionId session id - * @param traderId trader id - * @returns a traders assorts + * @param traderId traders id + * @returns a traders' assorts */ - getAssort(sessionId: string, traderId: string): ITraderAssort; + getAssort(sessionId: string, traderId: string, flea?: boolean): ITraderAssort; + /** + * Reset a traders assorts and move nextResupply value to future + * Flag trader as needing a flea offer reset to be picked up by flea update() function + * @param trader trader details to alter + */ + resetExpiredTrader(trader: ITrader): void; + /** + * Does the supplied trader need its assorts refreshed + * @param traderID Trader to check + * @returns true they need refreshing + */ + traderAssortsHaveExpired(traderID: string): boolean; /** * Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config * @param traderAssort Assorts to multiple price of diff --git a/Faupi-HideoutArchitect/server/dist/types/helpers/TraderHelper.d.ts b/Faupi-HideoutArchitect/server/dist/types/helpers/TraderHelper.d.ts index b2e9d38..0dc93e8 100644 --- a/Faupi-HideoutArchitect/server/dist/types/helpers/TraderHelper.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/helpers/TraderHelper.d.ts @@ -9,6 +9,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { FenceService } from "../services/FenceService"; import { PlayerService } from "../services/PlayerService"; +import { TimeUtil } from "../utils/TimeUtil"; import { HandbookHelper } from "./HandbookHelper"; import { ItemHelper } from "./ItemHelper"; import { PaymentHelper } from "./PaymentHelper"; @@ -23,9 +24,10 @@ export declare class TraderHelper { protected handbookHelper: HandbookHelper; protected playerService: PlayerService; protected fenceService: FenceService; + protected timeUtil: TimeUtil; protected configServer: ConfigServer; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); getTrader(traderID: string, sessionID: string): ITraderBase; getTraderAssortsById(traderId: string): ITraderAssort; /** @@ -63,7 +65,7 @@ export declare class TraderHelper { * @param item * @returns boolean */ - protected isWeaponAndBelowTraderBuyDurability(traderID: string, item: Item): boolean; + protected isWeaponBelowTraderBuyDurability(traderID: string, item: Item): boolean; /** * Get the price of an item and all of its attached children * Take into account bonuses/adjsutments e.g. discounts @@ -97,6 +99,17 @@ export declare class TraderHelper { * @param sessionID session id */ lvlUp(traderID: string, sessionID: string): void; + /** + * Get the next update timestamp for a trader + * @param traderID Trader to look up update value for + * @returns future timestamp + */ + getNextUpdateTimestamp(traderID: string): number; + /** + * Get the reset time between trader assort refreshes in seconds + * @param traderId Trader to look up + * @returns Time in seconds + */ getTraderUpdateSeconds(traderId: string): number; /** * check if an item is allowed to be sold to a trader diff --git a/Faupi-HideoutArchitect/server/dist/types/loaders/DelayedModLoader.d.ts b/Faupi-HideoutArchitect/server/dist/types/loaders/DelayedModLoader.d.ts deleted file mode 100644 index 2a05604..0000000 --- a/Faupi-HideoutArchitect/server/dist/types/loaders/DelayedModLoader.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { HandbookController } from "../controllers/HandbookController"; -import { IModLoader } from "../models/spt/mod/IModLoader"; -import { ModCompilerService } from "../services/ModCompilerService"; -import { VFS } from "../utils/VFS"; -import { BundleLoader } from "./BundleLoader"; -import { InitialModLoader } from "./InitialModLoader"; -export declare class DelayedModLoader implements IModLoader { - protected bundleLoader: BundleLoader; - protected handbookController: HandbookController; - protected vfs: VFS; - protected modCompilerService: ModCompilerService; - protected initialModLoader: InitialModLoader; - constructor(bundleLoader: BundleLoader, handbookController: HandbookController, vfs: VFS, modCompilerService: ModCompilerService, initialModLoader: InitialModLoader); - getBundles(local: boolean): string; - getBundle(key: string, local: boolean): void; - getModPath(mod: string): string; - load(): void; - protected executeMods(container: DependencyContainer): void; - protected addBundles(): void; -} diff --git a/Faupi-HideoutArchitect/server/dist/types/loaders/InitialModLoader.d.ts b/Faupi-HideoutArchitect/server/dist/types/loaders/InitialModLoader.d.ts deleted file mode 100644 index 68e47fe..0000000 --- a/Faupi-HideoutArchitect/server/dist/types/loaders/InitialModLoader.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { ICoreConfig } from "../models/spt/config/ICoreConfig"; -import { ModLoader } from "../models/spt/mod/IMod"; -import { IModLoader } from "../models/spt/mod/IModLoader"; -import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { ConfigServer } from "../servers/ConfigServer"; -import { ModCompilerService } from "../services/ModCompilerService"; -import { JsonUtil } from "../utils/JsonUtil"; -import { VFS } from "../utils/VFS"; -import { BundleLoader } from "./BundleLoader"; -export declare class InitialModLoader implements IModLoader { - protected logger: ILogger; - protected vfs: VFS; - protected jsonUtil: JsonUtil; - protected modCompilerService: ModCompilerService; - protected bundleLoader: BundleLoader; - protected configServer: ConfigServer; - protected static container: DependencyContainer; - protected readonly basepath = "user/mods/"; - protected imported: Record; - protected akiConfig: ICoreConfig; - constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, configServer: ConfigServer); - load(container: DependencyContainer): Promise; - getBundles(local: boolean): string; - getBundle(key: string, local: boolean): void; - /** - * Returns a list of mods with preserved load order - * @returns Array of mod names in load order - */ - getImportedModsNames(): string[]; - getModPath(mod: string): string; - protected importClass(name: string, filepath: string, container: DependencyContainer): void; - protected importMods(): Promise; - /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array - */ - protected getBrokenMods(mods: string[]): string[]; - /** - * Get packageJson data for mods - * @param mods mods to get packageJson for - * @returns dictionary - */ - protected getModsPackageData(mods: string[]): Record; - /** - * Does mod have "delayedLoad(" string in its entry class - * @param modFolderName folder name - * @param modToValidate package.json details - * @returns boolean - */ - protected isModSpt300Compatible(modFolderName: string, modToValidate: IPackageJsonData): boolean; - protected isModCombatibleWithAki(mod: IPackageJsonData): boolean; - protected executeMods(container: DependencyContainer): void; - sortModsLoadOrder(): string[]; - protected addMod(mod: string): Promise; - protected areModDependenciesFulfilled(mod: IPackageJsonData, loadedMods: Record): boolean; - protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; - protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; - protected getLoadOrder(mods: Record): Record; - getContainer(): DependencyContainer; -} diff --git a/Faupi-HideoutArchitect/server/dist/types/loaders/PreAkiModLoader.d.ts b/Faupi-HideoutArchitect/server/dist/types/loaders/PreAkiModLoader.d.ts index 6ded3c6..4ab1689 100644 --- a/Faupi-HideoutArchitect/server/dist/types/loaders/PreAkiModLoader.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/loaders/PreAkiModLoader.d.ts @@ -33,9 +33,20 @@ export declare class PreAkiModLoader implements IModLoader { protected importClass(name: string, filepath: string, container: DependencyContainer): void; protected importMods(): Promise; /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array + * Check for duplciate mods loaded, show error if duplicate mod found + * @param modPackageData dictionary of mod package.json data + */ + protected checkForDuplicateMods(modPackageData: Record): void; + /** + * Check for and return duplicate strings inside an array + * @param stringArray Array to check for duplicates + * @returns string array of duplicates, empty if none found + */ + protected getDuplicates(stringArray: string[]): string[]; + /** + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array */ protected getBrokenMods(mods: string[]): string[]; /** @@ -57,7 +68,12 @@ export declare class PreAkiModLoader implements IModLoader { protected addMod(mod: string): Promise; protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; protected getLoadOrder(mods: Record): Record; getContainer(): DependencyContainer; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/IGlobals.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/IGlobals.d.ts index 9d28dbc..81e2023 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/IGlobals.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/IGlobals.d.ts @@ -1175,5 +1175,6 @@ export interface Preset { _name: string; _parent: string; _items: Item[]; + /** Default presets have this property */ _encyclopedia?: string; } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/ILocationBase.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/ILocationBase.d.ts index b1dd448..78ade9a 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/ILocationBase.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/ILocationBase.d.ts @@ -137,7 +137,7 @@ export interface BotLocationModifier { VisibleDistance: number; } export interface MinMaxBot { - WildSpawnType: string; + WildSpawnType: WildSpawnType; max: number; min: number; } @@ -195,7 +195,7 @@ export interface Wave { BotPreset: string; BotSide: string; SpawnPoints: string; - WildSpawnType: string; + WildSpawnType: WildSpawnType; isPlayers: boolean; number: number; slots_max: number; @@ -203,3 +203,7 @@ export interface Wave { time_max: number; time_min: number; } +export declare enum WildSpawnType { + ASSAULT = "assault", + MARKSMAN = "marksman" +} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/MemberCategory.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/MemberCategory.d.ts deleted file mode 100644 index 3bd9a21..0000000 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/MemberCategory.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -export declare enum MemberCategory { - Default = 0, - Developer = 1, - UniqueId = 2, - Trader = 4, - Group = 8, - System = 16, - ChatModerator = 32, - ChatModeratorWithPermanentBan = 64, - UnitTest = 128, - Sherpa = 256, - Emissary = 512 -} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/IBotBase.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/IBotBase.d.ts index 0ee468e..25cb861 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/IBotBase.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/IBotBase.d.ts @@ -28,6 +28,8 @@ export interface IBotBase { CarExtractCounts: CarExtractCounts; SurvivorClass: SurvivorClass; WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; } export interface Info { EntryPoint: string; @@ -66,13 +68,13 @@ export interface IBan { dateTime: number; } export declare enum BanType { - Chat = 0, - RagFair = 1, - Voip = 2, - Trading = 3, - Online = 4, - Friends = 5, - ChangeNickname = 6 + CHAT = 0, + RAGFAIR = 1, + VOIP = 2, + TRADING = 3, + ONLINE = 4, + FRIENDS = 5, + CHANGE_NICKNAME = 6 } export interface Customization { Head: string; @@ -312,11 +314,11 @@ export interface Notes { export interface CarExtractCounts { } export declare enum SurvivorClass { - Unknown = 0, - Neutralizer = 1, - Marauder = 2, - Paramedic = 3, - Survivor = 4 + UNKNOWN = 0, + NEUTRALIZER = 1, + MARAUDER = 2, + PARAMEDIC = 3, + SURVIVOR = 4 } export interface Quest { qid: string; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts index 23a1a14..8569e61 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts @@ -34,6 +34,7 @@ export interface Props { LootExperience?: number; ExamineExperience?: number; HideEntrails?: boolean; + InsuranceDisabled?: boolean; RepairCost?: number; RepairSpeed?: number; ExtraSizeLeft?: number; @@ -79,7 +80,7 @@ export interface Props { HasShoulderContact?: boolean; SightingRange?: number; DoubleActionAccuracyPenaltyMult?: number; - ModesCount: any; + ModesCount?: any; DurabilityBurnModificator?: number; HeatFactor?: number; CoolFactor?: number; @@ -155,7 +156,7 @@ export interface Props { RigLayoutName?: string; MaxDurability?: number; armorZone?: string[]; - armorClass: any; + armorClass?: any; mousePenalty?: number; weaponErgonomicPenalty?: number; BluntThroughput?: number; @@ -206,6 +207,7 @@ export interface Props { IsOneoff?: boolean; MustBoltBeOpennedForExternalReload?: boolean; MustBoltBeOpennedForInternalReload?: boolean; + NoFiremodeOnBoltcatch?: boolean; BoltAction?: boolean; HipAccuracyRestorationDelay?: number; HipAccuracyRestorationSpeed?: number; @@ -252,8 +254,8 @@ export interface Props { foodUseTime?: number; foodEffectType?: string; StimulatorBuffs?: string; - effects_health: any; - effects_damage: any; + effects_health?: any; + effects_damage?: any; MaximumNumberOfUsage?: number; knifeHitDelay?: number; knifeHitSlashRate?: number; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/ITrader.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/ITrader.d.ts index f0fe2b5..37b2d61 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/ITrader.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/common/tables/ITrader.d.ts @@ -7,7 +7,7 @@ export interface ITrader { suits?: ISuit[]; } export interface ITraderBase { - refreshAssort: boolean; + refreshTraderRagfairOffers: boolean; _id: string; avatar: string; balance_dol: number; @@ -58,7 +58,7 @@ export interface Repair { quality: string; } export interface ITraderAssort { - nextResupply?: number; + nextResupply: number; items: Item[]; barter_scheme: Record; loyal_level_items: Record; @@ -67,6 +67,7 @@ export interface IBarterScheme { count: number; _tpl: string; onlyFunctional?: boolean; + sptQuestLocked?: boolean; } export interface ISuit { _id: string; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/health/Effect.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/health/Effect.d.ts index 2f0adac..7eb3ffc 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/health/Effect.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/health/Effect.d.ts @@ -1,5 +1,5 @@ export declare enum Effect { - Fracture = "Fracture", - LightBleeding = "LightBleeding", - HeavyBleeding = "HeavyBleeding" + FRACTURE = "Fracture", + LIGHT_BLEEDING = "LightBleeding", + HEAVY_BLEEDING = "HeavyBleeding" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/health/IOffraidHealRequestData.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/health/IOffraidHealRequestData.d.ts index c242300..26b02bd 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/health/IOffraidHealRequestData.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/health/IOffraidHealRequestData.d.ts @@ -7,12 +7,12 @@ export interface IOffraidHealRequestData extends IBaseInteractionRequestData { time: number; } export declare enum BodyPart { - Head = 0, - Chest = 1, - Stomach = 2, - LeftArm = 3, - RightArm = 4, - LeftLeg = 5, - RightLeg = 6, - Common = 7 + HEAD = "Head", + CHEST = "Chest", + STOMACH = "Stomach", + LEFT_ARM = "LeftArm", + RIGHT_ARM = "RightArm", + LEFT_LEG = "LeftLeg", + RIGHT_LEG = "RightLeg", + COMMON = "Common" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/hideout/HideoutAreasEnum.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/hideout/HideoutAreasEnum.d.ts deleted file mode 100644 index 10f851b..0000000 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/hideout/HideoutAreasEnum.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -export declare enum HideoutAreasEnum { - NOTSET = -1, - VENTS = 0, - SECURITY = 1, - LAVATORY = 2, - STASH = 3, - GENERATOR = 4, - HEATING = 5, - WATER_COLLECTOR = 6, - MEDSTATION = 7, - NUTRITION_UNIT = 8, - REST_SPACE = 9, - WORKBENCH = 10, - INTEL_CENTER = 11, - SHOOTING_RANGE = 12, - LIBRARY = 13, - SCAV_CASE = 14, - ILLUMINATION = 15, - PLACE_OF_FAME = 16, - AIR_FILTERING = 17, - SOLAR_POWER = 18, - BOOZE_GENERATOR = 19, - BITCOIN_FARM = 20, - CHRISTMAS_TREE = 21 -} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/notifier/INotifier.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/notifier/INotifier.d.ts index 8c48260..b248636 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/notifier/INotifier.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/notifier/INotifier.d.ts @@ -1,9 +1,9 @@ export interface INotifierChannel { - "server": string; - "channel_id": string; - "url": string; - "notifierServer": string; - "ws": string; + server: string; + channel_id: string; + url: string; + notifierServer: string; + ws: string; } import { Message } from "../profile/IAkiProfile"; export interface INotification { diff --git a/Faupi-HideoutArchitect/server/dist/types/models/eft/ragfair/IRagfairOffer.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/eft/ragfair/IRagfairOffer.d.ts index 63f655e..141b605 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/eft/ragfair/IRagfairOffer.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/eft/ragfair/IRagfairOffer.d.ts @@ -15,6 +15,8 @@ export interface IRagfairOffer { name?: string; shortName?: string; loyaltyLevel: number; + buyRestrictionMax?: number; + buyRestrictionCurrent?: number; locked: boolean; unlimitedCount: boolean; summaryCost: number; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/AmmoTypes.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/AmmoTypes.d.ts index b52ddcf..254b410 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/AmmoTypes.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/AmmoTypes.d.ts @@ -23,7 +23,7 @@ export declare enum Ammo762x54 { BT_GZH = "5e023d34e8a400319a28ed44", BS_GZH = "5e023d48186a883be655e551" } -export declare enum Ammo338Lapua { +export declare enum Ammo86x70 { TAC_X = "5fc382b6d6fa9c00c571bbc3", UCW = "5fc382c1016cce60e8341b20", AP = "5fc382a9d724d907e2077dab", @@ -85,13 +85,13 @@ export declare enum Ammo9x21 { PE_GZH = "5a26ac06c4a282000c5a90a8", BT_GZH = "5a26ac0ec4a28200741e1e18" } -export declare enum Ammo357Mag { +export declare enum Ammo9x33R { FMJ = "62330b3ed4dc74626d570b95", HOLLOW_POINT = "62330bfadc5883093563729b", SOFT_POINT = "62330c40bdd19b369e1e53d1", JACKET_HP = "62330c18744e5e31df12f516" } -export declare enum Ammo45ACP { +export declare enum Ammo1143x23ACP { MATCH_FMJ = "5e81f423763d9f754677bf2e", HYDRA_SHOK = "5efb0fc6aeb21837e749c801", LASERMATCH_FMJ = "5efb0d4f4bc50b58e81710f3", @@ -126,7 +126,7 @@ export declare enum Ammo556x45 { MK_318_MOD_0_SOST = "60194943740c5d77f6705eea", SSA_AP = "601949593ae8f707c4608daa" } -export declare enum Ammo300Blackout { +export declare enum Ammo762x35 { M62_TRACER = "619636be6db0f2477964e710", BCP_FMJ = "5fbe3ffdf8b6a877a729ea82", AP = "5fd20ff893a8961fc660a954", diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/BaseClasses.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/BaseClasses.d.ts index e733bca..36ebc71 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/BaseClasses.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/BaseClasses.d.ts @@ -25,6 +25,7 @@ export declare enum BaseClasses { SIGHTS = "5448fe7a4bdc2d6f028b456b", MEDS = "543be5664bdc2dd4348b4569", MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", KEY = "543be5e94bdc2df1348b4568", KEY_MECHANICAL = "5c99f98d86f7745c314214b3", KEYCARD = "5c164d2286f774194c5e69fa", @@ -66,8 +67,8 @@ export declare enum BaseClasses { LUBRICANT = "57864e4c24597754843f8723", BATTERY = "57864ee62459775490116fc1", ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", - REFLEX_SIGHT = "55818ad54bdc2ddc698b4569", TACTICAL_COMBO = "55818b164bdc2ddc698b456c", + FLASHLIGHT = "55818b084bdc2d5b648b4571", MAGAZINE = "5448bc234bdc2d3c308b4569", LIGHT_LASER = "55818b0e4bdc2dde698b456e", FLASH_HIDER = "550aa4bf4bdc2dd6348b456b", diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/BotAmount.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/BotAmount.d.ts index d0e1df1..9ef9cab 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/BotAmount.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/BotAmount.d.ts @@ -1,7 +1,7 @@ export declare enum BotAmount { - AsOnline = "AsOnline", - Low = "Low", - Medium = "Medium", - High = "High", - Horde = "Horde" + AS_ONLINE = "AsOnline", + LOW = "Low", + MEDIUM = "Medium", + HIGH = "High", + HORDE = "Horde" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/BotDifficulty.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/BotDifficulty.d.ts index c901bcf..80e45ad 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/BotDifficulty.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/BotDifficulty.d.ts @@ -1,8 +1,8 @@ export declare enum BotDifficulty { - AsOnline = "AsOnline", - Easy = "Easy", - Medium = "Medium", - Hard = "Hard", - Impossible = "Impossible", - Random = "Random" + AS_ONLINE = "AsOnline", + EASY = "Easy", + MEDIUM = "Medium", + HARD = "Hard", + IMPOSSIBLE = "Impossible", + RANDOM = "Random" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/ConfigTypes.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/ConfigTypes.d.ts index 61d6f99..468ece5 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/ConfigTypes.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/ConfigTypes.d.ts @@ -8,6 +8,7 @@ export declare enum ConfigTypes { IN_RAID = "aki-inraid", INSURANCE = "aki-insurance", INVENTORY = "aki-inventory", + ITEM = "aki-item", LOCALE = "aki-locale", LOCATION = "aki-location", MATCH = "aki-match", diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/ELocationName.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/ELocationName.d.ts index b56cc08..7ae7caa 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/ELocationName.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/ELocationName.d.ts @@ -1,5 +1,6 @@ export declare enum ELocationName { FACTORY_DAY = "factory4_day", + FACTORY_NIGHT = "factory4_night", BIGMAP = "bigmap", WOODS = "Woods", SHORELINE = "Shoreline", diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/MemberCategory.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/MemberCategory.d.ts index 3bd9a21..a81380e 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/MemberCategory.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/MemberCategory.d.ts @@ -1,13 +1,13 @@ export declare enum MemberCategory { - Default = 0, - Developer = 1, - UniqueId = 2, - Trader = 4, - Group = 8, - System = 16, - ChatModerator = 32, - ChatModeratorWithPermanentBan = 64, - UnitTest = 128, - Sherpa = 256, - Emissary = 512 + DEFAULT = 0, + DEVELOPER = 1, + UNIQUE_ID = 2, + TRADER = 4, + GROUP = 8, + SYSTEM = 16, + CHAT_MODERATOR = 32, + CHAT_MODERATOR_WITH_PERMANENT_BAN = 64, + UNIT_TEST = 128, + SHERPA = 256, + EMISSARY = 512 } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/QuestRewardType.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/QuestRewardType.d.ts index 1d3db86..16f7e39 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/QuestRewardType.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/QuestRewardType.d.ts @@ -1,8 +1,8 @@ export declare enum QuestRewardType { - Skill = "Skill", - Experience = "Experience", - TraderStanding = "TraderStanding", - TraderUnlock = "TraderUnlock", - Item = "Item", - AssortmentUnlock = "AssortmentUnlock" + SKILL = "Skill", + EXPERIENCE = "Experience", + TRADER_STANDING = "TraderStanding", + TRADER_UNLOCK = "TraderUnlock", + ITEM = "Item", + ASSORTMENT_UNLOCK = "AssortmentUnlock" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/RaidMode.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/RaidMode.d.ts index c5a8cff..e20cf3f 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/enums/RaidMode.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/RaidMode.d.ts @@ -1,5 +1,5 @@ export declare enum RaidMode { - Online = "Online", - Local = "Local", - Coop = "Coop" + ONLINE = "Online", + LOCAL = "Local", + COOP = "Coop" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/enums/WeaponTypes.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/external/mod.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/external/mod.d.ts deleted file mode 100644 index ecef460..0000000 --- a/Faupi-HideoutArchitect/server/dist/types/models/external/mod.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DependencyContainer } from "./tsyringe"; -export interface IMod { - load: (container: DependencyContainer) => void; - delayedLoad: (container: DependencyContainer) => void; -} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/bots/BotLootCache.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/bots/BotLootCache.d.ts index e185315..aedf7b0 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/bots/BotLootCache.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/bots/BotLootCache.d.ts @@ -11,13 +11,13 @@ export declare class BotLootCache { grenadeItems: ITemplateItem[]; } export declare enum LootCacheType { - Special = "Special", - Backpack = "Backpack", - Pocket = "Pocket", - Vest = "Vest", - Combined = "Combined", - HealingItems = "HealingItems", - DrugItems = "DrugItems", - StimItems = "StimItems", - GrenadeItems = "GrenadeItems" + SPECIAL = "Special", + BACKPACK = "Backpack", + POCKET = "Pocket", + VEST = "Vest", + COMBINED = "Combined", + HEALING_ITEMS = "HealingItems", + DRUG_ITEMS = "DrugItems", + STIM_ITEMS = "StimItems", + GRENADE_ITEMS = "GrenadeItems" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IAirdropConfig.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IAirdropConfig.d.ts index f4aee89..3edcbdd 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IAirdropConfig.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IAirdropConfig.d.ts @@ -1,14 +1,14 @@ +import { MinMax } from "../../common/MinMax"; import { IBaseConfig } from "./IBaseConfig"; export interface IAirdropConfig extends IBaseConfig { kind: "aki-airdrop"; airdropChancePercent: AirdropChancePercent; - airdropMinOpenHeight: number; - airdropMaxOpenHeight: number; planeMinFlyHeight: number; planeMaxFlyHeight: number; planeVolume: number; airdropMinStartTimeSeconds: number; airdropMaxStartTimeSeconds: number; + loot: AirdropLoot; } export interface AirdropChancePercent { bigmap: number; @@ -18,3 +18,13 @@ export interface AirdropChancePercent { interchange: number; reserve: number; } +export interface AirdropLoot { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IBotConfig.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IBotConfig.d.ts index e171087..af8ceba 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IBotConfig.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IBotConfig.d.ts @@ -1,17 +1,31 @@ import { MinMax } from "../../common/MinMax"; import { IBaseConfig } from "./IBaseConfig"; +import { IBotDurability } from "./IBotDurability"; +import { IPmcConfig } from "./IPmcConfig"; export interface IBotConfig extends IBaseConfig { kind: "aki-bot"; + /** How many variants of each bot should be generated on raid start */ presetBatch: PresetBatch; + /** What bot types should be classified as bosses */ bosses: string[]; - durability: Durability; + /** Control weapon/armor durability min/max values for each bot type */ + durability: IBotDurability; + /** Control the weighting of how expensive an average loot item is on a PMC or Scav */ lootNValue: LootNvalue; + /** Control what bots are added to a bots revenge list key: bottype, value: bottypes to revenge on seeing their death */ revenge: Record; - pmc: PmcConfig; + /** PMC bot specific config settings */ + pmc: IPmcConfig; + /** Control how many items are allowed to spawn on a bot + * key: bottype, value: */ itemSpawnLimits: Record>; - equipment: Record; + /** Blacklist/whitelist items on a bot */ + equipment: Record; + /** Show a bots botType value after their name */ showTypeInNickname: boolean; - maxBotCap: number; + /** Max number of bots that can be spawned in a raid at any one time */ + maxBotCap: Record; + /** How many stacks of secret ammo should a bot have in its bot secure container */ secureContainerAmmoStackCount: number; } export interface PresetBatch { @@ -44,79 +58,23 @@ export interface PresetBatch { test: number; exUsec: number; } -export interface Durability { - default: DefaultDurability; - pmc: PmcDurability; - boss: BotDurability; - follower: BotDurability; - assault: BotDurability; - cursedassault: BotDurability; - marksman: BotDurability; - pmcbot: BotDurability; - exusec: BotDurability; - sectantpriest: BotDurability; - sectantwarrior: BotDurability; -} -export interface DefaultDurability { - armor: DefaultArmor; - weapon: WeaponDurability; -} -export interface DefaultArmor { - maxDelta: number; - minDelta: number; -} -export interface WeaponDurability { - lowestMax: number; - highestMax: number; - maxDelta: number; - minDelta: number; -} -export interface PmcDurability { - armor: PmcDurabilityArmor; - weapon: WeaponDurability; -} -export interface PmcDurabilityArmor { - lowestMaxPercent: number; - highestMaxPercent: number; - maxDelta: number; - minDelta: number; -} -export interface BotDurability { - armor: ArmorDurability; - weapon: WeaponDurability; -} -export interface ArmorDurability { - maxDelta: number; - minDelta: number; -} export interface LootNvalue { scav: number; pmc: number; } -export interface PmcConfig { - dynamicLoot: PmcDynamicLoot; - difficulty: string; - looseWeaponInBackpackChancePercent: number; - looseWeaponInBackpackLootMinMax: MinMax; - isUsec: number; - chanceSameSideIsHostilePercent: number; - usecType: string; - bearType: string; - maxBackpackLootTotalRub: number; - maxPocketLootTotalRub: number; - maxVestLootTotalRub: number; - convertIntoPmcChance: Record; - enemyTypes: string[]; -} -export interface PmcDynamicLoot { - whitelist: string[]; - blacklist: string[]; - moneyStackLimits: Record; -} -export interface Equipment { +export interface EquipmentFilters { + weaponModLimits: ModLimits; + randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; blacklist: EquipmentFilterDetails[]; whitelist: EquipmentFilterDetails[]; } +export interface ModLimits { + /** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */ + scopeLimit?: number; + /** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */ + lightLaserLimit?: number; +} export interface EquipmentFilterDetails { levelRange: MinMax; equipment: Record; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IBotDurability.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IBotDurability.d.ts new file mode 100644 index 0000000..38a47cc --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IBotDurability.d.ts @@ -0,0 +1,47 @@ +export interface IBotDurability { + default: DefaultDurability; + pmc: PmcDurability; + boss: BotDurability; + follower: BotDurability; + assault: BotDurability; + cursedassault: BotDurability; + marksman: BotDurability; + pmcbot: BotDurability; + exusec: BotDurability; + gifter: BotDurability; + sectantpriest: BotDurability; + sectantwarrior: BotDurability; +} +/** Durability values to be used when a more specific bot type cant be found */ +export interface DefaultDurability { + armor: DefaultArmor; + weapon: WeaponDurability; +} +export interface DefaultArmor { + maxDelta: number; + minDelta: number; +} +export interface WeaponDurability { + lowestMax: number; + highestMax: number; + maxDelta: number; + minDelta: number; +} +export interface PmcDurability { + armor: PmcDurabilityArmor; + weapon: WeaponDurability; +} +export interface PmcDurabilityArmor { + lowestMaxPercent: number; + highestMaxPercent: number; + maxDelta: number; + minDelta: number; +} +export interface BotDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface ArmorDurability { + maxDelta: number; + minDelta: number; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IHideoutConfig.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IHideoutConfig.d.ts index 36d6246..f232052 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IHideoutConfig.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IHideoutConfig.d.ts @@ -2,6 +2,10 @@ import { IBaseConfig } from "./IBaseConfig"; export interface IHideoutConfig extends IBaseConfig { kind: "aki-hideout"; runIntervalSeconds: number; - fuelDrainRateMultipler: number; hoursForSkillCrafting: number; + generatorSpeedWithoutFuel: number; + generatorFuelFlowRate: number; + airFilterUnitFlowRate: number; + /** SEE HIDEOUTHELPER BEFORE CHANGING CONFIG */ + gpuBoostRate: number; } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IItemConfig.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IItemConfig.d.ts new file mode 100644 index 0000000..5ecccc2 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IItemConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IItemConfig extends IBaseConfig { + kind: "aki-item"; + blacklist: string[]; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IPmcConfig.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IPmcConfig.d.ts new file mode 100644 index 0000000..9db2ba1 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IPmcConfig.d.ts @@ -0,0 +1,26 @@ +import { MinMax } from "../../common/MinMax"; +export interface IPmcConfig { + dynamicLoot: DynamicLoot; + useDifficultyOverride: boolean; + difficulty: string; + looseWeaponInBackpackChancePercent: number; + looseWeaponInBackpackLootMinMax: MinMax; + isUsec: number; + chanceSameSideIsHostilePercent: number; + /** key: location, value: type for usec/bear */ + pmcType: Record; + maxBackpackLootTotalRub: number; + maxPocketLootTotalRub: number; + maxVestLootTotalRub: number; + convertIntoPmcChance: Record; + enemyTypes: string[]; +} +export interface PmcTypes { + usec: string; + bear: string; +} +export interface DynamicLoot { + whitelist: string[]; + blacklist: string[]; + moneyStackLimits: Record; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IQuestConfig.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IQuestConfig.d.ts index be4a97b..45c9aae 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IQuestConfig.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IQuestConfig.d.ts @@ -4,6 +4,8 @@ export interface IQuestConfig extends IBaseConfig { kind: "aki-quest"; redeemTime: number; repeatableQuests: IRepeatableQuestConfig[]; + bearOnlyQuests: string[]; + usecOnlyQuests: string[]; } export interface IRepeatableQuestConfig { name: string; @@ -15,6 +17,10 @@ export interface IRepeatableQuestConfig { locations: Record; traderWhitelist: ITraderWhitelist[]; questConfig: IQuestConfig; + /** Item base types to block when generating rewards */ + rewardBaseTypeBlacklist: string[]; + /** Item tplIds to ignore when generating rewards */ + rewardBlacklist: string[]; } export interface IRewardScaling { levels: number[]; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IRagfairConfig.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IRagfairConfig.d.ts index c24e617..c1b8763 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IRagfairConfig.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/IRagfairConfig.d.ts @@ -12,6 +12,7 @@ export interface Sell { chance: Chance; time: Time; reputation: Reputation; + simulatedSellHours: number; } export interface Chance { base: number; @@ -27,11 +28,18 @@ export interface Reputation { gain: number; loss: number; } +export declare class OfferAdjustment { + maxPriceDifferenceBelowHandbookPercent: number; + handbookPriceMultipier: number; + priceThreshholdRub: number; +} export interface Dynamic { + offerAdjustment: OfferAdjustment; expiredOfferThreshold: number; offerItemCount: MinMax; price: MinMax; presetPrice: MinMax; + showDefaultPresetsOnly: boolean; endTimeSeconds: MinMax; condition: Condition; stackablePercent: MinMax; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/ITraderConfig.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/ITraderConfig.d.ts index c8e8044..6b1c1e3 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/config/ITraderConfig.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/config/ITraderConfig.d.ts @@ -12,8 +12,10 @@ export interface UpdateTime { seconds: number; } export interface FenceConfig { + partialRefreshTimeSeconds: number; + partialRefreshChangePercent: number; assortSize: number; - maxPresetsCount: number; + maxPresetsPercent: number; presetPriceMult: number; blacklist: string[]; } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/helpers/Traders.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/helpers/Traders.d.ts deleted file mode 100644 index e935d29..0000000 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/helpers/Traders.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare const enum Traders { - PRAPOR = "54cb50c76803fa8b248b4571", - THERAPIST = "54cb57776803fa99248b456e", - FENCE = "579dc571d53a0658a154fbec", - SKIER = "58330581ace78e27b8b10cee", - PEACEKEEPER = "5935c25fb3acc3127c3d8cd9", - MECHANIC = "5a7c2eca46aef81a7ca2145d", - RAGMAN = "5ac3b934156ae10c4430e83c", - JAEGER = "5c0647fdd443bc2504c2d371" -} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/location/AirDropLootItem.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/location/AirDropLootItem.d.ts new file mode 100644 index 0000000..da791ff --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/location/AirDropLootItem.d.ts @@ -0,0 +1,6 @@ +export declare class AirDropLootItem { + id: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/logging/LogBackgroundColor.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/logging/LogBackgroundColor.d.ts index 87e08a9..1dd369b 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/logging/LogBackgroundColor.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/logging/LogBackgroundColor.d.ts @@ -1,11 +1,11 @@ export declare enum LogBackgroundColor { - default = "", - black = "blackBG", - red = "redBG", - green = "greenBG", - yellow = "yellowBG", - blue = "blueBG", - magenta = "magentaBG", - cyan = "cyanBG", - white = "whiteBG" + DEFAULT = "", + BLACK = "blackBG", + RED = "redBG", + GREEN = "greenBG", + YELLOW = "yellowBG", + BLUE = "blueBG", + MAGENTA = "magentaBG", + CYAN = "cyanBG", + WHITE = "whiteBG" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/logging/LogTextColor.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/logging/LogTextColor.d.ts index 7147ae3..6c7abf3 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/logging/LogTextColor.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/logging/LogTextColor.d.ts @@ -1,11 +1,11 @@ export declare enum LogTextColor { - black = "black", - red = "red", - green = "green", - yellow = "yellow", - blue = "blue", - magenta = "magenta", - cyan = "cyan", - white = "white", - gray = "" + BLACK = "black", + RED = "red", + GREEN = "green", + YELLOW = "yellow", + BLUE = "blue", + MAGENTA = "magenta", + CYAN = "cyan", + WHITE = "white", + GRAY = "" } diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/server/ILocaleBase.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/server/ILocaleBase.d.ts index 8887c06..6e20b89 100644 --- a/Faupi-HideoutArchitect/server/dist/types/models/spt/server/ILocaleBase.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/server/ILocaleBase.d.ts @@ -13,10 +13,10 @@ export interface ILocaleGlobalBase { season: Record; customization: Record; repeatableQuest: Record; - templates: ILocaleTemplateBase; - locations: ILocaleLocationsBase; - banners: ILocaleBannersBase; - trading: ILocaleTradingBase; + templates: Record; + locations: Record; + banners: Record; + trading: Record; } export interface ILocaleQuest { name: string; @@ -31,23 +31,11 @@ export interface ILocaleQuest { export interface ILocalePreset { Name: string; } -export interface ILocaleTemplateBase { - templates: Record; -} -export interface ILocaleLocationsBase { - locations: Record; -} -export interface ILocaleBannersBase { - locations: Record; -} export interface ILocaleProps { Name: string; ShortName: string; Description: string; } -export interface ILocaleTradingBase { - locations: Record; -} export interface ILocaleTradingProps { FullName: string; FirstName: string; diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/services/LootItem.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/services/LootItem.d.ts new file mode 100644 index 0000000..acb7606 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/services/LootItem.d.ts @@ -0,0 +1,6 @@ +export declare class LootItem { + id?: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/models/spt/services/LootRequest.d.ts b/Faupi-HideoutArchitect/server/dist/types/models/spt/services/LootRequest.d.ts new file mode 100644 index 0000000..1da8770 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/models/spt/services/LootRequest.d.ts @@ -0,0 +1,11 @@ +import { MinMax } from "../../common/MinMax"; +export declare class LootRequest { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/servers/DatabaseServer.d.ts b/Faupi-HideoutArchitect/server/dist/types/servers/DatabaseServer.d.ts index aa152d0..b3d29e9 100644 --- a/Faupi-HideoutArchitect/server/dist/types/servers/DatabaseServer.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/servers/DatabaseServer.d.ts @@ -2,5 +2,5 @@ import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; export declare class DatabaseServer { protected tableData: IDatabaseTables; getTables(): IDatabaseTables; - setTables(any: any): void; + setTables(tableData: IDatabaseTables): void; } diff --git a/Faupi-HideoutArchitect/server/dist/types/servers/RagfairServer.d.ts b/Faupi-HideoutArchitect/server/dist/types/servers/RagfairServer.d.ts index bc86cdb..c93864b 100644 --- a/Faupi-HideoutArchitect/server/dist/types/servers/RagfairServer.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/servers/RagfairServer.d.ts @@ -1,4 +1,6 @@ import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { TraderAssortHelper } from "../helpers/TraderAssortHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; @@ -12,11 +14,18 @@ export declare class RagfairServer { protected ragfairOfferService: RagfairOfferService; protected ragfairCategoriesService: RagfairCategoriesService; protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected traderHelper: TraderHelper; + protected traderAssortHelper: TraderAssortHelper; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; - constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, configServer: ConfigServer); + constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, traderHelper: TraderHelper, traderAssortHelper: TraderAssortHelper, configServer: ConfigServer); load(): void; update(): void; + /** + * Get traders who need to be periodically refreshed + * @returns string array of traders + */ + protected getUpdateableTraders(): string[]; getAllCategories(): Record; getBespokeCategories(offers: IRagfairOffer[]): Record; /** diff --git a/Faupi-HideoutArchitect/server/dist/types/services/BotEquipmentFilterService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/BotEquipmentFilterService.d.ts index e49645b..632f961 100644 --- a/Faupi-HideoutArchitect/server/dist/types/services/BotEquipmentFilterService.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/services/BotEquipmentFilterService.d.ts @@ -1,12 +1,12 @@ import { IBotType } from "../models/eft/common/tables/IBotType"; -import { Equipment, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; +import { EquipmentFilters, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; export declare class BotEquipmentFilterService { protected logger: ILogger; protected configServer: ConfigServer; protected botConfig: IBotConfig; - protected botEquipmentFilterlists: Record; + protected botEquipmentFilterlists: Record; constructor(logger: ILogger, configServer: ConfigServer); /** * Filter a bots data to exclude equipment and cartridges defines in the botConfig @@ -22,7 +22,7 @@ export declare class BotEquipmentFilterService { * @param playerLevel Level of the player * @returns EquipmentBlacklistDetails object */ - protected getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; + getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; /** * Get the whitelist for a specific bot type that's within the players level * @param botRole Bot type diff --git a/Faupi-HideoutArchitect/server/dist/types/services/BotGenerationCacheService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..670c583 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,52 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected botHelper: BotHelper; + protected storedBots: IBotBase[]; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore + */ + storeBots(botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param role role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(role: string): IBotBase[]; + /** + * Find a bot by its index from cache + * @param indexOfBotToReturn index to find bot by + * @returns bot profile + */ + protected getBotFromCache(indexOfBotToReturn: number): IBotBase; + /** + * Remove bot profile by index from cache + * @param indexOfBotToReturn Index of bot profile to remove + */ + protected removeBotFromCache(indexOfBotToReturn: number): void; + /** + * Get index of bot profile that matches criteria + * @param role role of bot we want + * @param getPmc is requested bot a pmc + * @returns index of found bot + */ + protected getIndexOfBotToReturn(role: string, getPmc: boolean): number; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have bots + * @returns true if empty + */ + cacheIsEmpty(): boolean; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/services/BotLootCacheService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/BotLootCacheService.d.ts index cc71eee..00ffb9c 100644 --- a/Faupi-HideoutArchitect/server/dist/types/services/BotLootCacheService.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/services/BotLootCacheService.d.ts @@ -34,6 +34,17 @@ export declare class BotLootCacheService { * @param isPmc Is the bot a PMC (alteres what loot is cached) */ protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; /** * Ammo/grenades have this property * @param props diff --git a/Faupi-HideoutArchitect/server/dist/types/services/FenceService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/FenceService.d.ts index 79058c6..23fbf52 100644 --- a/Faupi-HideoutArchitect/server/dist/types/services/FenceService.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/services/FenceService.d.ts @@ -11,29 +11,109 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { ItemFilterService } from "./ItemFilterService"; +/** + * Handle actions surrounding Fence + * e.g. generating or refreshing assorts / get next refresh time + */ export declare class FenceService { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; protected randomUtil: RandomUtil; protected databaseServer: DatabaseServer; protected handbookHelper: HandbookHelper; protected itemHelper: ItemHelper; protected presetHelper: PresetHelper; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected fenceAssort: ITraderAssort; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, configServer: ConfigServer); + protected nextMiniRefreshTimestamp: number; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, itemFilterService: ItemFilterService, configServer: ConfigServer); protected setFenceAssort(fenceAssort: ITraderAssort): void; - getFenceAssorts(): ITraderAssort; - hasExpiredCache(refreshAssort: boolean): boolean; - generateFenceAssortCache(pmcData: IPmcData): void; /** - * Get the fence level the passed in profile has + * Get assorts player can purchase + * Adjust prices based on fence level of player + * @param pmcProfile Player profile + * @returns ITraderAssort + */ + getFenceAssorts(pmcProfile: IPmcData): ITraderAssort; + /** + * Get fence assorts with no price adjustments based on fence rep + * @returns ITraderAssort + */ + getRawFenceAssorts(): ITraderAssort; + /** + * Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json + * @returns true if it needs a partial refresh + */ + needsPartialRefresh(): boolean; + /** + * Replace a percentage of fence assorts with freshly generated items + */ + performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; + /** + * Choose an item (not mod) at random and remove from assorts + */ + protected removeRandomItemFromAssorts(): void; + /** + * Get an integer rounded count of items to replace based on percentrage from traderConfig value + * @param totalItemCount total item count + * @returns rounded int of items to replace + */ + protected getCountOfItemsToReplace(totalItemCount: number): number; + /** + * Get the count of items fence offers + * @returns number + */ + getOfferCount(): number; + /** + * Create a trader assort for fence + */ + generateFenceAssortCache(): void; + /** + * Create skeleton to hold assort items + * @returns ITraderAssort object + */ + protected createBaseTraderAssortItem(): ITraderAssort; + /** + * Hydrate result parameter object with generated assorts + * @param assortCount Number of assorts to generate + * @param assorts object to add assorts to + */ + protected createAssorts(assortCount: number, assorts: ITraderAssort): void; + /** + * Get the next update timestamp for fence + * @returns future timestamp + */ + getNextFenceUpdateTimestamp(): number; + /** + * Get fence refresh time in seconds + */ + protected getFenceRefreshTime(): number; + /** + * Get fence level the passed in profile has * @param pmcData Player profile - * @returns FenceLevel + * @returns FenceLevel object */ getFenceInfo(pmcData: IPmcData): FenceLevel; + /** + * Remove an assort from fence by id + * @param assortIdToRemove assort id to remove from fence assorts + */ removeFenceOffer(assortIdToRemove: string): void; - updateFenceOffers(pmcData: IPmcData): void; } diff --git a/Faupi-HideoutArchitect/server/dist/types/services/InsuranceService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/InsuranceService.d.ts index 171bf10..6be8a2f 100644 --- a/Faupi-HideoutArchitect/server/dist/types/services/InsuranceService.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/services/InsuranceService.d.ts @@ -2,6 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper"; import { SecureContainerHelper } from "../helpers/SecureContainerHelper"; import { TraderHelper } from "../helpers/TraderHelper"; import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; import { Item } from "../models/eft/common/tables/IItem"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; @@ -44,8 +45,22 @@ export declare class InsuranceService { * @param mapId Id of the map player died/exited that caused the insurance to be issued on */ sendInsuredItems(pmcData: IPmcData, sessionID: string, mapId: string): void; + /** + * Store lost gear post-raid inside profile + * @param pmcData player profile to store gear in + * @param offraidData post-raid request object + * @param preRaidGear gear player wore prior to raid + * @param sessionID Session id + */ storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; - protected addGearToSend(pmcData: IPmcData, insuredItem: any, actualItem: any, sessionID: string): any; + /** + * Add gear item to InsuredItems array in player profile + * @param pmcData profile to store item in + * @param insuredItem Item to store in profile + * @param actualItem item to store + * @param sessionID Session id + */ + protected addGearToSend(pmcData: IPmcData, insuredItem: InsuredItem, actualItem: Item, sessionID: string): void; getPremium(pmcData: IPmcData, inventoryItem: Item, traderId: string): number; } diff --git a/Faupi-HideoutArchitect/server/dist/types/services/ItemFilterService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/ItemFilterService.d.ts new file mode 100644 index 0000000..c9c8ef3 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/services/ItemFilterService.d.ts @@ -0,0 +1,24 @@ +import { IItemConfig } from "../models/spt/config/IItemConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** Centralise the handling of blacklisting items, uses blacklist found in config/item.json */ +export declare class ItemFilterService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected blacklist: string[]; + protected itemConfig: IItemConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Check if the provided template id is blacklisted in config/item.json + * @param tpl template id + * @returns true if blacklisted + */ + isItemBlacklisted(tpl: string): boolean; + /** + * Return every template id blacklisted in config/item.json + * @returns string array of blacklisted tempalte ids + */ + getBlacklistedItems(): string[]; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/services/PmcAiService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/PmcAiService.d.ts new file mode 100644 index 0000000..0690f1f --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/services/PmcAiService.d.ts @@ -0,0 +1,27 @@ +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +/** Storing/retreving pmcRoles set at the start of a raid - its done at that point as we know what location the player is heading to */ +export declare class PmcAiService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected usecRole: string; + protected bearRole: string; + constructor(logger: ILogger, configServer: ConfigServer); + /** + * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) + * @param pmcSide eft side (usec/bear) + * @returns pmc side as defined in config + */ + getPmcRole(pmcSide: "usec" | "bear" | string): string; + /** + * Set the roles for pmcs + * @param location map location to look up and use as pmc types + */ + setPmcRolesByLocation(location: string): void; + /** + * Clear the saved role from usec/bear PMCs + */ + clearPmcRoles(): void; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/services/ProfileFixerService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/ProfileFixerService.d.ts index ed1dec7..9cb5a38 100644 --- a/Faupi-HideoutArchitect/server/dist/types/services/ProfileFixerService.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/services/ProfileFixerService.d.ts @@ -45,6 +45,11 @@ export declare class ProfileFixerService { * @param pmcProfile Profile to find and remove slots from */ protected removeResourcesFromSlotsInHideoutWithoutLocationIndexValue(pmcProfile: IPmcData): void; + /** + * Hideout slots need to be in a specific order, locationIndex in ascending order + * @param pmcProfile profile to edit + */ + protected reorderHideoutAreasWithResouceInputs(pmcProfile: IPmcData): void; /** * add in objects equal to the number of slots * @param areaType area to check diff --git a/Faupi-HideoutArchitect/server/dist/types/services/ProfileSnapshotService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/ProfileSnapshotService.d.ts new file mode 100644 index 0000000..445ffd0 --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/services/ProfileSnapshotService.d.ts @@ -0,0 +1,30 @@ +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class ProfileSnapshotService { + protected jsonUtil: JsonUtil; + protected storedProfileSnapshots: Record; + constructor(jsonUtil: JsonUtil); + /** + * Store a profile into an in-memory object + * @param sessionID session id - acts as the key + * @param profile - profile to save + */ + storeProfileSnapshot(sessionID: string, profile: IAkiProfile): void; + /** + * Retreve a stored profile + * @param sessionID key + * @returns A player profile object + */ + getProfileSnapshot(sessionID: string): IAkiProfile; + /** + * Does a profile exists against the provided key + * @param sessionID key + * @returns true if exists + */ + hasProfileSnapshot(sessionID: string): boolean; + /** + * Remove a stored profile by key + * @param sessionID key + */ + clearProfileSnapshot(sessionID: string): void; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/services/RagfairOfferService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/RagfairOfferService.d.ts index 7398a8f..f9e3a34 100644 --- a/Faupi-HideoutArchitect/server/dist/types/services/RagfairOfferService.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/services/RagfairOfferService.d.ts @@ -24,7 +24,6 @@ export declare class RagfairOfferService { protected httpResponse: HttpResponseUtil; protected configServer: ConfigServer; protected playerOffersLoaded: boolean; - protected toUpdate: Record; protected expiredOffers: Item[]; protected offers: IRagfairOffer[]; protected ragfairConfig: IRagfairConfig; @@ -38,8 +37,6 @@ export declare class RagfairOfferService { getOffersOfType(templateId: string): IRagfairOffer[]; addOffer(offer: IRagfairOffer): void; addOfferToExpired(staleOffer: IRagfairOffer): void; - setTraderUpdateStatus(traderId: string, shouldUpdate: boolean): void; - shouldTraderBeUpdated(traderID: string): boolean; getExpiredOfferCount(): number; /** * Get an array of expired items not yet processed into new offers @@ -53,12 +50,15 @@ export declare class RagfairOfferService { * @returns offer exists - true */ doesOfferExist(offerId: string): boolean; - getTraders(): Record; - flagTraderForUpdate(expiredOfferUserId: string): void; removeOfferById(offerId: string): void; removeOfferStack(offerID: string, amount: number): void; removeAllOffersByTrader(traderId: string): void; - addTradersToUpdateList(): void; + /** + * Do the trader offers on flea need to be refreshed + * @param traderID Trader to check + * @returns true if they do + */ + traderOffersNeedRefreshing(traderID: string): boolean; addPlayerOffers(): void; expireStaleOffers(): void; /** diff --git a/Faupi-HideoutArchitect/server/dist/types/services/RagfairPriceService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/RagfairPriceService.d.ts index 679fe1d..466c9e3 100644 --- a/Faupi-HideoutArchitect/server/dist/types/services/RagfairPriceService.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/services/RagfairPriceService.d.ts @@ -27,6 +27,20 @@ export declare class RagfairPriceService { getDynamicPrice(itemTpl: string): number; getAllFleaPrices(): Record; getFleaPriceForItem(tplId: string): number; + /** + * Check to see if an items price is below its handbook price and adjust accoring to values set to config/ragfair.json + * @param itemPrice price of item + * @param itemTpl item template Id being checked + * @returns adjusted price value in roubles + */ + protected adjustPriceIfBelowHandbook(itemPrice: number, itemTpl: string): number; + /** + * Get the percentage difference between two values + * @param a numerical value a + * @param b numerical value b + * @returns different in percent + */ + protected getPriceDifference(a: number, b: number): number; getStaticPriceForItem(tplId: string): number; getBarterPrice(barterScheme: IBarterScheme[]): number; getDynamicOfferPrice(items: Item[], desiredCurrency: string): number; diff --git a/Faupi-HideoutArchitect/server/dist/types/services/RepairService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/RepairService.d.ts new file mode 100644 index 0000000..3e6077c --- /dev/null +++ b/Faupi-HideoutArchitect/server/dist/types/services/RepairService.d.ts @@ -0,0 +1,75 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected itemEventRouter: ItemEventRouter; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + repairConfig: IRepairConfig; + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + * @param output IItemEventRouterResponse + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData, output: IItemEventRouterResponse): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; +} diff --git a/Faupi-HideoutArchitect/server/dist/types/services/TraderAssortService.d.ts b/Faupi-HideoutArchitect/server/dist/types/services/TraderAssortService.d.ts index 5ba2d05..03b4e12 100644 --- a/Faupi-HideoutArchitect/server/dist/types/services/TraderAssortService.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/services/TraderAssortService.d.ts @@ -2,5 +2,10 @@ import { ITraderAssort } from "../models/eft/common/tables/ITrader"; export declare class TraderAssortService { protected pristineTraderAssorts: Record; getPristineTraderAssort(traderId: string): ITraderAssort; + /** + * Store trader assorts inside a class property + * @param traderId Traderid to store assorts against + * @param assort Assorts to store + */ setPristineTraderAssort(traderId: string, assort: ITraderAssort): void; } diff --git a/Faupi-HideoutArchitect/server/dist/types/utils/HashUtil.d.ts b/Faupi-HideoutArchitect/server/dist/types/utils/HashUtil.d.ts index bacbf2a..a8500e1 100644 --- a/Faupi-HideoutArchitect/server/dist/types/utils/HashUtil.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/utils/HashUtil.d.ts @@ -4,8 +4,18 @@ import { TimeUtil } from "./TimeUtil"; export declare class HashUtil { protected timeUtil: TimeUtil; constructor(timeUtil: TimeUtil); + /** + * Create a 24 character id using the sha256 algorithm + current timestamp + * @returns 24 character hash + */ generate(): string; generateMd5ForData(data: string): string; generateSha1ForData(data: string): string; + /** + * Create a hash for the data parameter + * @param algorithm algorithm to use to hash + * @param data data to be hashed + * @returns hash value + */ generateHashForData(algorithm: string, data: crypto.BinaryLike): string; } diff --git a/Faupi-HideoutArchitect/server/dist/types/utils/RandomUtil.d.ts b/Faupi-HideoutArchitect/server/dist/types/utils/RandomUtil.d.ts index c24dd60..633e472 100644 --- a/Faupi-HideoutArchitect/server/dist/types/utils/RandomUtil.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/utils/RandomUtil.d.ts @@ -136,7 +136,7 @@ export declare class RandomUtil { * Drawing can be with or without replacement * @param {array} list The array we want to draw randomly from * @param {integer} count The number of times we want to draw - * @param {boolean} replacement Draw with ot without replacement from the input array + * @param {boolean} replacement Draw with or without replacement from the input array * @return {array} Array consisting of N random elements */ drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; @@ -150,4 +150,10 @@ export declare class RandomUtil { */ drawRandomFromDict(dict: any, count?: number, replacement?: boolean): any[]; getBiasedRandomNumber(min: number, max: number, shift: number, n: number): number; + /** + * Fisher-Yates shuffle an array + * @param array Array to shuffle + * @returns Shuffled array + */ + shuffle(array: Array): Array; } diff --git a/Faupi-HideoutArchitect/server/dist/types/utils/TimeUtil.d.ts b/Faupi-HideoutArchitect/server/dist/types/utils/TimeUtil.d.ts index eed4e6d..1367e26 100644 --- a/Faupi-HideoutArchitect/server/dist/types/utils/TimeUtil.d.ts +++ b/Faupi-HideoutArchitect/server/dist/types/utils/TimeUtil.d.ts @@ -1,9 +1,16 @@ +/** + * Utility class to handle time related problems + */ export declare class TimeUtil { static readonly oneHourAsSeconds = 3600; formatTime(date: Date): string; formatDate(date: Date): string; getDate(): string; getTime(): string; + /** + * Get timestamp in seconds + * @returns + */ getTimestamp(): number; /** * mail in eft requires time be in a specific format @@ -15,4 +22,10 @@ export declare class TimeUtil { * @returns current date in format: 00.00.0000 (dd.mm.yyyy) */ getDateMailFormat(): string; + /** + * Convert hours into seconds + * @param hours hours to convert to seconds + * @returns number + */ + getHoursAsSeconds(hours: number): number; } diff --git a/Faupi-HideoutArchitect/server/package.json b/Faupi-HideoutArchitect/server/package.json index f2d0a58..70cefcc 100644 --- a/Faupi-HideoutArchitect/server/package.json +++ b/Faupi-HideoutArchitect/server/package.json @@ -1,10 +1,10 @@ { "name": "HideoutArchitect", - "version": "1.6.4", + "version": "1.6.5", "main": "./src/hideoutarchitect.js", "license": "NCSA Open Source", "author": "Faupi", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "updated by": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/Faupi-HideoutArchitect/server/types/Utils.d.ts b/Faupi-HideoutArchitect/server/types/Utils.d.ts deleted file mode 100644 index e69de29..0000000 diff --git a/Faupi-HideoutArchitect/server/types/callbacks/InsuranceCallbacks.d.ts b/Faupi-HideoutArchitect/server/types/callbacks/InsuranceCallbacks.d.ts index 6819960..8835ba2 100644 --- a/Faupi-HideoutArchitect/server/types/callbacks/InsuranceCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/types/callbacks/InsuranceCallbacks.d.ts @@ -1,5 +1,5 @@ import { InsuranceController } from "../controllers/InsuranceController"; -import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate"; +import { OnUpdate } from "../di/OnUpdate"; import { IPmcData } from "../models/eft/common/IPmcData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData"; @@ -10,14 +10,13 @@ import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { InsuranceService } from "../services/InsuranceService"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; -export declare class InsuranceCallbacks extends OnLoadOnUpdate { +export declare class InsuranceCallbacks extends OnUpdate { protected insuranceController: InsuranceController; protected insuranceService: InsuranceService; protected httpResponse: HttpResponseUtil; protected configServer: ConfigServer; protected insuranceConfig: IInsuranceConfig; constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer); - onLoad(): void; getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData; insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; onUpdate(secondsSinceLastRun: number): boolean; diff --git a/Faupi-HideoutArchitect/server/types/callbacks/LocationCallbacks.d.ts b/Faupi-HideoutArchitect/server/types/callbacks/LocationCallbacks.d.ts index cc69369..6e0b538 100644 --- a/Faupi-HideoutArchitect/server/types/callbacks/LocationCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/types/callbacks/LocationCallbacks.d.ts @@ -11,4 +11,5 @@ export declare class LocationCallbacks { constructor(httpResponse: HttpResponseUtil, locationController: LocationController); getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; + getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string; } diff --git a/Faupi-HideoutArchitect/server/types/callbacks/ProfileCallbacks.d.ts b/Faupi-HideoutArchitect/server/types/callbacks/ProfileCallbacks.d.ts index 6a86fc0..183bb0a 100644 --- a/Faupi-HideoutArchitect/server/types/callbacks/ProfileCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/types/callbacks/ProfileCallbacks.d.ts @@ -1,5 +1,6 @@ import { ProfileController } from "../controllers/ProfileController"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData"; @@ -12,20 +13,51 @@ import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendRespon import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { TimeUtil } from "../utils/TimeUtil"; +/** Handle profile related client events */ export declare class ProfileCallbacks { protected httpResponse: HttpResponseUtil; protected timeUtil: TimeUtil; protected profileController: ProfileController; constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController); createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; - getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Get the complete player profile (scav + pmc character) + * @param url + * @param info Empty + * @param sessionID Session id + * @returns Profile object + */ + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle the creation of a scav profile for player + * Occurs post-raid and when profile first created immediately after character details are confirmed by player + * @param url + * @param info empty + * @param sessionID Session id + * @returns Profile object + */ + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/voice/change event + * @param url + * @param info Change voice request object + * @param sessionID Session id + * @returns Client response + */ changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/profile/nickname/change event + * Client allows player to adjust their profile name + * @param url + * @param info Change nickname request object + * @param sessionID Session id + * @returns client response + */ changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; /** - * Called when creating a character, when you choose a character face/voice + * Called when creating a character when choosing a character face/voice * @param url * @param info response (empty) * @param sessionID diff --git a/Faupi-HideoutArchitect/server/types/callbacks/RagfairCallbacks.d.ts b/Faupi-HideoutArchitect/server/types/callbacks/RagfairCallbacks.d.ts index 3a405c9..c609f2f 100644 --- a/Faupi-HideoutArchitect/server/types/callbacks/RagfairCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/types/callbacks/RagfairCallbacks.d.ts @@ -19,6 +19,9 @@ import { ConfigServer } from "../servers/ConfigServer"; import { RagfairServer } from "../servers/RagfairServer"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { JsonUtil } from "../utils/JsonUtil"; +/** + * Handle ragfair related callback events + */ export declare class RagfairCallbacks extends OnLoadOnUpdate { protected httpResponse: HttpResponseUtil; protected logger: ILogger; diff --git a/Faupi-HideoutArchitect/server/types/callbacks/RepairCallbacks.d.ts b/Faupi-HideoutArchitect/server/types/callbacks/RepairCallbacks.d.ts index 63733fa..14edeeb 100644 --- a/Faupi-HideoutArchitect/server/types/callbacks/RepairCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/types/callbacks/RepairCallbacks.d.ts @@ -6,6 +6,20 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa export declare class RepairCallbacks { protected repairController: RepairController; constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; } diff --git a/Faupi-HideoutArchitect/server/types/callbacks/TraderCallbacks.d.ts b/Faupi-HideoutArchitect/server/types/callbacks/TraderCallbacks.d.ts index 128d9b2..e4fd099 100644 --- a/Faupi-HideoutArchitect/server/types/callbacks/TraderCallbacks.d.ts +++ b/Faupi-HideoutArchitect/server/types/callbacks/TraderCallbacks.d.ts @@ -9,10 +9,10 @@ export declare class TraderCallbacks extends OnLoadOnUpdate { protected traderController: TraderController; constructor(httpResponse: HttpResponseUtil, traderController: TraderController); onLoad(): void; + onUpdate(): boolean; getRoute(): string; getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - onUpdate(): boolean; } diff --git a/Faupi-HideoutArchitect/server/types/context/ContextVariable.d.ts b/Faupi-HideoutArchitect/server/types/context/ContextVariable.d.ts index e438947..0fe0a63 100644 --- a/Faupi-HideoutArchitect/server/types/context/ContextVariable.d.ts +++ b/Faupi-HideoutArchitect/server/types/context/ContextVariable.d.ts @@ -4,7 +4,7 @@ export declare class ContextVariable { private timestamp; private type; constructor(value: any, type: ContextVariableType); - getValue(): any; + getValue(): T; getTimestamp(): Date; getType(): ContextVariableType; } diff --git a/Faupi-HideoutArchitect/server/types/controllers/BotController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/BotController.d.ts index 5e6f05d..a5111d5 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/BotController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/BotController.d.ts @@ -1,3 +1,4 @@ +import { ApplicationContext } from "../context/ApplicationContext"; import { BotGenerator } from "../generators/BotGenerator"; import { BotHelper } from "../helpers/BotHelper"; import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; @@ -5,15 +6,22 @@ import { IBotBase } from "../models/eft/common/tables/IBotBase"; import { IBotCore } from "../models/eft/common/tables/IBotCore"; import { Difficulty } from "../models/eft/common/tables/IBotType"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { PmcAiService } from "../services/PmcAiService"; export declare class BotController { + protected logger: ILogger; protected databaseServer: DatabaseServer; protected botGenerator: BotGenerator; protected botHelper: BotHelper; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; protected botConfig: IBotConfig; - constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); /** * Return the number of bot loadout varieties to be generated * @param type bot Type we want the loadout gen count for @@ -29,7 +37,18 @@ export declare class BotController { * @returns Difficulty object */ getBotDifficulty(type: string, difficulty: string): Difficulty; - protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty; + protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ getBotCap(): number; } diff --git a/Faupi-HideoutArchitect/server/types/controllers/GameController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/GameController.d.ts index 85ec418..2d00898 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/GameController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/GameController.d.ts @@ -7,11 +7,13 @@ import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { IHttpConfig } from "../models/spt/config/IHttpConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { LocaleService } from "../services/LocaleService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { Watermark } from "../utils/Watermark"; export declare class GameController { protected logger: ILogger; + protected databaseServer: DatabaseServer; protected watermark: Watermark; protected httpServerHelper: HttpServerHelper; protected localeService: LocaleService; @@ -20,9 +22,14 @@ export declare class GameController { protected configServer: ConfigServer; protected httpConfig: IHttpConfig; protected coreConfig: ICoreConfig; - constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; protected logProfileDetails(fullProfile: IAkiProfile): void; getGameConfig(sessionID: string): IGameConfigResponse; getServer(): any[]; + getValidGameVersion(): any; } diff --git a/Faupi-HideoutArchitect/server/types/controllers/HideoutController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/HideoutController.d.ts index 3eefe1a..dcd8894 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/HideoutController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/HideoutController.d.ts @@ -28,6 +28,7 @@ import { HashUtil } from "../utils/HashUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; +import { JsonUtil } from "../utils/JsonUtil"; export declare class HideoutController { protected logger: ILogger; protected hashUtil: HashUtil; @@ -45,9 +46,10 @@ export declare class HideoutController { protected hideoutHelper: HideoutHelper; protected scavCaseRewardGenerator: ScavCaseRewardGenerator; protected configServer: ConfigServer; + protected jsonUtil: JsonUtil; protected static nameBackendCountersCrafting: string; protected hideoutConfig: IHideoutConfig; - constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer, jsonUtil: JsonUtil); upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; /** diff --git a/Faupi-HideoutArchitect/server/types/controllers/InraidController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/InraidController.d.ts index b899e7d..102a2fb 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/InraidController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/InraidController.d.ts @@ -5,9 +5,11 @@ import { ItemHelper } from "../helpers/ItemHelper"; import { ProfileHelper } from "../helpers/ProfileHelper"; import { QuestHelper } from "../helpers/QuestHelper"; import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; @@ -15,6 +17,7 @@ import { InsuranceService } from "../services/InsuranceService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class InraidController { + protected logger: ILogger; protected saveServer: SaveServer; protected jsonUtil: JsonUtil; protected timeUtil: TimeUtil; @@ -29,16 +32,40 @@ export declare class InraidController { protected inRaidHelper: InRaidHelper; protected configServer: ConfigServer; protected inraidConfig: IInRaidConfig; - constructor(saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer); + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer); addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void; saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Handle updating the profile post-pmc raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePmcProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Reduce body part hp to % of max + * @param pmcData profile to edit + * @param multipler multipler to apply to max health + */ + protected reducePmcHealthToPercent(pmcData: IPmcData, multipler: number): void; + /** + * Handle updating the profile post-pscav raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Is the player dead after a raid - dead is anything other than "survived" / "runner" + * @param statusOnExit exit value from offraidData object + * @returns true if dead + */ + protected isPlayerDead(statusOnExit: string): boolean; /** * Mark inventory items as FiR if player survived raid, otherwise remove FiR from them * @param offraidData Save Progress Request * @param pmcData player profile * @param isPlayerScav Was the player a pScav */ - private markOrRemoveFoundInRaidItems; - private handlePostRaidPlayerScavProcess; - private handlePostRaidPlayerScavKarmaChanges; + protected markOrRemoveFoundInRaidItems(offraidData: ISaveProgressRequestData, pmcData: IPmcData, isPlayerScav: boolean): void; + protected handlePostRaidPlayerScavProcess(scavData: IPmcData, sessionID: string, offraidData: ISaveProgressRequestData, pmcData: IPmcData, isDead: boolean): void; + protected handlePostRaidPlayerScavKarmaChanges(pmcData: IPmcData, offraidData: ISaveProgressRequestData, scavData: IPmcData, sessionID: string): void; } diff --git a/Faupi-HideoutArchitect/server/types/controllers/InventoryController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/InventoryController.d.ts index f57f731..f564919 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/InventoryController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/InventoryController.d.ts @@ -92,7 +92,11 @@ export declare class InventoryController { */ toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse; /** - * Handles Tagging of items (primary Containers). + * Add a tag to an inventory item + * @param pmcData profile with item to add tag to + * @param body tag request data + * @param sessionID session id + * @returns client response object */ tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; diff --git a/Faupi-HideoutArchitect/server/types/controllers/LocationController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/LocationController.d.ts index 90b6d7a..9db3205 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/LocationController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/LocationController.d.ts @@ -1,18 +1,33 @@ import { LocationGenerator } from "../generators/LocationGenerator"; +import { LootGenerator } from "../generators/LootGenerator"; import { ILocationBase } from "../models/eft/common/ILocationBase"; import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { LootItem } from "../models/spt/services/LootItem"; import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class LocationController { protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; protected logger: ILogger; protected locationGenerator: LocationGenerator; + protected lootGenerator: LootGenerator; protected databaseServer: DatabaseServer; protected timeUtil: TimeUtil; - constructor(jsonUtil: JsonUtil, logger: ILogger, locationGenerator: LocationGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil); + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger, locationGenerator: LocationGenerator, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer); get(location: string): ILocationBase; generate(name: string): ILocationBase; generateAll(): ILocationsGenerateAllResponse; + /** + * Get loot for an airdop container + * Generates it randomly based on config/airdrop.json values + * @returns Array of LootItem + */ + getAirdropLoot(): LootItem[]; } diff --git a/Faupi-HideoutArchitect/server/types/controllers/MatchController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/MatchController.d.ts index 71cb7d3..07f6a89 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/MatchController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/MatchController.d.ts @@ -9,23 +9,33 @@ import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestDa import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; import { IMatchConfig } from "../models/spt/config/IMatchConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; import { BotLootCacheService } from "../services/BotLootCacheService"; import { MatchLocationService } from "../services/MatchLocationService"; +import { PmcAiService } from "../services/PmcAiService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; export declare class MatchController { + protected logger: ILogger; protected saveServer: SaveServer; protected profileHelper: ProfileHelper; protected matchLocationService: MatchLocationService; protected traderHelper: TraderHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; + protected profileSnapshotService: ProfileSnapshotService; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected applicationContext: ApplicationContext; protected matchConfig: IMatchConfig; protected inraidConfig: IInRaidConfig; - constructor(saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); + protected botConfig: IBotConfig; + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); getEnabled(): boolean; getProfile(info: IGetProfileRequestData): IPmcData[]; createGroup(sessionID: string, info: ICreateGroupRequestData): any; diff --git a/Faupi-HideoutArchitect/server/types/controllers/QuestController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/QuestController.d.ts index 2cbccfb..282f50e 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/QuestController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/QuestController.d.ts @@ -39,16 +39,31 @@ export declare class QuestController { * @returns array of IQuest */ getClientQuests(sessionID: string): IQuest[]; + /** + * Is the quest for the opposite side the player is on + * @param side player side (usec/bear) + * @param questId questId to check + */ + protected questIsForOtherSide(side: string, questId: string): boolean; + /** + * Handle the client accepting a quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update + * @param acceptedQuest Quest accepted + * @param sessionID Session id + * @returns client response + */ acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; /** - * Remove completed quest from profile + * Update completed quest in profile * Add newly unlocked quests to profile * Also recalculate thier level due to exp rewards * @param pmcData Player profile - * @param body completed quest request - * @param sessionID session id - * @returns ItemEvent response + * @param body Completed quest request + * @param sessionID Session id + * @returns ItemEvent client response */ completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; /** @@ -67,10 +82,20 @@ export declare class QuestController { protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]; /** * Fail the quests provided + * Update quest in profile, otherwise add fresh quest object with failed status * @param sessionID session id * @param pmcData player profile * @param questsToFail quests to fail */ protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void; handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment a backend counter stored value by an amount, + * Create counter if it does not exist + * @param pmcData Profile to find backend counter in + * @param conditionId backend counter id to update + * @param questId quest id counter is associated with + * @param counterValue value to increment the backend counter with + */ + protected updateProfileBackendCounterValue(pmcData: IPmcData, conditionId: string, questId: string, counterValue: number): void; } diff --git a/Faupi-HideoutArchitect/server/types/controllers/RagfairController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/RagfairController.d.ts index c4ffc15..06af740 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/RagfairController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/RagfairController.d.ts @@ -9,6 +9,7 @@ import { RagfairOfferHelper } from "../helpers/RagfairOfferHelper"; import { RagfairSellHelper } from "../helpers/RagfairSellHelper"; import { RagfairSortHelper } from "../helpers/RagfairSortHelper"; import { RagfairTaxHelper } from "../helpers/RagfairTaxHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; import { IPmcData } from "../models/eft/common/IPmcData"; import { Item } from "../models/eft/common/tables/IItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; @@ -33,6 +34,9 @@ import { RagfairPriceService } from "../services/RagfairPriceService"; import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { TimeUtil } from "../utils/TimeUtil"; +/** + * Handle RagfairCallback events + */ export declare class RagfairController { protected logger: ILogger; protected timeUtil: TimeUtil; @@ -52,14 +56,20 @@ export declare class RagfairController { protected handbookHelper: HandbookHelper; protected paymentHelper: PaymentHelper; protected inventoryHelper: InventoryHelper; + protected traderHelper: TraderHelper; protected ragfairHelper: RagfairHelper; protected ragfairOfferService: RagfairOfferService; protected ragfairRequiredItemsService: RagfairRequiredItemsService; protected ragfairOfferGenerator: RagfairOfferGenerator; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; - constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer); + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer); getOffers(sessionID: string, info: ISearchRequestData): IGetOffersResult; + /** + * Update a trader flea offer with buy restrictions stored in the traders assort + * @param offer flea offer to update + */ + protected setTraderOfferPurchaseLimits(offer: IRagfairOffer): void; protected isLinkedSearch(info: ISearchRequestData): boolean; protected isRequiredSearch(info: ISearchRequestData): boolean; update(): void; diff --git a/Faupi-HideoutArchitect/server/types/controllers/RepairController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/RepairController.d.ts index 0e78ef6..ae54a53 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/RepairController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/RepairController.d.ts @@ -8,9 +8,9 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa import { IRepairConfig } from "../models/spt/config/IRepairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; -import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; export declare class RepairController { protected logger: ILogger; protected itemEventRouter: ItemEventRouter; @@ -19,23 +19,23 @@ export declare class RepairController { protected traderHelper: TraderHelper; protected paymentService: PaymentService; protected repairHelper: RepairHelper; - protected configServer: ConfigServer; + protected repairService: RepairService; protected repairConfig: IRepairConfig; - constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); /** * Repair with trader - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; /** * Repair with repair kit - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; } diff --git a/Faupi-HideoutArchitect/server/types/controllers/RepeatableQuestController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/RepeatableQuestController.d.ts index 98d05dd..4c31a3d 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/RepeatableQuestController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/RepeatableQuestController.d.ts @@ -7,6 +7,7 @@ import { Exit } from "../models/eft/common/ILocationBase"; import { IPmcData } from "../models/eft/common/IPmcData"; import { TraderInfo } from "../models/eft/common/tables/IBotBase"; import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; import { ELocationName } from "../models/enums/ELocationName"; @@ -15,6 +16,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { PaymentService } from "../services/PaymentService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; @@ -64,9 +66,10 @@ export declare class RepeatableQuestController { protected itemEventRouter: ItemEventRouter; protected paymentService: PaymentService; protected objectId: ObjectId; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected questConfig: IQuestConfig; - constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, configServer: ConfigServer); + constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint * Returns an array of objects in the format of repeatable quests to the client. @@ -217,4 +220,16 @@ export declare class RepeatableQuestController { debugLogRepeatableQuestIds(pmcData: IPmcData): void; probabilityObjectArray(configArrayInput: ProbabilityObject[]): ProbabilityObjectArray; changeRepeatableQuest(pmcDataIn: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + /** + * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) + * @returns a list of rewardable items [[_tpl, itemTemplate],...] + */ + protected getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig): [string, ITemplateItem][]; + /** + * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward + * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. + * @param {*} tpl template id of item to check + * @returns boolean: true if item is valid reward + */ + isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean; } diff --git a/Faupi-HideoutArchitect/server/types/controllers/TraderController.d.ts b/Faupi-HideoutArchitect/server/types/controllers/TraderController.d.ts index 7bab158..b79f55e 100644 --- a/Faupi-HideoutArchitect/server/types/controllers/TraderController.d.ts +++ b/Faupi-HideoutArchitect/server/types/controllers/TraderController.d.ts @@ -4,6 +4,7 @@ import { TraderHelper } from "../helpers/TraderHelper"; import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; @@ -15,12 +16,29 @@ export declare class TraderController { protected traderHelper: TraderHelper; protected timeUtil: TimeUtil; protected traderAssortService: TraderAssortService; + protected fenceService: FenceService; protected jsonUtil: JsonUtil; - constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, jsonUtil: JsonUtil); + constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, fenceService: FenceService, jsonUtil: JsonUtil); + /** + * Runs when onLoad event is fired + * Iterate over traders, ensure an unmolested copy of their assorts is stored in traderAssortService + * Store timestamp of next assort refresh in nextResupply property of traders .base object + */ load(): void; - getTrader(traderID: string, sessionID: string): ITraderBase; + /** + * Runs when onUpdate is fired + * If current time is > nextResupply(expire) time of trader, refresh traders assorts and + * Fence is handled slightly differently + * @returns has run + */ + update(): boolean; + /** + * Return an array of all traders + * @param sessionID Session id + * @returns array if ITraderBase objects + */ getAllTraders(sessionID: string): ITraderBase[]; - updateTraders(): boolean; + getTrader(sessionID: string, traderID: string): ITraderBase; getAssort(sessionId: string, traderId: string): ITraderAssort; - getPurchasesData(traderID: string, sessionID: string): Record; + getPurchasesData(sessionID: string, traderID: string): Record; } diff --git a/Faupi-HideoutArchitect/server/types/di/Container.d.ts b/Faupi-HideoutArchitect/server/types/di/Container.d.ts index 17791b0..98d1fa1 100644 --- a/Faupi-HideoutArchitect/server/types/di/Container.d.ts +++ b/Faupi-HideoutArchitect/server/types/di/Container.d.ts @@ -1,4 +1,7 @@ import { DependencyContainer } from "tsyringe"; +/** + * Handle the registration of classes to be used by the Dependency Injection code + */ export declare class Container { static registerTypes(depContainer: DependencyContainer): void; static registerListTypes(depContainer: DependencyContainer): void; diff --git a/Faupi-HideoutArchitect/server/types/generators/BotGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/BotGenerator.d.ts index a5fc0ad..2ac51db 100644 --- a/Faupi-HideoutArchitect/server/types/generators/BotGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/BotGenerator.d.ts @@ -9,6 +9,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { PmcAiService } from "../services/PmcAiService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; @@ -30,9 +31,10 @@ export declare class BotGenerator { protected botEquipmentFilterService: BotEquipmentFilterService; protected botHelper: BotHelper; protected gameEventHelper: GameEventHelper; + protected pmcAiService: PmcAiService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, pmcAiService: PmcAiService, configServer: ConfigServer); /** * Generate a player scav bot object * @param role e.g. assault / pmcbot @@ -40,14 +42,14 @@ export declare class BotGenerator { * @param botTemplate base bot template to use (e.g. assault/pmcbot) * @returns */ - generatePlayerScav(role: string, difficulty: string, botTemplate: IBotType): IBotBase; - generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; /** - * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check - * @param botRole the bot role to check if should be a pmc - * @returns true if should be a pmc + * Generate an array of bot objects for populate a raid with + * @param sessionId session id + * @param info request object + * @returns bot array */ - protected shouldBotBePmc(botRole: string): boolean; + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; /** * Get a randomised PMC side based on bot config value 'isUsec' * @returns pmc side as string @@ -58,12 +60,30 @@ export declare class BotGenerator { * @returns IBotBase object */ protected getCloneOfBotBase(): IBotBase; - protected generateBot(bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param role botRole bot will use + * @param node Bot template from db/bots/x.json + * @param isPmc Is bot to be a PMC + * @param isPlayerScav is bot to be a p scav bot + * @returns IBotBase object + */ + protected generateBot(sessionId: string, bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; /** * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client */ protected logPmcGeneratedCount(output: IBotBase[]): void; - protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult; + /** + * Return a randomised bot level and exp value + * @param role botRole being generated for + * @param min Min exp value + * @param max Max exp value + * @returns IRandomisedBotLevelResult object + */ + protected generateRandomLevel(role: string, min: number, max: number): BotGenerator.IRandomisedBotLevelResult; /** * Converts health object to the required format * @param healthObj health object from bot json @@ -72,19 +92,23 @@ export declare class BotGenerator { */ protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; protected generateSkills(skillsObj: Skills): Skills; - /** - * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) - * @param pmcSide eft side (usec/bear) - * @returns pmc side as defined in config - */ - protected getPmcRole(pmcSide: string): string; /** * Iterate through bots inventory and loot to find and remove christmas items (as defined in GameEventHelper) * @param nodeInventory Bots inventory to iterate over */ protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ protected generateId(bot: IBotBase): IBotBase; protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ protected getPMCDifficulty(requestedDifficulty: string): string; /** * Add a side-specific (usec/bear) dogtag item to a bots inventory diff --git a/Faupi-HideoutArchitect/server/types/generators/BotInventoryGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/BotInventoryGenerator.d.ts index 35d1ee8..c5ed545 100644 --- a/Faupi-HideoutArchitect/server/types/generators/BotInventoryGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/BotInventoryGenerator.d.ts @@ -1,13 +1,16 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; -import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType"; +import { Chances, Generation, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; -import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; -import { BotWeaponGenerator } from "./BotWeaponGenerator"; import { BotLootGenerator } from "./BotLootGenerator"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; export declare class BotInventoryGenerator { protected logger: ILogger; protected hashUtil: HashUtil; @@ -17,8 +20,14 @@ export declare class BotInventoryGenerator { protected botLootGenerator: BotLootGenerator; protected botGeneratorHelper: BotGeneratorHelper; protected weightedRandomHelper: WeightedRandomHelper; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper); - generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer); + generateInventory(sessionId: string, templateInventory: Inventory, equipmentChances: Chances, itemGenerationLimitsMinMax: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation): void; protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void; protected generateInventoryBase(): PmcInventory; } diff --git a/Faupi-HideoutArchitect/server/types/generators/BotLootGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/BotLootGenerator.d.ts index c6a3f29..c1f5310 100644 --- a/Faupi-HideoutArchitect/server/types/generators/BotLootGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/BotLootGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { HandbookHelper } from "../helpers/HandbookHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; @@ -20,11 +21,12 @@ export declare class BotLootGenerator { protected handbookHelper: HandbookHelper; protected botGeneratorHelper: BotGeneratorHelper; protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botLootCacheService: BotLootCacheService, configServer: ConfigServer); - generateLoot(templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer); + generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; protected getRandomisedCount(min: number, max: number, nValue: number): number; /** * Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit is reached @@ -47,7 +49,7 @@ export declare class BotLootGenerator { * @param botRole bots role, .e.g. pmcBot * @param isPmc are we generating for a pmc */ - protected addLooseWeaponsToInventorySlot(botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean): void; + protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean): void; /** * Get a random item from the pool parameter using the biasedRandomNumber system * @param pool pool of items to pick an item from diff --git a/Faupi-HideoutArchitect/server/types/generators/BotWeaponGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/BotWeaponGenerator.d.ts index 9215214..487901b 100644 --- a/Faupi-HideoutArchitect/server/types/generators/BotWeaponGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/BotWeaponGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { MinMax } from "../models/common/MinMax"; @@ -14,6 +15,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; export declare class BotWeaponGenerator { protected jsonUtil: JsonUtil; protected logger: ILogger; @@ -24,11 +26,24 @@ export declare class BotWeaponGenerator { protected botGeneratorHelper: BotGeneratorHelper; protected randomUtil: RandomUtil; protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected inventoryMagGenComponents: IInventoryMagGen[]; protected readonly modMagazineSlotId = "mod_magazine"; protected botConfig: IBotConfig; - constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer); + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, inventoryMagGenComponents: IInventoryMagGen[]); /** - * Get a random weapon from a bots pool of weapons (weighted) + * Pick a random weapon based on weightings and generate a functional weapon + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId + * @param modChances + * @param botRole role of bot, e.g. assault/followerBully + * @param isPmc Is weapon generated for a pmc + * @returns GenerateWeaponResult object + */ + generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; + /** + * Get a random weighted weapon from a bots pool of weapons * @param equipmentSlot Primary/secondary/holster * @param botTemplateInventory e.g. assault.json * @returns weapon tpl @@ -39,43 +54,24 @@ export declare class BotWeaponGenerator { * @param weaponTpl weapon tpl to generate (use pickWeightedWeaponTplFromPool()) * @param equipmentSlot slot to fit into, primary/secondary/holster * @param botTemplateInventory e.g. assault.json - * @param weaponParentId - * @param modChances - * @param botRole + * @param weaponParentId ParentId of the weapon being generated + * @param modChances Dictionary of item types and % chance weapon will have that mod + * @param botRole e.g. assault/exusec * @param isPmc * @returns GenerateWeaponResult object */ - generateWeaponByTpl(weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; + generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; /** - * Generate an entirely random weapon - * @param equipmentSlot Primary/secondary/holster - * @param botTemplateInventory e.g. assault.json - * @param weaponParentId - * @param modChances - * @param botRole - * @param isPmc - * @returns GenerateWeaponResult object - */ - generateRandomWeapon(equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; - /** - * Create array with weapon base as only element - * Add additional properties as required - * @param weaponTpl - * @param weaponParentId - * @param equipmentSlot - * @param weaponItemTemplate + * Create array with weapon base as only element and + * add additional properties based on weapon type + * @param weaponTpl Weapon tpl to create item with + * @param weaponParentId Weapons parent id + * @param equipmentSlot e.g. primary/secondary/holster + * @param weaponItemTemplate db template for weapon * @param botRole for durability values - * @returns + * @returns Base weapon item in array */ - constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; - /** - * Add compatible magazines to an inventory based on a generated weapon - * @param weaponDetails - * @param magCounts - * @param inventory - * @param botRole the bot type we're getting generating extra mags for - */ - addExtraMagazinesToInventory(weaponDetails: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; /** * Get the mods necessary to kit out a weapon to its preset level * @param weaponTpl weapon to find preset for @@ -84,33 +80,21 @@ export declare class BotWeaponGenerator { * @returns array of weapon mods */ protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[]; - /** Checks if all required slots are occupied on a weapon and all it's mods */ + /** + * Checks if all required slots are occupied on a weapon and all it's mods + * @param weaponItemArray Weapon + mods + * @returns true if valid + */ protected isWeaponValid(weaponItemArray: Item[]): boolean; /** * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. * Additionally, adds extra bullets to SecuredContainer - * @param weaponMods - * @param weaponTemplate - * @param magCounts - * @param ammoTpl - * @param inventory - * @param botRole the bot type we're getting generating extra mags for - * @returns + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for */ - protected generateExtraMagazines(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory, botRole: string): void; - /** - * Get a randomised number of bullets for a specific magazine - * @param magCounts min and max count of magazines - * @param magTemplate magazine to generate bullet count for - * @returns bullet count number - */ - protected getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; - /** - * Get a randomised count of magazines - * @param magCounts min and max value returned value can be between - * @returns numberical value of magazine count - */ - protected getRandomisedMagazineCount(magCounts: MinMax): number; + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; /** * Add ammo to the secure container * @param stackCount How many stacks of ammo to add @@ -127,21 +111,13 @@ export declare class BotWeaponGenerator { * @returns magazine tpl string */ protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; - /** - * Get a weapons default magazine template id - * @param weaponTemplate weapon to get default magazine for - * @returns tpl of magazine - */ - protected getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; - protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void; /** * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) * @param ammo a list of ammo tpls the weapon can use * @param weaponTemplate the weapon we want to pick ammo for - * @param isPmc is the ammo being gathered for a pmc (runs pmc ammo filtering) * @returns an ammo tpl that works with the desired gun */ - protected getCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem, isPmc: boolean): string; + protected getWeightedCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem): string; /** * Get a weapons compatible cartridge caliber * @param weaponTemplate Weapon to look up caliber of diff --git a/Faupi-HideoutArchitect/server/types/generators/LocationGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/LocationGenerator.d.ts index bd368b5..cc61dcf 100644 --- a/Faupi-HideoutArchitect/server/types/generators/LocationGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/LocationGenerator.d.ts @@ -3,10 +3,9 @@ import { GameEventHelper } from "../helpers/GameEventHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { PresetHelper } from "../helpers/PresetHelper"; import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; -import { ILooseLoot, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; +import { ILooseLoot, SpawnpointsForced, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; import { Item } from "../models/eft/common/tables/IItem"; import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase"; -import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { ILocationConfig } from "../models/spt/config/ILocationConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -36,11 +35,19 @@ export declare class LocationGenerator { generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; protected getLooseLootMultiplerForLocation(location: string): number; protected getStaticLootMultiplerForLocation(location: string): number; + /** + * Create array of loose + forced loot using probability system + * @param dynamicLootDist + * @param staticAmmoDist + * @param locationName Location to generate loot for + * @returns Array of spawn points with loot in them + */ generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; + /** + * Add forced spawn point loot into loot parameter array + * @param loot array to add forced loot to + * @param forcedSpawnPoints forced loot to add + */ + protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[]): void; protected createItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; - protected getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; - protected getRandomValidCaliber(magTemplate: ITemplateItem): string; - protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; - protected createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; - protected createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item; } diff --git a/Faupi-HideoutArchitect/server/types/generators/LootGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/LootGenerator.d.ts new file mode 100644 index 0000000..bbc1915 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/generators/LootGenerator.d.ts @@ -0,0 +1,58 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { LootItem } from "../models/spt/services/LootItem"; +import { LootRequest } from "../models/spt/services/LootRequest"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class LootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected itemFilterService: ItemFilterService; + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, itemFilterService: ItemFilterService); + /** + * Generate a list of items based on options passed in + * @param options parameters to adjust what loot is generated + * @returns An array of loot items + */ + createRandomloot(options: LootRequest): LootItem[]; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Find a random item in items.json and add to result array + * @param items items to choose from + * @param itemTypeCounts item limit counts + * @param options item filters + * @param result array to add found item to + * @returns true if item was valid and added to pool + */ + protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, options: LootRequest, result: LootItem[]): boolean; + /** + * + * Find a random item in items.json and add to result array + * @param globalDefaultPresets presets to choose from + * @param itemTypeCounts item limit counts + * @param result array to add found preset to + * @returns true if preset was valid and added to pool + */ + protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record, result: LootItem[]): boolean; +} diff --git a/Faupi-HideoutArchitect/server/types/generators/PMCLootGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/PMCLootGenerator.d.ts index 64e6f7f..b9f2a83 100644 --- a/Faupi-HideoutArchitect/server/types/generators/PMCLootGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/PMCLootGenerator.d.ts @@ -1,15 +1,21 @@ import { ItemHelper } from "../helpers/ItemHelper"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { ConfigServer } from "../servers/ConfigServer"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +/** + * Handle the generation of dynamic PMC loot in pockets and backpacks + * and the removal of blacklisted items + */ export declare class PMCLootGenerator { protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected configServer: ConfigServer; + protected itemFilterService: ItemFilterService; protected pocketLootPool: string[]; protected backpackLootPool: string[]; protected botConfig: IBotConfig; - constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService); generatePMCPocketLootPool(): string[]; generatePMCBackpackLootPool(): string[]; } diff --git a/Faupi-HideoutArchitect/server/types/generators/RagfairAssortGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/RagfairAssortGenerator.d.ts index cbdd7f2..db4811d 100644 --- a/Faupi-HideoutArchitect/server/types/generators/RagfairAssortGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/RagfairAssortGenerator.d.ts @@ -1,5 +1,8 @@ import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -8,18 +11,40 @@ export declare class RagfairAssortGenerator { protected hashUtil: HashUtil; protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; protected generatedAssortItems: Item[]; - constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer); + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); /** * Get an array of unique items that can be sold on the flea * @returns array of unique items */ getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ protected assortsAreGenerated(): boolean; /** * Generate an array of items the flea can sell * @returns array of unique items */ protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ protected createRagfairAssortItem(tplId: string, id?: string): Item; } diff --git a/Faupi-HideoutArchitect/server/types/generators/RagfairOfferGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/RagfairOfferGenerator.d.ts index 3e7f4cc..317cd6b 100644 --- a/Faupi-HideoutArchitect/server/types/generators/RagfairOfferGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/RagfairOfferGenerator.d.ts @@ -41,15 +41,37 @@ export declare class RagfairOfferGenerator { createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; protected getTraderId(userID: string): string; protected getRating(userID: string): number; + /** + * Is the offers user rating growing + * @param userID user to check rating of + * @returns true if its growing + */ protected getRatingGrowing(userID: string): boolean; + /** + * Get number of section until offer should expire + * @param userID Id of the offer owner + * @param time Time the offer is posted + * @returns number of seconds until offer expires + */ protected getOfferEndTime(userID: string, time: number): number; /** * Create multiple offers for items by using a unique list of items we've generated previously - * @param expiredOffers + * @param expiredOffers optional, expired offers to regenerate */ generateDynamicOffers(expiredOffers?: Item[]): void; - generateTraderOffers(traderID: string): void; + /** + * Generate trader offers on flea using the traders assort data + * @param traderID Trader to generate offers for + */ + generateFleaOffersForTrader(traderID: string): void; protected getItemCondition(userID: string, items: Item[], itemDetails: ITemplateItem): Item[]; + /** + * Add missing conditions to an item if needed + * Durabiltiy for repairable items + * HpResource for medical items + * @param item item to add conditions to + * @returns Item with conditions added + */ protected addMissingCondition(item: Item): Item; protected getOfferRequirements(items: Item[]): { count: number; @@ -57,6 +79,14 @@ export declare class RagfairOfferGenerator { }[]; /** * Create a flea offer and store it in the Ragfair server offers array + * @param userID owner of the offer + * @param time time offer is put up + * @param items items in the offer + * @param barterScheme + * @param loyalLevel + * @param price price of offer + * @param sellInOnePiece + * @returns */ createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; } diff --git a/Faupi-HideoutArchitect/server/types/generators/ScavCaseRewardGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/ScavCaseRewardGenerator.d.ts index c7d6ab7..89cb5c8 100644 --- a/Faupi-HideoutArchitect/server/types/generators/ScavCaseRewardGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/ScavCaseRewardGenerator.d.ts @@ -8,9 +8,13 @@ import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "../mo import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { RagfairPriceService } from "../services/RagfairPriceService"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; +/** + * Handle the creation of randomised scav case rewards + */ export declare class ScavCaseRewardGenerator { protected logger: ILogger; protected randomUtil: RandomUtil; @@ -18,9 +22,10 @@ export declare class ScavCaseRewardGenerator { protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected ragfairPriceService: RagfairPriceService; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected scavCaseConfig: IScavCaseConfig; - constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); + constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * Create an array of rewards that will be given to the player upon completing their scav case build * @param body client request diff --git a/Faupi-HideoutArchitect/server/types/generators/WeatherGenerator.d.ts b/Faupi-HideoutArchitect/server/types/generators/WeatherGenerator.d.ts index 44cecbb..8ddbe49 100644 --- a/Faupi-HideoutArchitect/server/types/generators/WeatherGenerator.d.ts +++ b/Faupi-HideoutArchitect/server/types/generators/WeatherGenerator.d.ts @@ -1,7 +1,7 @@ import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; -import { ConfigServer } from "../servers/ConfigServer"; import { IWeatherData } from "../models/eft/weather/IWeatherData"; import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class WeatherGenerator { @@ -21,11 +21,16 @@ export declare class WeatherGenerator { protected getAcceleratedTime(computedDate: Date): string; /** * Get current time formatted to fit BSGs requirement - * @param computedDate + * @param computedDate date to format into bsg style * @returns */ protected getNormalTime(computedDate: Date): string; - generateWeather(data: IWeatherData): IWeatherData; + /** + * Return randomised Weather data + * @param weatherData weather input data + * @returns Randomised weather data + */ + generateWeather(weatherData: IWeatherData): IWeatherData; protected getWeightedFog(): string; protected getWeightedRain(): number; protected getRandomFloat(node: string): number; diff --git a/Faupi-HideoutArchitect/server/types/generators/weapongen/IInventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-HideoutArchitect/server/types/generators/weapongen/InventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..4fcb1e2 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,14 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-HideoutArchitect/server/types/helpers/AssortHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/AssortHelper.d.ts index 15586b9..bfc157f 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/AssortHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/AssortHelper.d.ts @@ -17,7 +17,7 @@ export declare class AssortHelper { * @param assort assort items from a trader * @returns assort items minus locked quest assorts */ - stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort; + stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, flea?: boolean): ITraderAssort; /** * Remove assorts from a trader that have not been unlocked yet * @param pmcProfile player profile @@ -32,5 +32,5 @@ export declare class AssortHelper { * @param itemID item id to remove from asort * @returns Modified assort */ - removeItemFromAssort(assort: ITraderAssort, itemID: string): ITraderAssort; + removeItemFromAssort(assort: ITraderAssort, itemID: string, flea?: boolean): ITraderAssort; } diff --git a/Faupi-HideoutArchitect/server/types/helpers/BotGeneratorHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/BotGeneratorHelper.d.ts index 3cd7256..5e3e501 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/BotGeneratorHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/BotGeneratorHelper.d.ts @@ -1,19 +1,33 @@ import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; -import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; -import { Grid, ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; -import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { ItemFilterService } from "../services/ItemFilterService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGeneratorHelper } from "./BotWeaponGeneratorHelper"; import { ContainerHelper } from "./ContainerHelper"; import { InventoryHelper } from "./InventoryHelper"; import { ItemHelper } from "./ItemHelper"; import { ProbabilityHelper } from "./ProbabilityHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} export declare class BotGeneratorHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; @@ -25,16 +39,121 @@ export declare class BotGeneratorHelper { protected itemHelper: ItemHelper; protected inventoryHelper: InventoryHelper; protected containerHelper: ContainerHelper; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected itemFilterService: ItemFilterService; + protected profileHelper: ProfileHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer); - generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, configServer: ConfigServer); /** - * Is this magazine cylinder related (revolvers and grenade launchers) - * @param magazineParentName the name of the magazines parent - * @returns true if it is cylinder related + * Check mods are compatible and add to array + * @param equipment Equipment item to add mods to + * @param modPool Mod list to choose frm + * @param parentId parentid of item to add mod to + * @param parentTemplate template objet of item to add mods to + * @param modSpawnChances dictionary of mod items and their chance to spawn for this bot type + * @returns Item + compatible mods as an array */ - magazineIsCylinderRelated(magazineParentName: string): boolean; + generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; + /** + * @param sessionId session id + * @param weapon Weapon to add mods to + * @param modPool Pool of compatible mods to attach to weapon + * @param weaponParentId parentId of weapon + * @param parentWeaponTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @returns Weapon + mods array + */ + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentWeaponTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string): Item[]; + /** + * + * @param modSlot + * @param isRandomisableSlot + * @param modsParent + * @param botEquipBlacklist + * @param itemModPool + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate + * @returns + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, modsParent: Slot, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Check if mod item is on limited list + has surpassed the limit set for it + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @returns true if over item limit + */ + protected modHasReachedItemLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits): boolean; + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + protected initModLimits(botRole: string): BotModLimits; + /** + * Generate a pool of mods for this bots mod type if bot has values inside `randomisedWeaponModSlots` array found in bot.json/equipment[botrole] + * @param allowedMods Mods to be added to mod pool + * @param botEquipBlacklist blacklist of items not allowed to be added to mod pool + * @param modSlot Slot to generate mods for + * @param itemModPool base mod pool to replace values of + */ + protected generateDynamicWeaponModPool(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string, itemModPool: Record): void; + /** + * Find all compatible mods for equipment item and add to modPool + * @param itemDetails item to find mods for + * @param modPool ModPool to add mods to + */ + generateDynamicModPool(itemDetails: ITemplateItem, modPool: Mods): void; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; + /** + * Check if the specific item type on the weapon has reached the set limit + * @param modTpl log mod tpl if over type limit + * @param currentCount current number of this item on gun + * @param maxLimit mod limit allowed + * @param botRole role of bot we're checking weapon of + * @returns true if limit reached + */ + protected weaponModLimitReached(modTpl: string, currentCount: { + count: number; + }, maxLimit: number, botRole: string): boolean; + /** + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate tempalte of the mods parent item + * @returns true if valid + */ + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; + /** + * Create a mod item with parameters as properties + * @param modId _id + * @param modTpl _tpl + * @param parentId parentId + * @param modSlot slotId + * @param modTemplate Used to add additional properites in the upd object + * @returns Item object + */ + protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem): Item; /** * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot * never return true for an item that has 0% spawn chance @@ -46,7 +165,7 @@ export declare class BotGeneratorHelper { protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; /** * Get a list of containers that hold ammo - * e.g. mod_magazine + * e.g. mod_magazine / patron_in_weapon_000 * @returns string array */ protected getAmmoContainers(): string[]; @@ -62,11 +181,11 @@ export declare class BotGeneratorHelper { * Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0. * Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots. * This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine" - * - * @param {object} items The items where the CylinderMagazine's camora are appended to - * @param {object} modPool modPool which should include available cartrigdes - * @param {string} parentId The CylinderMagazine's UID - * @param {object} parentTemplate The CylinderMagazine's template + * @param items The items where the CylinderMagazine's camora are appended to + * @param modPool modPool which should include available cartrigdes + * @param parentId The CylinderMagazine's UID + * @param parentTemplate The CylinderMagazine's template + * @returns */ protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void; /** @@ -75,6 +194,13 @@ export declare class BotGeneratorHelper { * @returns string array of shells fro luitple camora sources */ protected mergeCamoraPoolsTogether(camorasWithShells: Record): string[]; + /** + * Adds properties to an item + * e.g. Repairable / HasHinge / Foldable / MaxDurability + * @param itemTemplate + * @param botRole Used by weapons to randomise the durability values + * @returns Item Upd object with extra properties + */ generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: any): { upd?: Upd; }; @@ -92,13 +218,15 @@ export declare class BotGeneratorHelper { * @returns Repairable object */ protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; - protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** - * Sort by spawn chance, highest to lowest, higher is more common - * @param unsortedModArray String array to sort - * @returns Sorted string array + * Get a random mod from an items compatible mods Filter array + * @param modTpl + * @param parentSlot + * @param modSlot + * @param items + * @returns item tpl */ - protected sortModArray(unsortedModArray: string[]): string[]; + protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** * Can an item be added to an item without issue * @param items @@ -107,18 +235,8 @@ export declare class BotGeneratorHelper { * @returns true if possible */ isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean; - /** - * Adds an item with all its childern into specified equipmentSlots, wherever it fits. - * @param equipmentSlots - * @param parentId - * @param parentTpl - * @param itemWithChildren - * @param inventory - * @returns a `boolean` indicating item was added - */ - addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean; - protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; } +/** TODO - move into own class */ export declare class ExhaustableArray { private itemPool; private randomUtil; diff --git a/Faupi-HideoutArchitect/server/types/helpers/BotHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/BotHelper.d.ts index 9b89481..18738e5 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/BotHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/BotHelper.d.ts @@ -13,11 +13,34 @@ export declare class BotHelper { protected configServer: ConfigServer; protected botConfig: IBotConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retreive difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ getBotTemplate(role: string): IBotType; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ getPmcDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; /** * Randomise the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent * @param difficultySettings pmc difficulty settings */ randomisePmcHostility(difficultySettings: Difficulty): void; @@ -31,7 +54,7 @@ export declare class BotHelper { */ addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; /** - * Add a bot to the ENEMY_BOT_TYPES array + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list * @param difficultySettings bot settings to alter * @param typesToAdd bot type to add to enemy list */ @@ -42,4 +65,10 @@ export declare class BotHelper { * @param typesToAdd bot type to add to revenge list */ addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; } diff --git a/Faupi-HideoutArchitect/server/types/helpers/BotWeaponGeneratorHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..7e25f56 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,78 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper); + /** + * Get a randomised number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomised count of magazines + * @param magCounts min and max value returned value can be between + * @returns numberical value of magazine count + */ + getRandomisedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartrdiges to a bots inventory (vest/pocket) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + */ + addBulletsToVestAndPockets(ammoTpl: string, cartridgeCount: number, inventory: Inventory): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * Adds an item with all its childern into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/Faupi-HideoutArchitect/server/types/helpers/ExtendedProfileHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/ExtendedProfileHelper.d.ts deleted file mode 100644 index c05d88e..0000000 --- a/Faupi-HideoutArchitect/server/types/helpers/ExtendedProfileHelper.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BotGenerator } from "../generators/BotGenerator"; -import { IPmcData, Skills, Stats } from "../models/eft/common/IPmcData"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { SaveServer } from "../servers/SaveServer"; -import { BotLootCacheService } from "../services/BotLootCacheService"; -import { FenceService } from "../services/FenceService"; -import { JsonUtil } from "../utils/JsonUtil"; -import { TimeUtil } from "../utils/TimeUtil"; -import { Watermark } from "../utils/Watermark"; -import { ItemHelper } from "./ItemHelper"; -import { ProfileHelper } from "./ProfileHelper"; -/** - * This class needs to exist outside of ProfileHelper to ensure cyclic deps don't cause the server to fail on load - */ -export declare class ExtendedProfileHelper extends ProfileHelper { - protected botLootCacheService: BotLootCacheService; - protected botGenerator: BotGenerator; - constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, botLootCacheService: BotLootCacheService, fenceService: FenceService, botGenerator: BotGenerator); - generatePlayerScav(sessionID: string): IPmcData; - protected getScavSkills(sessionID: string): Skills; - protected removeSecureContainer(profile: IPmcData): IPmcData; - protected getDefaultScavSkills(): Skills; - protected getScavStats(sessionID: string): Stats; - protected getScavLevel(sessionID: string): number; - protected getScavExperience(sessionID: string): number; - protected setScavCooldownTimer(profile: IPmcData, pmcData: IPmcData): IPmcData; -} diff --git a/Faupi-HideoutArchitect/server/types/helpers/HideoutHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/HideoutHelper.d.ts index 36e4009..7495a6a 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/HideoutHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/HideoutHelper.d.ts @@ -44,14 +44,72 @@ export declare class HideoutHelper { initProduction(recipeId: string, productionTime: number): Production; isProductionType(productive: Productive): productive is Production; applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void; + /** + * TODO: + * After looking at the skills there doesnt seem to be a configuration per skill to boost + * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it) + * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure! + * @param pmcData + * @param bonus + */ protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void; + /** + * Process a players hideout, update areas that use resources + increment production timers + * @param sessionID Session id + */ updatePlayerHideout(sessionID: string): void; + /** + * Update progress timer for water collector + * @param pmcData profile to update + * @param productionId id of water collection production to update + * @param hideoutProperties Hideout properties + */ + protected updateWaterCollectorProductionTimer(pmcData: IPmcData, productionId: string, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Iterate over productions and update their progress timers + * @param pmcData Profile to check for productions and update + * @param hideoutProperties Hideout properties + */ + protected updateProductionTimers(pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Update progress timer for scav case + * @param pmcData Profile to update + * @param productionId Id of scav case production to update + */ + protected updateScavCaseProductionTimer(pmcData: IPmcData, productionId: string): void; + /** + * Iterate over hideout areas that use resources (fuel/filters etc) and update associated values + * @param sessionID Session id + * @param pmcData Profile to update areas of + * @param hideoutProperties hideout properties + */ + protected updateAreasWithResources(sessionID: string, pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void; protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean; - protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): HideoutArea; - protected updateWaterFilters(waterFilterArea: HideoutArea, pwProd: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; + protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void; + /** + * Adjust water filter objects resourceValue or delete when they reach 0 resource + * @param waterFilterArea water filter area to update + * @param production production object + * @param isGeneratorOn is generatory enabled + * @param pmcData Player profile + * @returns Updated HideoutArea object + */ + protected updateWaterFilters(waterFilterArea: HideoutArea, production: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd; - protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): HideoutArea; + protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): void; protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production; protected getBTCSlots(pmcData: IPmcData): number; protected getManagementSkillsSlots(): number; diff --git a/Faupi-HideoutArchitect/server/types/helpers/InRaidHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/InRaidHelper.d.ts index c3cbfbb..962df38 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/InRaidHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/InRaidHelper.d.ts @@ -5,6 +5,7 @@ import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequ import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; import { InventoryHelper } from "./InventoryHelper"; import { PaymentHelper } from "./PaymentHelper"; @@ -15,19 +16,8 @@ export declare class InRaidHelper { protected databaseServer: DatabaseServer; protected inventoryHelper: InventoryHelper; protected paymentHelper: PaymentHelper; - constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper); - /** - * Reset the SPT inraid property stored in a profile to 'none' - * @param sessionID Session id - */ - protected removePlayer(sessionID: string): void; - /** - * Some maps have one-time-use keys (e.g. Labs - * Remove the relevant key from an inventory based on the post-raid request data passed in - * @param offraidData post-raid data - * @param sessionID Session id - */ - protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + protected profileFixerService: ProfileFixerService; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, profileFixerService: ProfileFixerService); /** * Check an array of items and add an upd object to money items with a stack count of 1 * Single stack money items have no upd object and thus no StackObjectsCount, causing issues @@ -52,6 +42,18 @@ export declare class InRaidHelper { * @returns Reset profile object */ updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData; + /** + * Some maps have one-time-use keys (e.g. Labs + * Remove the relevant key from an inventory based on the post-raid request data passed in + * @param offraidData post-raid data + * @param sessionID Session id + */ + protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Set the SPT inraid location Profile property to 'none' + * @param sessionID Session id + */ + protected setPlayerInRaidLocationStatusToNone(sessionID: string): void; /** * Adds SpawnedInSession property to items found in a raid * Removes SpawnedInSession for non-scav players if item was taken into raid with SpawnedInSession = true @@ -93,5 +95,10 @@ export declare class InRaidHelper { * @returns true if item is kept after death */ isItemKeptAfterDeath(slotId: string): boolean; + /** + * Return the equipped items from a players inventory + * @param items Players inventory to search through + * @returns an array of equipped items + */ getPlayerGear(items: Item[]): Item[]; } diff --git a/Faupi-HideoutArchitect/server/types/helpers/InventoryHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/InventoryHelper.d.ts index dc7cbca..b8e5c9d 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/InventoryHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/InventoryHelper.d.ts @@ -43,6 +43,7 @@ export declare class InventoryHelper { constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, httpResponse: HttpResponseUtil, fenceService: FenceService, databaseServer: DatabaseServer, paymentHelper: PaymentHelper, traderAssortHelper: TraderAssortHelper, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, containerHelper: ContainerHelper, profileHelper: ProfileHelper, configServer: ConfigServer); addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse; removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + removeItemByCount(pmcData: IPmcData, itemId: string, count: number, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record; protected getSizeByInventoryItemHash(itemTpl: string, itemID: string, inventoryItemHash: InventoryHelper.InventoryItemHash): Record; protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash; diff --git a/Faupi-HideoutArchitect/server/types/helpers/ItemHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/ItemHelper.d.ts index 1701c62..0effaf2 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/ItemHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/ItemHelper.d.ts @@ -1,35 +1,30 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { InsuredItem } from "../models/eft/common/tables/IBotBase"; import { Item, Repairable } from "../models/eft/common/tables/IItem"; +import { IStaticAmmoDetails } from "../models/eft/common/tables/ILootBase"; import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; declare class ItemHelper { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected objectId: ObjectId; + protected mathUtil: MathUtil; protected databaseServer: DatabaseServer; - constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer); + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer); /** - * Checks if a id is a valid item. Valid meaning that it's an item that be stored in stash + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash * @param {string} tpl the template id / tpl * @returns boolean; true for items that may be in player posession and not quest items */ isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean; - /** - * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward - * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. - * @param {*} tpl template id of item to check - * @returns boolean: true if item is valid reward - */ - isValidRewardItem(tpl: string): boolean; - /** - * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) - * @returns a list of rewardable items [[_tpl, itemTemplate],...] - */ - getRewardableItems(): [string, ITemplateItem][]; /** * Check if the tpl / template Id provided is a descendent of the baseclass * @@ -84,6 +79,11 @@ declare class ItemHelper { * @returns {array} The array of StackSlotItems */ generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; /** * Gets item data from items.json * @param tpl items template id to look up @@ -196,6 +196,22 @@ declare class ItemHelper { * @returns ItemSize object (width and height) */ getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; + /** + * Get a random cartridge from an items Filter property + * @param item + * @returns + */ + getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; + createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; + protected getRandomValidCaliber(magTemplate: ITemplateItem): string; + protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; + createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item; + /** + * Get the size of a stack, return 1 if no stack object count property found + * @param item Item to get stack size of + * @returns size of stack + */ + getItemStackSize(item: Item): number; } declare namespace ItemHelper { interface ItemSize { diff --git a/Faupi-HideoutArchitect/server/types/helpers/ProfileHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/ProfileHelper.d.ts index 6c150c8..9c6560a 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/ProfileHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/ProfileHelper.d.ts @@ -2,24 +2,41 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { Stats } from "../models/eft/common/tables/IBotBase"; import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { FenceService } from "../services/FenceService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; import { Watermark } from "../utils/Watermark"; import { ItemHelper } from "./ItemHelper"; export declare class ProfileHelper { + protected logger: ILogger; protected jsonUtil: JsonUtil; protected watermark: Watermark; protected timeUtil: TimeUtil; protected saveServer: SaveServer; protected databaseServer: DatabaseServer; protected itemHelper: ItemHelper; + protected profileSnapshotService: ProfileSnapshotService; protected fenceService: FenceService; - constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, fenceService: FenceService); + constructor(logger: ILogger, jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService, fenceService: FenceService); resetProfileQuestCondition(sessionID: string, conditionId: string): void; getCompleteProfile(sessionID: string): IPmcData[]; + /** + * Fix xp doubling on post-raid xp reward screen by sending a 'dummy' profile to the post-raid screen + * Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using + * the now updated profile values as a base, meaning it shows x2 xp gained + * Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return + * Delete snapshot of pre-raid profile prior to returning profile data + * @param sessionId Session id + * @param output pmc and scav profiles array + * @param pmcProfile post-raid pmc profile + * @param scavProfile post-raid scav profile + * @returns updated profile array + */ + protected postRaidXpWorkaroundFix(sessionId: string, output: IPmcData[], pmcProfile: IPmcData, scavProfile: IPmcData): IPmcData[]; isNicknameTaken(info: IValidateNicknameRequestData, sessionID: string): boolean; /** * Add experience to a PMC inside the players profile diff --git a/Faupi-HideoutArchitect/server/types/helpers/QuestHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/QuestHelper.d.ts index 0f68cd5..d66d150 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/QuestHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/QuestHelper.d.ts @@ -36,13 +36,30 @@ export declare class QuestHelper { protected configServer: ConfigServer; protected questConfig: IQuestConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, traderHelper: TraderHelper, configServer: ConfigServer); - questStatus(pmcData: IPmcData, questID: string): QuestStatus; /** - * returns true is the condition is satisfied + * Get status of a quest by quest id + * @param pmcData Profile to search + * @param questID Quest id to look up + * @returns QuestStauts enum + */ + getQuestStatus(pmcData: IPmcData, questID: string): QuestStatus; + /** + * returns true is the level condition is satisfied + * @param playerLevel Players level + * @param condition Quest condition + * @returns true if player level is greater than or equal to quest */ - evaluateLevel(pmcProfile: IPmcData, cond: AvailableForConditions): boolean; + doesPlayerLevelFulfilCondition(playerLevel: number, condition: AvailableForConditions): boolean; getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[]; - rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progress: number): void; + /** + * Increase skill points of a skill on player profile + * @param sessionID Session id + * @param pmcData Player profile + * @param output output object to send back to client + * @param skillName Name of skill to increase skill points of + * @param progressAmount Amount of skill points to add to skill + */ + rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progressAmount: number): void; getQuestLocale(questId: string): any; /** * Debug Routine for showing some information on the diff --git a/Faupi-HideoutArchitect/server/types/helpers/RagfairOfferHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/RagfairOfferHelper.d.ts index 8d03bee..e9d72ca 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/RagfairOfferHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/RagfairOfferHelper.d.ts @@ -22,12 +22,14 @@ import { ProfileHelper } from "./ProfileHelper"; import { RagfairHelper } from "./RagfairHelper"; import { RagfairServerHelper } from "./RagfairServerHelper"; import { RagfairSortHelper } from "./RagfairSortHelper"; +import { TraderHelper } from "./TraderHelper"; export declare class RagfairOfferHelper { protected logger: ILogger; protected timeUtil: TimeUtil; protected hashUtil: HashUtil; protected itemEventRouter: ItemEventRouter; protected databaseServer: DatabaseServer; + protected traderHelper: TraderHelper; protected saveServer: SaveServer; protected dialogueHelper: DialogueHelper; protected itemHelper: ItemHelper; @@ -43,10 +45,10 @@ export declare class RagfairOfferHelper { protected static goodSoldTemplate: string; protected ragfairConfig: IRagfairConfig; protected questConfig: IQuestConfig; - constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); + constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); getValidOffers(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; - processOffers(sessionID: string): boolean; + processOffersOnProfile(sessionID: string): boolean; protected getProfileOffers(sessionID: string): IRagfairOffer[]; protected deleteOfferByOfferId(sessionID: string, offerId: string): void; protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse; diff --git a/Faupi-HideoutArchitect/server/types/helpers/RagfairSellHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/RagfairSellHelper.d.ts index 6ec004a..91b8a20 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/RagfairSellHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/RagfairSellHelper.d.ts @@ -11,6 +11,12 @@ export declare class RagfairSellHelper { protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer); - calculateSellChance(baseChance: number, offerPrice: number, requirementsPriceInRub: number): number; - rollForSale(sellChance: number, count: number): SellResult[]; + calculateSellChance(baseChancePercent: number, offerPriceRub: number, playerListedPriceRub: number): number; + /** + * Determine if the offer being listed will be sold + * @param sellChancePercent chance item will sell + * @param itemSellCount count of items to sell + * @returns Array of purchases of item(s) lsited + */ + rollForSale(sellChancePercent: number, itemSellCount: number): SellResult[]; } diff --git a/Faupi-HideoutArchitect/server/types/helpers/RagfairServerHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/RagfairServerHelper.d.ts index e4939d1..a03cdda 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/RagfairServerHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/RagfairServerHelper.d.ts @@ -6,6 +6,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { LocaleService } from "../services/LocaleService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -13,6 +14,9 @@ import { RandomUtil } from "../utils/RandomUtil"; import { DialogueHelper } from "./DialogueHelper"; import { ItemHelper } from "./ItemHelper"; import { ProfileHelper } from "./ProfileHelper"; +/** + * Helper class for common ragfair server actions + */ export declare class RagfairServerHelper { protected randomUtil: RandomUtil; protected hashUtil: HashUtil; @@ -23,11 +27,12 @@ export declare class RagfairServerHelper { protected localeService: LocaleService; protected dialogueHelper: DialogueHelper; protected jsonUtil: JsonUtil; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; protected questConfig: IQuestConfig; protected static goodsReturnedTemplate: string; - constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, configServer: ConfigServer); + constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * Is item valid / on blacklist / quest item * @param itemDetails diff --git a/Faupi-HideoutArchitect/server/types/helpers/RepairHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/RepairHelper.d.ts index 9a3ab29..5b09320 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/RepairHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/RepairHelper.d.ts @@ -14,8 +14,17 @@ export declare class RepairHelper { protected configServer: ConfigServer; protected repairConfig: IRepairConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); - updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit?: boolean, applyRandomDegradation?: boolean): Item; - protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number): number; - protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, armorMax: number): number; + /** + * + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; isWeaponTemplate(tpl: string): boolean; } diff --git a/Faupi-HideoutArchitect/server/types/helpers/TradeHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/TradeHelper.d.ts index 975062b..7ab9768 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/TradeHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/TradeHelper.d.ts @@ -39,6 +39,12 @@ export declare class TradeHelper { * @returns */ sellItem(pmcData: IPmcData, body: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment the assorts buy count by number of items purchased + * Show error on screen if player attepts to buy more than what the buy max allows + * @param assortBeingPurchased assort being bought + * @param itemsPurchasedCount number of items being bought + */ protected incrementAssortBuyCount(assortBeingPurchased: Item, itemsPurchasedCount: number): void; protected checkPurchaseIsWithinTraderItemLimit(assortBeingPurchased: Item, assortId: string, count: number): void; } diff --git a/Faupi-HideoutArchitect/server/types/helpers/TraderAssortHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/TraderAssortHelper.d.ts index 91ba6b9..025efd6 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/TraderAssortHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/TraderAssortHelper.d.ts @@ -1,7 +1,7 @@ import { RagfairAssortGenerator } from "../generators/RagfairAssortGenerator"; import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; import { Item } from "../models/eft/common/tables/IItem"; -import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITrader, ITraderAssort } from "../models/eft/common/tables/ITrader"; import { ITraderConfig } from "../models/spt/config/ITraderConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -10,13 +10,16 @@ import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { JsonUtil } from "../utils/JsonUtil"; import { MathUtil } from "../utils/MathUtil"; +import { TimeUtil } from "../utils/TimeUtil"; import { AssortHelper } from "./AssortHelper"; import { PaymentHelper } from "./PaymentHelper"; import { ProfileHelper } from "./ProfileHelper"; +import { TraderHelper } from "./TraderHelper"; export declare class TraderAssortHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; protected mathUtil: MathUtil; + protected timeUtil: TimeUtil; protected databaseServer: DatabaseServer; protected profileHelper: ProfileHelper; protected assortHelper: AssortHelper; @@ -24,18 +27,32 @@ export declare class TraderAssortHelper { protected ragfairAssortGenerator: RagfairAssortGenerator; protected ragfairOfferGenerator: RagfairOfferGenerator; protected traderAssortService: TraderAssortService; + protected traderHelper: TraderHelper; protected fenceService: FenceService; protected configServer: ConfigServer; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, fenceService: FenceService, configServer: ConfigServer); + constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, traderHelper: TraderHelper, fenceService: FenceService, configServer: ConfigServer); /** * Get a traders assorts * Can be used for returning ragfair / fence assorts + * Filter out assorts not unlocked due to level OR quest completion * @param sessionId session id - * @param traderId trader id - * @returns a traders assorts + * @param traderId traders id + * @returns a traders' assorts */ - getAssort(sessionId: string, traderId: string): ITraderAssort; + getAssort(sessionId: string, traderId: string, flea?: boolean): ITraderAssort; + /** + * Reset a traders assorts and move nextResupply value to future + * Flag trader as needing a flea offer reset to be picked up by flea update() function + * @param trader trader details to alter + */ + resetExpiredTrader(trader: ITrader): void; + /** + * Does the supplied trader need its assorts refreshed + * @param traderID Trader to check + * @returns true they need refreshing + */ + traderAssortsHaveExpired(traderID: string): boolean; /** * Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config * @param traderAssort Assorts to multiple price of diff --git a/Faupi-HideoutArchitect/server/types/helpers/TraderHelper.d.ts b/Faupi-HideoutArchitect/server/types/helpers/TraderHelper.d.ts index b2e9d38..0dc93e8 100644 --- a/Faupi-HideoutArchitect/server/types/helpers/TraderHelper.d.ts +++ b/Faupi-HideoutArchitect/server/types/helpers/TraderHelper.d.ts @@ -9,6 +9,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { FenceService } from "../services/FenceService"; import { PlayerService } from "../services/PlayerService"; +import { TimeUtil } from "../utils/TimeUtil"; import { HandbookHelper } from "./HandbookHelper"; import { ItemHelper } from "./ItemHelper"; import { PaymentHelper } from "./PaymentHelper"; @@ -23,9 +24,10 @@ export declare class TraderHelper { protected handbookHelper: HandbookHelper; protected playerService: PlayerService; protected fenceService: FenceService; + protected timeUtil: TimeUtil; protected configServer: ConfigServer; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); getTrader(traderID: string, sessionID: string): ITraderBase; getTraderAssortsById(traderId: string): ITraderAssort; /** @@ -63,7 +65,7 @@ export declare class TraderHelper { * @param item * @returns boolean */ - protected isWeaponAndBelowTraderBuyDurability(traderID: string, item: Item): boolean; + protected isWeaponBelowTraderBuyDurability(traderID: string, item: Item): boolean; /** * Get the price of an item and all of its attached children * Take into account bonuses/adjsutments e.g. discounts @@ -97,6 +99,17 @@ export declare class TraderHelper { * @param sessionID session id */ lvlUp(traderID: string, sessionID: string): void; + /** + * Get the next update timestamp for a trader + * @param traderID Trader to look up update value for + * @returns future timestamp + */ + getNextUpdateTimestamp(traderID: string): number; + /** + * Get the reset time between trader assort refreshes in seconds + * @param traderId Trader to look up + * @returns Time in seconds + */ getTraderUpdateSeconds(traderId: string): number; /** * check if an item is allowed to be sold to a trader diff --git a/Faupi-HideoutArchitect/server/types/loaders/DelayedModLoader.d.ts b/Faupi-HideoutArchitect/server/types/loaders/DelayedModLoader.d.ts deleted file mode 100644 index 2a05604..0000000 --- a/Faupi-HideoutArchitect/server/types/loaders/DelayedModLoader.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { HandbookController } from "../controllers/HandbookController"; -import { IModLoader } from "../models/spt/mod/IModLoader"; -import { ModCompilerService } from "../services/ModCompilerService"; -import { VFS } from "../utils/VFS"; -import { BundleLoader } from "./BundleLoader"; -import { InitialModLoader } from "./InitialModLoader"; -export declare class DelayedModLoader implements IModLoader { - protected bundleLoader: BundleLoader; - protected handbookController: HandbookController; - protected vfs: VFS; - protected modCompilerService: ModCompilerService; - protected initialModLoader: InitialModLoader; - constructor(bundleLoader: BundleLoader, handbookController: HandbookController, vfs: VFS, modCompilerService: ModCompilerService, initialModLoader: InitialModLoader); - getBundles(local: boolean): string; - getBundle(key: string, local: boolean): void; - getModPath(mod: string): string; - load(): void; - protected executeMods(container: DependencyContainer): void; - protected addBundles(): void; -} diff --git a/Faupi-HideoutArchitect/server/types/loaders/InitialModLoader.d.ts b/Faupi-HideoutArchitect/server/types/loaders/InitialModLoader.d.ts deleted file mode 100644 index 68e47fe..0000000 --- a/Faupi-HideoutArchitect/server/types/loaders/InitialModLoader.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { ICoreConfig } from "../models/spt/config/ICoreConfig"; -import { ModLoader } from "../models/spt/mod/IMod"; -import { IModLoader } from "../models/spt/mod/IModLoader"; -import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { ConfigServer } from "../servers/ConfigServer"; -import { ModCompilerService } from "../services/ModCompilerService"; -import { JsonUtil } from "../utils/JsonUtil"; -import { VFS } from "../utils/VFS"; -import { BundleLoader } from "./BundleLoader"; -export declare class InitialModLoader implements IModLoader { - protected logger: ILogger; - protected vfs: VFS; - protected jsonUtil: JsonUtil; - protected modCompilerService: ModCompilerService; - protected bundleLoader: BundleLoader; - protected configServer: ConfigServer; - protected static container: DependencyContainer; - protected readonly basepath = "user/mods/"; - protected imported: Record; - protected akiConfig: ICoreConfig; - constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, configServer: ConfigServer); - load(container: DependencyContainer): Promise; - getBundles(local: boolean): string; - getBundle(key: string, local: boolean): void; - /** - * Returns a list of mods with preserved load order - * @returns Array of mod names in load order - */ - getImportedModsNames(): string[]; - getModPath(mod: string): string; - protected importClass(name: string, filepath: string, container: DependencyContainer): void; - protected importMods(): Promise; - /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array - */ - protected getBrokenMods(mods: string[]): string[]; - /** - * Get packageJson data for mods - * @param mods mods to get packageJson for - * @returns dictionary - */ - protected getModsPackageData(mods: string[]): Record; - /** - * Does mod have "delayedLoad(" string in its entry class - * @param modFolderName folder name - * @param modToValidate package.json details - * @returns boolean - */ - protected isModSpt300Compatible(modFolderName: string, modToValidate: IPackageJsonData): boolean; - protected isModCombatibleWithAki(mod: IPackageJsonData): boolean; - protected executeMods(container: DependencyContainer): void; - sortModsLoadOrder(): string[]; - protected addMod(mod: string): Promise; - protected areModDependenciesFulfilled(mod: IPackageJsonData, loadedMods: Record): boolean; - protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; - protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; - protected getLoadOrder(mods: Record): Record; - getContainer(): DependencyContainer; -} diff --git a/Faupi-HideoutArchitect/server/types/loaders/PreAkiModLoader.d.ts b/Faupi-HideoutArchitect/server/types/loaders/PreAkiModLoader.d.ts index 6ded3c6..4ab1689 100644 --- a/Faupi-HideoutArchitect/server/types/loaders/PreAkiModLoader.d.ts +++ b/Faupi-HideoutArchitect/server/types/loaders/PreAkiModLoader.d.ts @@ -33,9 +33,20 @@ export declare class PreAkiModLoader implements IModLoader { protected importClass(name: string, filepath: string, container: DependencyContainer): void; protected importMods(): Promise; /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array + * Check for duplciate mods loaded, show error if duplicate mod found + * @param modPackageData dictionary of mod package.json data + */ + protected checkForDuplicateMods(modPackageData: Record): void; + /** + * Check for and return duplicate strings inside an array + * @param stringArray Array to check for duplicates + * @returns string array of duplicates, empty if none found + */ + protected getDuplicates(stringArray: string[]): string[]; + /** + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array */ protected getBrokenMods(mods: string[]): string[]; /** @@ -57,7 +68,12 @@ export declare class PreAkiModLoader implements IModLoader { protected addMod(mod: string): Promise; protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; protected getLoadOrder(mods: Record): Record; getContainer(): DependencyContainer; diff --git a/Faupi-HideoutArchitect/server/types/models/eft/common/IGlobals.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/common/IGlobals.d.ts index 9d28dbc..81e2023 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/common/IGlobals.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/common/IGlobals.d.ts @@ -1175,5 +1175,6 @@ export interface Preset { _name: string; _parent: string; _items: Item[]; + /** Default presets have this property */ _encyclopedia?: string; } diff --git a/Faupi-HideoutArchitect/server/types/models/eft/common/ILocationBase.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/common/ILocationBase.d.ts index b1dd448..78ade9a 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/common/ILocationBase.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/common/ILocationBase.d.ts @@ -137,7 +137,7 @@ export interface BotLocationModifier { VisibleDistance: number; } export interface MinMaxBot { - WildSpawnType: string; + WildSpawnType: WildSpawnType; max: number; min: number; } @@ -195,7 +195,7 @@ export interface Wave { BotPreset: string; BotSide: string; SpawnPoints: string; - WildSpawnType: string; + WildSpawnType: WildSpawnType; isPlayers: boolean; number: number; slots_max: number; @@ -203,3 +203,7 @@ export interface Wave { time_max: number; time_min: number; } +export declare enum WildSpawnType { + ASSAULT = "assault", + MARKSMAN = "marksman" +} diff --git a/Faupi-HideoutArchitect/server/types/models/eft/common/MemberCategory.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/common/MemberCategory.d.ts deleted file mode 100644 index 3bd9a21..0000000 --- a/Faupi-HideoutArchitect/server/types/models/eft/common/MemberCategory.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -export declare enum MemberCategory { - Default = 0, - Developer = 1, - UniqueId = 2, - Trader = 4, - Group = 8, - System = 16, - ChatModerator = 32, - ChatModeratorWithPermanentBan = 64, - UnitTest = 128, - Sherpa = 256, - Emissary = 512 -} diff --git a/Faupi-HideoutArchitect/server/types/models/eft/common/tables/IBotBase.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/common/tables/IBotBase.d.ts index 0ee468e..25cb861 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/common/tables/IBotBase.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/common/tables/IBotBase.d.ts @@ -28,6 +28,8 @@ export interface IBotBase { CarExtractCounts: CarExtractCounts; SurvivorClass: SurvivorClass; WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; } export interface Info { EntryPoint: string; @@ -66,13 +68,13 @@ export interface IBan { dateTime: number; } export declare enum BanType { - Chat = 0, - RagFair = 1, - Voip = 2, - Trading = 3, - Online = 4, - Friends = 5, - ChangeNickname = 6 + CHAT = 0, + RAGFAIR = 1, + VOIP = 2, + TRADING = 3, + ONLINE = 4, + FRIENDS = 5, + CHANGE_NICKNAME = 6 } export interface Customization { Head: string; @@ -312,11 +314,11 @@ export interface Notes { export interface CarExtractCounts { } export declare enum SurvivorClass { - Unknown = 0, - Neutralizer = 1, - Marauder = 2, - Paramedic = 3, - Survivor = 4 + UNKNOWN = 0, + NEUTRALIZER = 1, + MARAUDER = 2, + PARAMEDIC = 3, + SURVIVOR = 4 } export interface Quest { qid: string; diff --git a/Faupi-HideoutArchitect/server/types/models/eft/common/tables/ITemplateItem.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/common/tables/ITemplateItem.d.ts index 23a1a14..8569e61 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/common/tables/ITemplateItem.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/common/tables/ITemplateItem.d.ts @@ -34,6 +34,7 @@ export interface Props { LootExperience?: number; ExamineExperience?: number; HideEntrails?: boolean; + InsuranceDisabled?: boolean; RepairCost?: number; RepairSpeed?: number; ExtraSizeLeft?: number; @@ -79,7 +80,7 @@ export interface Props { HasShoulderContact?: boolean; SightingRange?: number; DoubleActionAccuracyPenaltyMult?: number; - ModesCount: any; + ModesCount?: any; DurabilityBurnModificator?: number; HeatFactor?: number; CoolFactor?: number; @@ -155,7 +156,7 @@ export interface Props { RigLayoutName?: string; MaxDurability?: number; armorZone?: string[]; - armorClass: any; + armorClass?: any; mousePenalty?: number; weaponErgonomicPenalty?: number; BluntThroughput?: number; @@ -206,6 +207,7 @@ export interface Props { IsOneoff?: boolean; MustBoltBeOpennedForExternalReload?: boolean; MustBoltBeOpennedForInternalReload?: boolean; + NoFiremodeOnBoltcatch?: boolean; BoltAction?: boolean; HipAccuracyRestorationDelay?: number; HipAccuracyRestorationSpeed?: number; @@ -252,8 +254,8 @@ export interface Props { foodUseTime?: number; foodEffectType?: string; StimulatorBuffs?: string; - effects_health: any; - effects_damage: any; + effects_health?: any; + effects_damage?: any; MaximumNumberOfUsage?: number; knifeHitDelay?: number; knifeHitSlashRate?: number; diff --git a/Faupi-HideoutArchitect/server/types/models/eft/common/tables/ITrader.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/common/tables/ITrader.d.ts index f0fe2b5..37b2d61 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/common/tables/ITrader.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/common/tables/ITrader.d.ts @@ -7,7 +7,7 @@ export interface ITrader { suits?: ISuit[]; } export interface ITraderBase { - refreshAssort: boolean; + refreshTraderRagfairOffers: boolean; _id: string; avatar: string; balance_dol: number; @@ -58,7 +58,7 @@ export interface Repair { quality: string; } export interface ITraderAssort { - nextResupply?: number; + nextResupply: number; items: Item[]; barter_scheme: Record; loyal_level_items: Record; @@ -67,6 +67,7 @@ export interface IBarterScheme { count: number; _tpl: string; onlyFunctional?: boolean; + sptQuestLocked?: boolean; } export interface ISuit { _id: string; diff --git a/Faupi-HideoutArchitect/server/types/models/eft/health/Effect.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/health/Effect.d.ts index 2f0adac..7eb3ffc 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/health/Effect.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/health/Effect.d.ts @@ -1,5 +1,5 @@ export declare enum Effect { - Fracture = "Fracture", - LightBleeding = "LightBleeding", - HeavyBleeding = "HeavyBleeding" + FRACTURE = "Fracture", + LIGHT_BLEEDING = "LightBleeding", + HEAVY_BLEEDING = "HeavyBleeding" } diff --git a/Faupi-HideoutArchitect/server/types/models/eft/health/IOffraidHealRequestData.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/health/IOffraidHealRequestData.d.ts index c242300..26b02bd 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/health/IOffraidHealRequestData.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/health/IOffraidHealRequestData.d.ts @@ -7,12 +7,12 @@ export interface IOffraidHealRequestData extends IBaseInteractionRequestData { time: number; } export declare enum BodyPart { - Head = 0, - Chest = 1, - Stomach = 2, - LeftArm = 3, - RightArm = 4, - LeftLeg = 5, - RightLeg = 6, - Common = 7 + HEAD = "Head", + CHEST = "Chest", + STOMACH = "Stomach", + LEFT_ARM = "LeftArm", + RIGHT_ARM = "RightArm", + LEFT_LEG = "LeftLeg", + RIGHT_LEG = "RightLeg", + COMMON = "Common" } diff --git a/Faupi-HideoutArchitect/server/types/models/eft/hideout/HideoutAreasEnum.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/hideout/HideoutAreasEnum.d.ts deleted file mode 100644 index 10f851b..0000000 --- a/Faupi-HideoutArchitect/server/types/models/eft/hideout/HideoutAreasEnum.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -export declare enum HideoutAreasEnum { - NOTSET = -1, - VENTS = 0, - SECURITY = 1, - LAVATORY = 2, - STASH = 3, - GENERATOR = 4, - HEATING = 5, - WATER_COLLECTOR = 6, - MEDSTATION = 7, - NUTRITION_UNIT = 8, - REST_SPACE = 9, - WORKBENCH = 10, - INTEL_CENTER = 11, - SHOOTING_RANGE = 12, - LIBRARY = 13, - SCAV_CASE = 14, - ILLUMINATION = 15, - PLACE_OF_FAME = 16, - AIR_FILTERING = 17, - SOLAR_POWER = 18, - BOOZE_GENERATOR = 19, - BITCOIN_FARM = 20, - CHRISTMAS_TREE = 21 -} diff --git a/Faupi-HideoutArchitect/server/types/models/eft/notifier/INotifier.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/notifier/INotifier.d.ts index 8c48260..b248636 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/notifier/INotifier.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/notifier/INotifier.d.ts @@ -1,9 +1,9 @@ export interface INotifierChannel { - "server": string; - "channel_id": string; - "url": string; - "notifierServer": string; - "ws": string; + server: string; + channel_id: string; + url: string; + notifierServer: string; + ws: string; } import { Message } from "../profile/IAkiProfile"; export interface INotification { diff --git a/Faupi-HideoutArchitect/server/types/models/eft/ragfair/IRagfairOffer.d.ts b/Faupi-HideoutArchitect/server/types/models/eft/ragfair/IRagfairOffer.d.ts index 63f655e..141b605 100644 --- a/Faupi-HideoutArchitect/server/types/models/eft/ragfair/IRagfairOffer.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/eft/ragfair/IRagfairOffer.d.ts @@ -15,6 +15,8 @@ export interface IRagfairOffer { name?: string; shortName?: string; loyaltyLevel: number; + buyRestrictionMax?: number; + buyRestrictionCurrent?: number; locked: boolean; unlimitedCount: boolean; summaryCost: number; diff --git a/Faupi-HideoutArchitect/server/types/models/enums/AmmoTypes.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/AmmoTypes.d.ts index b52ddcf..254b410 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/AmmoTypes.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/AmmoTypes.d.ts @@ -23,7 +23,7 @@ export declare enum Ammo762x54 { BT_GZH = "5e023d34e8a400319a28ed44", BS_GZH = "5e023d48186a883be655e551" } -export declare enum Ammo338Lapua { +export declare enum Ammo86x70 { TAC_X = "5fc382b6d6fa9c00c571bbc3", UCW = "5fc382c1016cce60e8341b20", AP = "5fc382a9d724d907e2077dab", @@ -85,13 +85,13 @@ export declare enum Ammo9x21 { PE_GZH = "5a26ac06c4a282000c5a90a8", BT_GZH = "5a26ac0ec4a28200741e1e18" } -export declare enum Ammo357Mag { +export declare enum Ammo9x33R { FMJ = "62330b3ed4dc74626d570b95", HOLLOW_POINT = "62330bfadc5883093563729b", SOFT_POINT = "62330c40bdd19b369e1e53d1", JACKET_HP = "62330c18744e5e31df12f516" } -export declare enum Ammo45ACP { +export declare enum Ammo1143x23ACP { MATCH_FMJ = "5e81f423763d9f754677bf2e", HYDRA_SHOK = "5efb0fc6aeb21837e749c801", LASERMATCH_FMJ = "5efb0d4f4bc50b58e81710f3", @@ -126,7 +126,7 @@ export declare enum Ammo556x45 { MK_318_MOD_0_SOST = "60194943740c5d77f6705eea", SSA_AP = "601949593ae8f707c4608daa" } -export declare enum Ammo300Blackout { +export declare enum Ammo762x35 { M62_TRACER = "619636be6db0f2477964e710", BCP_FMJ = "5fbe3ffdf8b6a877a729ea82", AP = "5fd20ff893a8961fc660a954", diff --git a/Faupi-HideoutArchitect/server/types/models/enums/BaseClasses.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/BaseClasses.d.ts index e733bca..36ebc71 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/BaseClasses.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/BaseClasses.d.ts @@ -25,6 +25,7 @@ export declare enum BaseClasses { SIGHTS = "5448fe7a4bdc2d6f028b456b", MEDS = "543be5664bdc2dd4348b4569", MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", KEY = "543be5e94bdc2df1348b4568", KEY_MECHANICAL = "5c99f98d86f7745c314214b3", KEYCARD = "5c164d2286f774194c5e69fa", @@ -66,8 +67,8 @@ export declare enum BaseClasses { LUBRICANT = "57864e4c24597754843f8723", BATTERY = "57864ee62459775490116fc1", ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", - REFLEX_SIGHT = "55818ad54bdc2ddc698b4569", TACTICAL_COMBO = "55818b164bdc2ddc698b456c", + FLASHLIGHT = "55818b084bdc2d5b648b4571", MAGAZINE = "5448bc234bdc2d3c308b4569", LIGHT_LASER = "55818b0e4bdc2dde698b456e", FLASH_HIDER = "550aa4bf4bdc2dd6348b456b", diff --git a/Faupi-HideoutArchitect/server/types/models/enums/BotAmount.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/BotAmount.d.ts index d0e1df1..9ef9cab 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/BotAmount.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/BotAmount.d.ts @@ -1,7 +1,7 @@ export declare enum BotAmount { - AsOnline = "AsOnline", - Low = "Low", - Medium = "Medium", - High = "High", - Horde = "Horde" + AS_ONLINE = "AsOnline", + LOW = "Low", + MEDIUM = "Medium", + HIGH = "High", + HORDE = "Horde" } diff --git a/Faupi-HideoutArchitect/server/types/models/enums/BotDifficulty.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/BotDifficulty.d.ts index c901bcf..80e45ad 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/BotDifficulty.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/BotDifficulty.d.ts @@ -1,8 +1,8 @@ export declare enum BotDifficulty { - AsOnline = "AsOnline", - Easy = "Easy", - Medium = "Medium", - Hard = "Hard", - Impossible = "Impossible", - Random = "Random" + AS_ONLINE = "AsOnline", + EASY = "Easy", + MEDIUM = "Medium", + HARD = "Hard", + IMPOSSIBLE = "Impossible", + RANDOM = "Random" } diff --git a/Faupi-HideoutArchitect/server/types/models/enums/ConfigTypes.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/ConfigTypes.d.ts index 61d6f99..468ece5 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/ConfigTypes.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/ConfigTypes.d.ts @@ -8,6 +8,7 @@ export declare enum ConfigTypes { IN_RAID = "aki-inraid", INSURANCE = "aki-insurance", INVENTORY = "aki-inventory", + ITEM = "aki-item", LOCALE = "aki-locale", LOCATION = "aki-location", MATCH = "aki-match", diff --git a/Faupi-HideoutArchitect/server/types/models/enums/ELocationName.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/ELocationName.d.ts index b56cc08..7ae7caa 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/ELocationName.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/ELocationName.d.ts @@ -1,5 +1,6 @@ export declare enum ELocationName { FACTORY_DAY = "factory4_day", + FACTORY_NIGHT = "factory4_night", BIGMAP = "bigmap", WOODS = "Woods", SHORELINE = "Shoreline", diff --git a/Faupi-HideoutArchitect/server/types/models/enums/MemberCategory.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/MemberCategory.d.ts index 3bd9a21..a81380e 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/MemberCategory.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/MemberCategory.d.ts @@ -1,13 +1,13 @@ export declare enum MemberCategory { - Default = 0, - Developer = 1, - UniqueId = 2, - Trader = 4, - Group = 8, - System = 16, - ChatModerator = 32, - ChatModeratorWithPermanentBan = 64, - UnitTest = 128, - Sherpa = 256, - Emissary = 512 + DEFAULT = 0, + DEVELOPER = 1, + UNIQUE_ID = 2, + TRADER = 4, + GROUP = 8, + SYSTEM = 16, + CHAT_MODERATOR = 32, + CHAT_MODERATOR_WITH_PERMANENT_BAN = 64, + UNIT_TEST = 128, + SHERPA = 256, + EMISSARY = 512 } diff --git a/Faupi-HideoutArchitect/server/types/models/enums/QuestRewardType.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/QuestRewardType.d.ts index 1d3db86..16f7e39 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/QuestRewardType.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/QuestRewardType.d.ts @@ -1,8 +1,8 @@ export declare enum QuestRewardType { - Skill = "Skill", - Experience = "Experience", - TraderStanding = "TraderStanding", - TraderUnlock = "TraderUnlock", - Item = "Item", - AssortmentUnlock = "AssortmentUnlock" + SKILL = "Skill", + EXPERIENCE = "Experience", + TRADER_STANDING = "TraderStanding", + TRADER_UNLOCK = "TraderUnlock", + ITEM = "Item", + ASSORTMENT_UNLOCK = "AssortmentUnlock" } diff --git a/Faupi-HideoutArchitect/server/types/models/enums/RaidMode.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/RaidMode.d.ts index c5a8cff..e20cf3f 100644 --- a/Faupi-HideoutArchitect/server/types/models/enums/RaidMode.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/enums/RaidMode.d.ts @@ -1,5 +1,5 @@ export declare enum RaidMode { - Online = "Online", - Local = "Local", - Coop = "Coop" + ONLINE = "Online", + LOCAL = "Local", + COOP = "Coop" } diff --git a/Faupi-HideoutArchitect/server/types/models/enums/WeaponTypes.d.ts b/Faupi-HideoutArchitect/server/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/Faupi-HideoutArchitect/server/types/models/external/mod.d.ts b/Faupi-HideoutArchitect/server/types/models/external/mod.d.ts deleted file mode 100644 index ecef460..0000000 --- a/Faupi-HideoutArchitect/server/types/models/external/mod.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DependencyContainer } from "./tsyringe"; -export interface IMod { - load: (container: DependencyContainer) => void; - delayedLoad: (container: DependencyContainer) => void; -} diff --git a/Faupi-HideoutArchitect/server/types/models/spt/bots/BotLootCache.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/bots/BotLootCache.d.ts index e185315..aedf7b0 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/bots/BotLootCache.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/bots/BotLootCache.d.ts @@ -11,13 +11,13 @@ export declare class BotLootCache { grenadeItems: ITemplateItem[]; } export declare enum LootCacheType { - Special = "Special", - Backpack = "Backpack", - Pocket = "Pocket", - Vest = "Vest", - Combined = "Combined", - HealingItems = "HealingItems", - DrugItems = "DrugItems", - StimItems = "StimItems", - GrenadeItems = "GrenadeItems" + SPECIAL = "Special", + BACKPACK = "Backpack", + POCKET = "Pocket", + VEST = "Vest", + COMBINED = "Combined", + HEALING_ITEMS = "HealingItems", + DRUG_ITEMS = "DrugItems", + STIM_ITEMS = "StimItems", + GRENADE_ITEMS = "GrenadeItems" } diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/IAirdropConfig.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/IAirdropConfig.d.ts index f4aee89..3edcbdd 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/config/IAirdropConfig.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/IAirdropConfig.d.ts @@ -1,14 +1,14 @@ +import { MinMax } from "../../common/MinMax"; import { IBaseConfig } from "./IBaseConfig"; export interface IAirdropConfig extends IBaseConfig { kind: "aki-airdrop"; airdropChancePercent: AirdropChancePercent; - airdropMinOpenHeight: number; - airdropMaxOpenHeight: number; planeMinFlyHeight: number; planeMaxFlyHeight: number; planeVolume: number; airdropMinStartTimeSeconds: number; airdropMaxStartTimeSeconds: number; + loot: AirdropLoot; } export interface AirdropChancePercent { bigmap: number; @@ -18,3 +18,13 @@ export interface AirdropChancePercent { interchange: number; reserve: number; } +export interface AirdropLoot { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; +} diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/IBotConfig.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/IBotConfig.d.ts index e171087..af8ceba 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/config/IBotConfig.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/IBotConfig.d.ts @@ -1,17 +1,31 @@ import { MinMax } from "../../common/MinMax"; import { IBaseConfig } from "./IBaseConfig"; +import { IBotDurability } from "./IBotDurability"; +import { IPmcConfig } from "./IPmcConfig"; export interface IBotConfig extends IBaseConfig { kind: "aki-bot"; + /** How many variants of each bot should be generated on raid start */ presetBatch: PresetBatch; + /** What bot types should be classified as bosses */ bosses: string[]; - durability: Durability; + /** Control weapon/armor durability min/max values for each bot type */ + durability: IBotDurability; + /** Control the weighting of how expensive an average loot item is on a PMC or Scav */ lootNValue: LootNvalue; + /** Control what bots are added to a bots revenge list key: bottype, value: bottypes to revenge on seeing their death */ revenge: Record; - pmc: PmcConfig; + /** PMC bot specific config settings */ + pmc: IPmcConfig; + /** Control how many items are allowed to spawn on a bot + * key: bottype, value: */ itemSpawnLimits: Record>; - equipment: Record; + /** Blacklist/whitelist items on a bot */ + equipment: Record; + /** Show a bots botType value after their name */ showTypeInNickname: boolean; - maxBotCap: number; + /** Max number of bots that can be spawned in a raid at any one time */ + maxBotCap: Record; + /** How many stacks of secret ammo should a bot have in its bot secure container */ secureContainerAmmoStackCount: number; } export interface PresetBatch { @@ -44,79 +58,23 @@ export interface PresetBatch { test: number; exUsec: number; } -export interface Durability { - default: DefaultDurability; - pmc: PmcDurability; - boss: BotDurability; - follower: BotDurability; - assault: BotDurability; - cursedassault: BotDurability; - marksman: BotDurability; - pmcbot: BotDurability; - exusec: BotDurability; - sectantpriest: BotDurability; - sectantwarrior: BotDurability; -} -export interface DefaultDurability { - armor: DefaultArmor; - weapon: WeaponDurability; -} -export interface DefaultArmor { - maxDelta: number; - minDelta: number; -} -export interface WeaponDurability { - lowestMax: number; - highestMax: number; - maxDelta: number; - minDelta: number; -} -export interface PmcDurability { - armor: PmcDurabilityArmor; - weapon: WeaponDurability; -} -export interface PmcDurabilityArmor { - lowestMaxPercent: number; - highestMaxPercent: number; - maxDelta: number; - minDelta: number; -} -export interface BotDurability { - armor: ArmorDurability; - weapon: WeaponDurability; -} -export interface ArmorDurability { - maxDelta: number; - minDelta: number; -} export interface LootNvalue { scav: number; pmc: number; } -export interface PmcConfig { - dynamicLoot: PmcDynamicLoot; - difficulty: string; - looseWeaponInBackpackChancePercent: number; - looseWeaponInBackpackLootMinMax: MinMax; - isUsec: number; - chanceSameSideIsHostilePercent: number; - usecType: string; - bearType: string; - maxBackpackLootTotalRub: number; - maxPocketLootTotalRub: number; - maxVestLootTotalRub: number; - convertIntoPmcChance: Record; - enemyTypes: string[]; -} -export interface PmcDynamicLoot { - whitelist: string[]; - blacklist: string[]; - moneyStackLimits: Record; -} -export interface Equipment { +export interface EquipmentFilters { + weaponModLimits: ModLimits; + randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; blacklist: EquipmentFilterDetails[]; whitelist: EquipmentFilterDetails[]; } +export interface ModLimits { + /** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */ + scopeLimit?: number; + /** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */ + lightLaserLimit?: number; +} export interface EquipmentFilterDetails { levelRange: MinMax; equipment: Record; diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/IBotDurability.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/IBotDurability.d.ts new file mode 100644 index 0000000..38a47cc --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/IBotDurability.d.ts @@ -0,0 +1,47 @@ +export interface IBotDurability { + default: DefaultDurability; + pmc: PmcDurability; + boss: BotDurability; + follower: BotDurability; + assault: BotDurability; + cursedassault: BotDurability; + marksman: BotDurability; + pmcbot: BotDurability; + exusec: BotDurability; + gifter: BotDurability; + sectantpriest: BotDurability; + sectantwarrior: BotDurability; +} +/** Durability values to be used when a more specific bot type cant be found */ +export interface DefaultDurability { + armor: DefaultArmor; + weapon: WeaponDurability; +} +export interface DefaultArmor { + maxDelta: number; + minDelta: number; +} +export interface WeaponDurability { + lowestMax: number; + highestMax: number; + maxDelta: number; + minDelta: number; +} +export interface PmcDurability { + armor: PmcDurabilityArmor; + weapon: WeaponDurability; +} +export interface PmcDurabilityArmor { + lowestMaxPercent: number; + highestMaxPercent: number; + maxDelta: number; + minDelta: number; +} +export interface BotDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface ArmorDurability { + maxDelta: number; + minDelta: number; +} diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/IHideoutConfig.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/IHideoutConfig.d.ts index 36d6246..f232052 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/config/IHideoutConfig.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/IHideoutConfig.d.ts @@ -2,6 +2,10 @@ import { IBaseConfig } from "./IBaseConfig"; export interface IHideoutConfig extends IBaseConfig { kind: "aki-hideout"; runIntervalSeconds: number; - fuelDrainRateMultipler: number; hoursForSkillCrafting: number; + generatorSpeedWithoutFuel: number; + generatorFuelFlowRate: number; + airFilterUnitFlowRate: number; + /** SEE HIDEOUTHELPER BEFORE CHANGING CONFIG */ + gpuBoostRate: number; } diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/IItemConfig.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/IItemConfig.d.ts new file mode 100644 index 0000000..5ecccc2 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/IItemConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IItemConfig extends IBaseConfig { + kind: "aki-item"; + blacklist: string[]; +} diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/IPmcConfig.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/IPmcConfig.d.ts new file mode 100644 index 0000000..9db2ba1 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/IPmcConfig.d.ts @@ -0,0 +1,26 @@ +import { MinMax } from "../../common/MinMax"; +export interface IPmcConfig { + dynamicLoot: DynamicLoot; + useDifficultyOverride: boolean; + difficulty: string; + looseWeaponInBackpackChancePercent: number; + looseWeaponInBackpackLootMinMax: MinMax; + isUsec: number; + chanceSameSideIsHostilePercent: number; + /** key: location, value: type for usec/bear */ + pmcType: Record; + maxBackpackLootTotalRub: number; + maxPocketLootTotalRub: number; + maxVestLootTotalRub: number; + convertIntoPmcChance: Record; + enemyTypes: string[]; +} +export interface PmcTypes { + usec: string; + bear: string; +} +export interface DynamicLoot { + whitelist: string[]; + blacklist: string[]; + moneyStackLimits: Record; +} diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/IQuestConfig.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/IQuestConfig.d.ts index be4a97b..45c9aae 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/config/IQuestConfig.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/IQuestConfig.d.ts @@ -4,6 +4,8 @@ export interface IQuestConfig extends IBaseConfig { kind: "aki-quest"; redeemTime: number; repeatableQuests: IRepeatableQuestConfig[]; + bearOnlyQuests: string[]; + usecOnlyQuests: string[]; } export interface IRepeatableQuestConfig { name: string; @@ -15,6 +17,10 @@ export interface IRepeatableQuestConfig { locations: Record; traderWhitelist: ITraderWhitelist[]; questConfig: IQuestConfig; + /** Item base types to block when generating rewards */ + rewardBaseTypeBlacklist: string[]; + /** Item tplIds to ignore when generating rewards */ + rewardBlacklist: string[]; } export interface IRewardScaling { levels: number[]; diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/IRagfairConfig.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/IRagfairConfig.d.ts index c24e617..c1b8763 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/config/IRagfairConfig.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/IRagfairConfig.d.ts @@ -12,6 +12,7 @@ export interface Sell { chance: Chance; time: Time; reputation: Reputation; + simulatedSellHours: number; } export interface Chance { base: number; @@ -27,11 +28,18 @@ export interface Reputation { gain: number; loss: number; } +export declare class OfferAdjustment { + maxPriceDifferenceBelowHandbookPercent: number; + handbookPriceMultipier: number; + priceThreshholdRub: number; +} export interface Dynamic { + offerAdjustment: OfferAdjustment; expiredOfferThreshold: number; offerItemCount: MinMax; price: MinMax; presetPrice: MinMax; + showDefaultPresetsOnly: boolean; endTimeSeconds: MinMax; condition: Condition; stackablePercent: MinMax; diff --git a/Faupi-HideoutArchitect/server/types/models/spt/config/ITraderConfig.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/config/ITraderConfig.d.ts index c8e8044..6b1c1e3 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/config/ITraderConfig.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/config/ITraderConfig.d.ts @@ -12,8 +12,10 @@ export interface UpdateTime { seconds: number; } export interface FenceConfig { + partialRefreshTimeSeconds: number; + partialRefreshChangePercent: number; assortSize: number; - maxPresetsCount: number; + maxPresetsPercent: number; presetPriceMult: number; blacklist: string[]; } diff --git a/Faupi-HideoutArchitect/server/types/models/spt/helpers/Traders.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/helpers/Traders.d.ts deleted file mode 100644 index e935d29..0000000 --- a/Faupi-HideoutArchitect/server/types/models/spt/helpers/Traders.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare const enum Traders { - PRAPOR = "54cb50c76803fa8b248b4571", - THERAPIST = "54cb57776803fa99248b456e", - FENCE = "579dc571d53a0658a154fbec", - SKIER = "58330581ace78e27b8b10cee", - PEACEKEEPER = "5935c25fb3acc3127c3d8cd9", - MECHANIC = "5a7c2eca46aef81a7ca2145d", - RAGMAN = "5ac3b934156ae10c4430e83c", - JAEGER = "5c0647fdd443bc2504c2d371" -} diff --git a/Faupi-HideoutArchitect/server/types/models/spt/location/AirDropLootItem.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/location/AirDropLootItem.d.ts new file mode 100644 index 0000000..da791ff --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/models/spt/location/AirDropLootItem.d.ts @@ -0,0 +1,6 @@ +export declare class AirDropLootItem { + id: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/Faupi-HideoutArchitect/server/types/models/spt/logging/LogBackgroundColor.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/logging/LogBackgroundColor.d.ts index 87e08a9..1dd369b 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/logging/LogBackgroundColor.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/logging/LogBackgroundColor.d.ts @@ -1,11 +1,11 @@ export declare enum LogBackgroundColor { - default = "", - black = "blackBG", - red = "redBG", - green = "greenBG", - yellow = "yellowBG", - blue = "blueBG", - magenta = "magentaBG", - cyan = "cyanBG", - white = "whiteBG" + DEFAULT = "", + BLACK = "blackBG", + RED = "redBG", + GREEN = "greenBG", + YELLOW = "yellowBG", + BLUE = "blueBG", + MAGENTA = "magentaBG", + CYAN = "cyanBG", + WHITE = "whiteBG" } diff --git a/Faupi-HideoutArchitect/server/types/models/spt/logging/LogTextColor.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/logging/LogTextColor.d.ts index 7147ae3..6c7abf3 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/logging/LogTextColor.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/logging/LogTextColor.d.ts @@ -1,11 +1,11 @@ export declare enum LogTextColor { - black = "black", - red = "red", - green = "green", - yellow = "yellow", - blue = "blue", - magenta = "magenta", - cyan = "cyan", - white = "white", - gray = "" + BLACK = "black", + RED = "red", + GREEN = "green", + YELLOW = "yellow", + BLUE = "blue", + MAGENTA = "magenta", + CYAN = "cyan", + WHITE = "white", + GRAY = "" } diff --git a/Faupi-HideoutArchitect/server/types/models/spt/server/ILocaleBase.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/server/ILocaleBase.d.ts index 8887c06..6e20b89 100644 --- a/Faupi-HideoutArchitect/server/types/models/spt/server/ILocaleBase.d.ts +++ b/Faupi-HideoutArchitect/server/types/models/spt/server/ILocaleBase.d.ts @@ -13,10 +13,10 @@ export interface ILocaleGlobalBase { season: Record; customization: Record; repeatableQuest: Record; - templates: ILocaleTemplateBase; - locations: ILocaleLocationsBase; - banners: ILocaleBannersBase; - trading: ILocaleTradingBase; + templates: Record; + locations: Record; + banners: Record; + trading: Record; } export interface ILocaleQuest { name: string; @@ -31,23 +31,11 @@ export interface ILocaleQuest { export interface ILocalePreset { Name: string; } -export interface ILocaleTemplateBase { - templates: Record; -} -export interface ILocaleLocationsBase { - locations: Record; -} -export interface ILocaleBannersBase { - locations: Record; -} export interface ILocaleProps { Name: string; ShortName: string; Description: string; } -export interface ILocaleTradingBase { - locations: Record; -} export interface ILocaleTradingProps { FullName: string; FirstName: string; diff --git a/Faupi-HideoutArchitect/server/types/models/spt/services/LootItem.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/services/LootItem.d.ts new file mode 100644 index 0000000..acb7606 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/models/spt/services/LootItem.d.ts @@ -0,0 +1,6 @@ +export declare class LootItem { + id?: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/Faupi-HideoutArchitect/server/types/models/spt/services/LootRequest.d.ts b/Faupi-HideoutArchitect/server/types/models/spt/services/LootRequest.d.ts new file mode 100644 index 0000000..1da8770 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/models/spt/services/LootRequest.d.ts @@ -0,0 +1,11 @@ +import { MinMax } from "../../common/MinMax"; +export declare class LootRequest { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; +} diff --git a/Faupi-HideoutArchitect/server/types/servers/DatabaseServer.d.ts b/Faupi-HideoutArchitect/server/types/servers/DatabaseServer.d.ts index aa152d0..b3d29e9 100644 --- a/Faupi-HideoutArchitect/server/types/servers/DatabaseServer.d.ts +++ b/Faupi-HideoutArchitect/server/types/servers/DatabaseServer.d.ts @@ -2,5 +2,5 @@ import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; export declare class DatabaseServer { protected tableData: IDatabaseTables; getTables(): IDatabaseTables; - setTables(any: any): void; + setTables(tableData: IDatabaseTables): void; } diff --git a/Faupi-HideoutArchitect/server/types/servers/RagfairServer.d.ts b/Faupi-HideoutArchitect/server/types/servers/RagfairServer.d.ts index bc86cdb..c93864b 100644 --- a/Faupi-HideoutArchitect/server/types/servers/RagfairServer.d.ts +++ b/Faupi-HideoutArchitect/server/types/servers/RagfairServer.d.ts @@ -1,4 +1,6 @@ import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { TraderAssortHelper } from "../helpers/TraderAssortHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; @@ -12,11 +14,18 @@ export declare class RagfairServer { protected ragfairOfferService: RagfairOfferService; protected ragfairCategoriesService: RagfairCategoriesService; protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected traderHelper: TraderHelper; + protected traderAssortHelper: TraderAssortHelper; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; - constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, configServer: ConfigServer); + constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, traderHelper: TraderHelper, traderAssortHelper: TraderAssortHelper, configServer: ConfigServer); load(): void; update(): void; + /** + * Get traders who need to be periodically refreshed + * @returns string array of traders + */ + protected getUpdateableTraders(): string[]; getAllCategories(): Record; getBespokeCategories(offers: IRagfairOffer[]): Record; /** diff --git a/Faupi-HideoutArchitect/server/types/services/BotEquipmentFilterService.d.ts b/Faupi-HideoutArchitect/server/types/services/BotEquipmentFilterService.d.ts index e49645b..632f961 100644 --- a/Faupi-HideoutArchitect/server/types/services/BotEquipmentFilterService.d.ts +++ b/Faupi-HideoutArchitect/server/types/services/BotEquipmentFilterService.d.ts @@ -1,12 +1,12 @@ import { IBotType } from "../models/eft/common/tables/IBotType"; -import { Equipment, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; +import { EquipmentFilters, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; export declare class BotEquipmentFilterService { protected logger: ILogger; protected configServer: ConfigServer; protected botConfig: IBotConfig; - protected botEquipmentFilterlists: Record; + protected botEquipmentFilterlists: Record; constructor(logger: ILogger, configServer: ConfigServer); /** * Filter a bots data to exclude equipment and cartridges defines in the botConfig @@ -22,7 +22,7 @@ export declare class BotEquipmentFilterService { * @param playerLevel Level of the player * @returns EquipmentBlacklistDetails object */ - protected getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; + getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; /** * Get the whitelist for a specific bot type that's within the players level * @param botRole Bot type diff --git a/Faupi-HideoutArchitect/server/types/services/BotGenerationCacheService.d.ts b/Faupi-HideoutArchitect/server/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..670c583 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,52 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected botHelper: BotHelper; + protected storedBots: IBotBase[]; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore + */ + storeBots(botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param role role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(role: string): IBotBase[]; + /** + * Find a bot by its index from cache + * @param indexOfBotToReturn index to find bot by + * @returns bot profile + */ + protected getBotFromCache(indexOfBotToReturn: number): IBotBase; + /** + * Remove bot profile by index from cache + * @param indexOfBotToReturn Index of bot profile to remove + */ + protected removeBotFromCache(indexOfBotToReturn: number): void; + /** + * Get index of bot profile that matches criteria + * @param role role of bot we want + * @param getPmc is requested bot a pmc + * @returns index of found bot + */ + protected getIndexOfBotToReturn(role: string, getPmc: boolean): number; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have bots + * @returns true if empty + */ + cacheIsEmpty(): boolean; +} diff --git a/Faupi-HideoutArchitect/server/types/services/BotLootCacheService.d.ts b/Faupi-HideoutArchitect/server/types/services/BotLootCacheService.d.ts index cc71eee..00ffb9c 100644 --- a/Faupi-HideoutArchitect/server/types/services/BotLootCacheService.d.ts +++ b/Faupi-HideoutArchitect/server/types/services/BotLootCacheService.d.ts @@ -34,6 +34,17 @@ export declare class BotLootCacheService { * @param isPmc Is the bot a PMC (alteres what loot is cached) */ protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; /** * Ammo/grenades have this property * @param props diff --git a/Faupi-HideoutArchitect/server/types/services/FenceService.d.ts b/Faupi-HideoutArchitect/server/types/services/FenceService.d.ts index 79058c6..23fbf52 100644 --- a/Faupi-HideoutArchitect/server/types/services/FenceService.d.ts +++ b/Faupi-HideoutArchitect/server/types/services/FenceService.d.ts @@ -11,29 +11,109 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { ItemFilterService } from "./ItemFilterService"; +/** + * Handle actions surrounding Fence + * e.g. generating or refreshing assorts / get next refresh time + */ export declare class FenceService { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; protected randomUtil: RandomUtil; protected databaseServer: DatabaseServer; protected handbookHelper: HandbookHelper; protected itemHelper: ItemHelper; protected presetHelper: PresetHelper; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected fenceAssort: ITraderAssort; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, configServer: ConfigServer); + protected nextMiniRefreshTimestamp: number; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, itemFilterService: ItemFilterService, configServer: ConfigServer); protected setFenceAssort(fenceAssort: ITraderAssort): void; - getFenceAssorts(): ITraderAssort; - hasExpiredCache(refreshAssort: boolean): boolean; - generateFenceAssortCache(pmcData: IPmcData): void; /** - * Get the fence level the passed in profile has + * Get assorts player can purchase + * Adjust prices based on fence level of player + * @param pmcProfile Player profile + * @returns ITraderAssort + */ + getFenceAssorts(pmcProfile: IPmcData): ITraderAssort; + /** + * Get fence assorts with no price adjustments based on fence rep + * @returns ITraderAssort + */ + getRawFenceAssorts(): ITraderAssort; + /** + * Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json + * @returns true if it needs a partial refresh + */ + needsPartialRefresh(): boolean; + /** + * Replace a percentage of fence assorts with freshly generated items + */ + performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; + /** + * Choose an item (not mod) at random and remove from assorts + */ + protected removeRandomItemFromAssorts(): void; + /** + * Get an integer rounded count of items to replace based on percentrage from traderConfig value + * @param totalItemCount total item count + * @returns rounded int of items to replace + */ + protected getCountOfItemsToReplace(totalItemCount: number): number; + /** + * Get the count of items fence offers + * @returns number + */ + getOfferCount(): number; + /** + * Create a trader assort for fence + */ + generateFenceAssortCache(): void; + /** + * Create skeleton to hold assort items + * @returns ITraderAssort object + */ + protected createBaseTraderAssortItem(): ITraderAssort; + /** + * Hydrate result parameter object with generated assorts + * @param assortCount Number of assorts to generate + * @param assorts object to add assorts to + */ + protected createAssorts(assortCount: number, assorts: ITraderAssort): void; + /** + * Get the next update timestamp for fence + * @returns future timestamp + */ + getNextFenceUpdateTimestamp(): number; + /** + * Get fence refresh time in seconds + */ + protected getFenceRefreshTime(): number; + /** + * Get fence level the passed in profile has * @param pmcData Player profile - * @returns FenceLevel + * @returns FenceLevel object */ getFenceInfo(pmcData: IPmcData): FenceLevel; + /** + * Remove an assort from fence by id + * @param assortIdToRemove assort id to remove from fence assorts + */ removeFenceOffer(assortIdToRemove: string): void; - updateFenceOffers(pmcData: IPmcData): void; } diff --git a/Faupi-HideoutArchitect/server/types/services/InsuranceService.d.ts b/Faupi-HideoutArchitect/server/types/services/InsuranceService.d.ts index 171bf10..6be8a2f 100644 --- a/Faupi-HideoutArchitect/server/types/services/InsuranceService.d.ts +++ b/Faupi-HideoutArchitect/server/types/services/InsuranceService.d.ts @@ -2,6 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper"; import { SecureContainerHelper } from "../helpers/SecureContainerHelper"; import { TraderHelper } from "../helpers/TraderHelper"; import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; import { Item } from "../models/eft/common/tables/IItem"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; @@ -44,8 +45,22 @@ export declare class InsuranceService { * @param mapId Id of the map player died/exited that caused the insurance to be issued on */ sendInsuredItems(pmcData: IPmcData, sessionID: string, mapId: string): void; + /** + * Store lost gear post-raid inside profile + * @param pmcData player profile to store gear in + * @param offraidData post-raid request object + * @param preRaidGear gear player wore prior to raid + * @param sessionID Session id + */ storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; - protected addGearToSend(pmcData: IPmcData, insuredItem: any, actualItem: any, sessionID: string): any; + /** + * Add gear item to InsuredItems array in player profile + * @param pmcData profile to store item in + * @param insuredItem Item to store in profile + * @param actualItem item to store + * @param sessionID Session id + */ + protected addGearToSend(pmcData: IPmcData, insuredItem: InsuredItem, actualItem: Item, sessionID: string): void; getPremium(pmcData: IPmcData, inventoryItem: Item, traderId: string): number; } diff --git a/Faupi-HideoutArchitect/server/types/services/ItemFilterService.d.ts b/Faupi-HideoutArchitect/server/types/services/ItemFilterService.d.ts new file mode 100644 index 0000000..c9c8ef3 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/services/ItemFilterService.d.ts @@ -0,0 +1,24 @@ +import { IItemConfig } from "../models/spt/config/IItemConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** Centralise the handling of blacklisting items, uses blacklist found in config/item.json */ +export declare class ItemFilterService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected blacklist: string[]; + protected itemConfig: IItemConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Check if the provided template id is blacklisted in config/item.json + * @param tpl template id + * @returns true if blacklisted + */ + isItemBlacklisted(tpl: string): boolean; + /** + * Return every template id blacklisted in config/item.json + * @returns string array of blacklisted tempalte ids + */ + getBlacklistedItems(): string[]; +} diff --git a/Faupi-HideoutArchitect/server/types/services/PmcAiService.d.ts b/Faupi-HideoutArchitect/server/types/services/PmcAiService.d.ts new file mode 100644 index 0000000..0690f1f --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/services/PmcAiService.d.ts @@ -0,0 +1,27 @@ +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +/** Storing/retreving pmcRoles set at the start of a raid - its done at that point as we know what location the player is heading to */ +export declare class PmcAiService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected usecRole: string; + protected bearRole: string; + constructor(logger: ILogger, configServer: ConfigServer); + /** + * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) + * @param pmcSide eft side (usec/bear) + * @returns pmc side as defined in config + */ + getPmcRole(pmcSide: "usec" | "bear" | string): string; + /** + * Set the roles for pmcs + * @param location map location to look up and use as pmc types + */ + setPmcRolesByLocation(location: string): void; + /** + * Clear the saved role from usec/bear PMCs + */ + clearPmcRoles(): void; +} diff --git a/Faupi-HideoutArchitect/server/types/services/ProfileFixerService.d.ts b/Faupi-HideoutArchitect/server/types/services/ProfileFixerService.d.ts index ed1dec7..9cb5a38 100644 --- a/Faupi-HideoutArchitect/server/types/services/ProfileFixerService.d.ts +++ b/Faupi-HideoutArchitect/server/types/services/ProfileFixerService.d.ts @@ -45,6 +45,11 @@ export declare class ProfileFixerService { * @param pmcProfile Profile to find and remove slots from */ protected removeResourcesFromSlotsInHideoutWithoutLocationIndexValue(pmcProfile: IPmcData): void; + /** + * Hideout slots need to be in a specific order, locationIndex in ascending order + * @param pmcProfile profile to edit + */ + protected reorderHideoutAreasWithResouceInputs(pmcProfile: IPmcData): void; /** * add in objects equal to the number of slots * @param areaType area to check diff --git a/Faupi-HideoutArchitect/server/types/services/ProfileSnapshotService.d.ts b/Faupi-HideoutArchitect/server/types/services/ProfileSnapshotService.d.ts new file mode 100644 index 0000000..445ffd0 --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/services/ProfileSnapshotService.d.ts @@ -0,0 +1,30 @@ +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class ProfileSnapshotService { + protected jsonUtil: JsonUtil; + protected storedProfileSnapshots: Record; + constructor(jsonUtil: JsonUtil); + /** + * Store a profile into an in-memory object + * @param sessionID session id - acts as the key + * @param profile - profile to save + */ + storeProfileSnapshot(sessionID: string, profile: IAkiProfile): void; + /** + * Retreve a stored profile + * @param sessionID key + * @returns A player profile object + */ + getProfileSnapshot(sessionID: string): IAkiProfile; + /** + * Does a profile exists against the provided key + * @param sessionID key + * @returns true if exists + */ + hasProfileSnapshot(sessionID: string): boolean; + /** + * Remove a stored profile by key + * @param sessionID key + */ + clearProfileSnapshot(sessionID: string): void; +} diff --git a/Faupi-HideoutArchitect/server/types/services/RagfairOfferService.d.ts b/Faupi-HideoutArchitect/server/types/services/RagfairOfferService.d.ts index 7398a8f..f9e3a34 100644 --- a/Faupi-HideoutArchitect/server/types/services/RagfairOfferService.d.ts +++ b/Faupi-HideoutArchitect/server/types/services/RagfairOfferService.d.ts @@ -24,7 +24,6 @@ export declare class RagfairOfferService { protected httpResponse: HttpResponseUtil; protected configServer: ConfigServer; protected playerOffersLoaded: boolean; - protected toUpdate: Record; protected expiredOffers: Item[]; protected offers: IRagfairOffer[]; protected ragfairConfig: IRagfairConfig; @@ -38,8 +37,6 @@ export declare class RagfairOfferService { getOffersOfType(templateId: string): IRagfairOffer[]; addOffer(offer: IRagfairOffer): void; addOfferToExpired(staleOffer: IRagfairOffer): void; - setTraderUpdateStatus(traderId: string, shouldUpdate: boolean): void; - shouldTraderBeUpdated(traderID: string): boolean; getExpiredOfferCount(): number; /** * Get an array of expired items not yet processed into new offers @@ -53,12 +50,15 @@ export declare class RagfairOfferService { * @returns offer exists - true */ doesOfferExist(offerId: string): boolean; - getTraders(): Record; - flagTraderForUpdate(expiredOfferUserId: string): void; removeOfferById(offerId: string): void; removeOfferStack(offerID: string, amount: number): void; removeAllOffersByTrader(traderId: string): void; - addTradersToUpdateList(): void; + /** + * Do the trader offers on flea need to be refreshed + * @param traderID Trader to check + * @returns true if they do + */ + traderOffersNeedRefreshing(traderID: string): boolean; addPlayerOffers(): void; expireStaleOffers(): void; /** diff --git a/Faupi-HideoutArchitect/server/types/services/RagfairPriceService.d.ts b/Faupi-HideoutArchitect/server/types/services/RagfairPriceService.d.ts index 679fe1d..466c9e3 100644 --- a/Faupi-HideoutArchitect/server/types/services/RagfairPriceService.d.ts +++ b/Faupi-HideoutArchitect/server/types/services/RagfairPriceService.d.ts @@ -27,6 +27,20 @@ export declare class RagfairPriceService { getDynamicPrice(itemTpl: string): number; getAllFleaPrices(): Record; getFleaPriceForItem(tplId: string): number; + /** + * Check to see if an items price is below its handbook price and adjust accoring to values set to config/ragfair.json + * @param itemPrice price of item + * @param itemTpl item template Id being checked + * @returns adjusted price value in roubles + */ + protected adjustPriceIfBelowHandbook(itemPrice: number, itemTpl: string): number; + /** + * Get the percentage difference between two values + * @param a numerical value a + * @param b numerical value b + * @returns different in percent + */ + protected getPriceDifference(a: number, b: number): number; getStaticPriceForItem(tplId: string): number; getBarterPrice(barterScheme: IBarterScheme[]): number; getDynamicOfferPrice(items: Item[], desiredCurrency: string): number; diff --git a/Faupi-HideoutArchitect/server/types/services/RepairService.d.ts b/Faupi-HideoutArchitect/server/types/services/RepairService.d.ts new file mode 100644 index 0000000..3e6077c --- /dev/null +++ b/Faupi-HideoutArchitect/server/types/services/RepairService.d.ts @@ -0,0 +1,75 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected itemEventRouter: ItemEventRouter; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + repairConfig: IRepairConfig; + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + * @param output IItemEventRouterResponse + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData, output: IItemEventRouterResponse): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; +} diff --git a/Faupi-HideoutArchitect/server/types/services/TraderAssortService.d.ts b/Faupi-HideoutArchitect/server/types/services/TraderAssortService.d.ts index 5ba2d05..03b4e12 100644 --- a/Faupi-HideoutArchitect/server/types/services/TraderAssortService.d.ts +++ b/Faupi-HideoutArchitect/server/types/services/TraderAssortService.d.ts @@ -2,5 +2,10 @@ import { ITraderAssort } from "../models/eft/common/tables/ITrader"; export declare class TraderAssortService { protected pristineTraderAssorts: Record; getPristineTraderAssort(traderId: string): ITraderAssort; + /** + * Store trader assorts inside a class property + * @param traderId Traderid to store assorts against + * @param assort Assorts to store + */ setPristineTraderAssort(traderId: string, assort: ITraderAssort): void; } diff --git a/Faupi-HideoutArchitect/server/types/utils/HashUtil.d.ts b/Faupi-HideoutArchitect/server/types/utils/HashUtil.d.ts index bacbf2a..a8500e1 100644 --- a/Faupi-HideoutArchitect/server/types/utils/HashUtil.d.ts +++ b/Faupi-HideoutArchitect/server/types/utils/HashUtil.d.ts @@ -4,8 +4,18 @@ import { TimeUtil } from "./TimeUtil"; export declare class HashUtil { protected timeUtil: TimeUtil; constructor(timeUtil: TimeUtil); + /** + * Create a 24 character id using the sha256 algorithm + current timestamp + * @returns 24 character hash + */ generate(): string; generateMd5ForData(data: string): string; generateSha1ForData(data: string): string; + /** + * Create a hash for the data parameter + * @param algorithm algorithm to use to hash + * @param data data to be hashed + * @returns hash value + */ generateHashForData(algorithm: string, data: crypto.BinaryLike): string; } diff --git a/Faupi-HideoutArchitect/server/types/utils/RandomUtil.d.ts b/Faupi-HideoutArchitect/server/types/utils/RandomUtil.d.ts index c24dd60..633e472 100644 --- a/Faupi-HideoutArchitect/server/types/utils/RandomUtil.d.ts +++ b/Faupi-HideoutArchitect/server/types/utils/RandomUtil.d.ts @@ -136,7 +136,7 @@ export declare class RandomUtil { * Drawing can be with or without replacement * @param {array} list The array we want to draw randomly from * @param {integer} count The number of times we want to draw - * @param {boolean} replacement Draw with ot without replacement from the input array + * @param {boolean} replacement Draw with or without replacement from the input array * @return {array} Array consisting of N random elements */ drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; @@ -150,4 +150,10 @@ export declare class RandomUtil { */ drawRandomFromDict(dict: any, count?: number, replacement?: boolean): any[]; getBiasedRandomNumber(min: number, max: number, shift: number, n: number): number; + /** + * Fisher-Yates shuffle an array + * @param array Array to shuffle + * @returns Shuffled array + */ + shuffle(array: Array): Array; } diff --git a/Faupi-HideoutArchitect/server/types/utils/TimeUtil.d.ts b/Faupi-HideoutArchitect/server/types/utils/TimeUtil.d.ts index eed4e6d..1367e26 100644 --- a/Faupi-HideoutArchitect/server/types/utils/TimeUtil.d.ts +++ b/Faupi-HideoutArchitect/server/types/utils/TimeUtil.d.ts @@ -1,9 +1,16 @@ +/** + * Utility class to handle time related problems + */ export declare class TimeUtil { static readonly oneHourAsSeconds = 3600; formatTime(date: Date): string; formatDate(date: Date): string; getDate(): string; getTime(): string; + /** + * Get timestamp in seconds + * @returns + */ getTimestamp(): number; /** * mail in eft requires time be in a specific format @@ -15,4 +22,10 @@ export declare class TimeUtil { * @returns current date in format: 00.00.0000 (dd.mm.yyyy) */ getDateMailFormat(): string; + /** + * Convert hours into seconds + * @param hours hours to convert to seconds + * @returns number + */ + getHoursAsSeconds(hours: number): number; } diff --git a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/bepInEx/plugins/Faupi-MunitionsExpert.dll b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/bepInEx/plugins/Faupi-MunitionsExpert.dll similarity index 97% rename from Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/bepInEx/plugins/Faupi-MunitionsExpert.dll rename to Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/bepInEx/plugins/Faupi-MunitionsExpert.dll index 31b857c895e71217849d05e563ae0a4b5bf9b98a..f63297718b627e448b93cedf317a62766067d2ce 100644 GIT binary patch delta 113 zcmZojX-JvS!D3^-{^!P?5EX%X4XZawm-aYp{!|j&`p%1e^9PkP%seIx5b$NS_m9aZ zGy(+j&al*Q`sMoUtpD%H@uK?OWDU)Q3Q$3wN~j=6bt&g38~$n6UpUrFP1^iYQ=9_; Du5mE} delta 113 zcmZojX-JvS!J>Cg{^Q1;5EX&>>rGmlG~K-x&un~Jx32B@<_{`on0bsDAmFO(lAg&Y zGy()Xr)HKt+;H7@o!f!O=0(qrP1ev{r~nnz&4UU8Rr4&qb+`Ks!+n;dU)S9>ztj}x F001fiG@<|i diff --git a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/LICENSE.txt b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/LICENSE.txt similarity index 100% rename from Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/LICENSE.txt rename to Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/LICENSE.txt diff --git a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/package.json b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/package.json similarity index 95% rename from Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/package.json rename to Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/package.json index 80566a2..977a01d 100644 --- a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/package.json +++ b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/package.json @@ -1,10 +1,10 @@ { "name": "MunitionsExpert", "author": "Faupi", - "version": "1.6.3", + "version": "1.6.4", "license": "NCSA Open Source", "main": "./src/MunitionsExpert.js", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "updatedBy": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/res/armorDamage.png b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/res/armorDamage.png similarity index 100% rename from Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/res/armorDamage.png rename to Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/res/armorDamage.png diff --git a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/res/ricochet.png b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/res/ricochet.png similarity index 100% rename from Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/res/ricochet.png rename to Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/res/ricochet.png diff --git a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/res/translations.json b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/res/translations.json similarity index 100% rename from Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/res/translations.json rename to Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/res/translations.json diff --git a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/src/MunitionsExpert.ts b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/src/MunitionsExpert.ts similarity index 98% rename from Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/src/MunitionsExpert.ts rename to Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/src/MunitionsExpert.ts index c90c240..cb25940 100644 --- a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/src/MunitionsExpert.ts +++ b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/src/MunitionsExpert.ts @@ -69,7 +69,7 @@ class MunitionsExpert implements IPreAkiLoadMod, IPostAkiLoadMod url: "/MunitionsExpert/GetInfo", action: (url, info, sessionId, output) => { - return this.json.serialize(this.path.resolve(this.modLoader.getModPath("Faupi-MunitionsExpert 1.6.0"))); + return this.json.serialize(this.path.resolve(this.modLoader.getModPath("Faupi-MunitionsExpert 1.6.4"))); } } ], diff --git a/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/src/config.json b/Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/src/config.json similarity index 100% rename from Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.3/user/mods/Faupi-MunitionsExpert 1.6.3/src/config.json rename to Faupi-MunitionsExpert/Built/Faupi-MunitionsExpert 1.6.4/user/mods/Faupi-MunitionsExpert 1.6.4/src/config.json diff --git a/Faupi-MunitionsExpert/MunitionsExpert/MunitionsExpert/Program.cs b/Faupi-MunitionsExpert/MunitionsExpert/MunitionsExpert/Program.cs index a98baf0..1b01285 100644 --- a/Faupi-MunitionsExpert/MunitionsExpert/MunitionsExpert/Program.cs +++ b/Faupi-MunitionsExpert/MunitionsExpert/MunitionsExpert/Program.cs @@ -17,7 +17,7 @@ using Aki.Common.Http; namespace MunitionsExpert { - [BepInPlugin("com.Faupi.MunitionsExpert", "Faupi-MunitionsExpert", "1.6.3")] + [BepInPlugin("com.Faupi.MunitionsExpert", "Faupi-MunitionsExpert", "1.6.4")] public class Plugin : BaseUnityPlugin { public static Dictionary iconCache = new Dictionary(); diff --git a/Faupi-MunitionsExpert/server/dist/package.json b/Faupi-MunitionsExpert/server/dist/package.json index 80566a2..977a01d 100644 --- a/Faupi-MunitionsExpert/server/dist/package.json +++ b/Faupi-MunitionsExpert/server/dist/package.json @@ -1,10 +1,10 @@ { "name": "MunitionsExpert", "author": "Faupi", - "version": "1.6.3", + "version": "1.6.4", "license": "NCSA Open Source", "main": "./src/MunitionsExpert.js", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "updatedBy": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/Faupi-MunitionsExpert/server/dist/src/MunitionsExpert.ts b/Faupi-MunitionsExpert/server/dist/src/MunitionsExpert.ts index c90c240..cb25940 100644 --- a/Faupi-MunitionsExpert/server/dist/src/MunitionsExpert.ts +++ b/Faupi-MunitionsExpert/server/dist/src/MunitionsExpert.ts @@ -69,7 +69,7 @@ class MunitionsExpert implements IPreAkiLoadMod, IPostAkiLoadMod url: "/MunitionsExpert/GetInfo", action: (url, info, sessionId, output) => { - return this.json.serialize(this.path.resolve(this.modLoader.getModPath("Faupi-MunitionsExpert 1.6.0"))); + return this.json.serialize(this.path.resolve(this.modLoader.getModPath("Faupi-MunitionsExpert 1.6.4"))); } } ], diff --git a/Faupi-MunitionsExpert/server/dist/types/Utils.d.ts b/Faupi-MunitionsExpert/server/dist/types/Utils.d.ts deleted file mode 100644 index e69de29..0000000 diff --git a/Faupi-MunitionsExpert/server/dist/types/callbacks/InsuranceCallbacks.d.ts b/Faupi-MunitionsExpert/server/dist/types/callbacks/InsuranceCallbacks.d.ts index 6819960..8835ba2 100644 --- a/Faupi-MunitionsExpert/server/dist/types/callbacks/InsuranceCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/callbacks/InsuranceCallbacks.d.ts @@ -1,5 +1,5 @@ import { InsuranceController } from "../controllers/InsuranceController"; -import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate"; +import { OnUpdate } from "../di/OnUpdate"; import { IPmcData } from "../models/eft/common/IPmcData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData"; @@ -10,14 +10,13 @@ import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { InsuranceService } from "../services/InsuranceService"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; -export declare class InsuranceCallbacks extends OnLoadOnUpdate { +export declare class InsuranceCallbacks extends OnUpdate { protected insuranceController: InsuranceController; protected insuranceService: InsuranceService; protected httpResponse: HttpResponseUtil; protected configServer: ConfigServer; protected insuranceConfig: IInsuranceConfig; constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer); - onLoad(): void; getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData; insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; onUpdate(secondsSinceLastRun: number): boolean; diff --git a/Faupi-MunitionsExpert/server/dist/types/callbacks/LocationCallbacks.d.ts b/Faupi-MunitionsExpert/server/dist/types/callbacks/LocationCallbacks.d.ts index cc69369..6e0b538 100644 --- a/Faupi-MunitionsExpert/server/dist/types/callbacks/LocationCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/callbacks/LocationCallbacks.d.ts @@ -11,4 +11,5 @@ export declare class LocationCallbacks { constructor(httpResponse: HttpResponseUtil, locationController: LocationController); getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; + getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string; } diff --git a/Faupi-MunitionsExpert/server/dist/types/callbacks/ProfileCallbacks.d.ts b/Faupi-MunitionsExpert/server/dist/types/callbacks/ProfileCallbacks.d.ts index 6a86fc0..183bb0a 100644 --- a/Faupi-MunitionsExpert/server/dist/types/callbacks/ProfileCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/callbacks/ProfileCallbacks.d.ts @@ -1,5 +1,6 @@ import { ProfileController } from "../controllers/ProfileController"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData"; @@ -12,20 +13,51 @@ import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendRespon import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { TimeUtil } from "../utils/TimeUtil"; +/** Handle profile related client events */ export declare class ProfileCallbacks { protected httpResponse: HttpResponseUtil; protected timeUtil: TimeUtil; protected profileController: ProfileController; constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController); createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; - getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Get the complete player profile (scav + pmc character) + * @param url + * @param info Empty + * @param sessionID Session id + * @returns Profile object + */ + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle the creation of a scav profile for player + * Occurs post-raid and when profile first created immediately after character details are confirmed by player + * @param url + * @param info empty + * @param sessionID Session id + * @returns Profile object + */ + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/voice/change event + * @param url + * @param info Change voice request object + * @param sessionID Session id + * @returns Client response + */ changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/profile/nickname/change event + * Client allows player to adjust their profile name + * @param url + * @param info Change nickname request object + * @param sessionID Session id + * @returns client response + */ changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; /** - * Called when creating a character, when you choose a character face/voice + * Called when creating a character when choosing a character face/voice * @param url * @param info response (empty) * @param sessionID diff --git a/Faupi-MunitionsExpert/server/dist/types/callbacks/RagfairCallbacks.d.ts b/Faupi-MunitionsExpert/server/dist/types/callbacks/RagfairCallbacks.d.ts index 3a405c9..c609f2f 100644 --- a/Faupi-MunitionsExpert/server/dist/types/callbacks/RagfairCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/callbacks/RagfairCallbacks.d.ts @@ -19,6 +19,9 @@ import { ConfigServer } from "../servers/ConfigServer"; import { RagfairServer } from "../servers/RagfairServer"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { JsonUtil } from "../utils/JsonUtil"; +/** + * Handle ragfair related callback events + */ export declare class RagfairCallbacks extends OnLoadOnUpdate { protected httpResponse: HttpResponseUtil; protected logger: ILogger; diff --git a/Faupi-MunitionsExpert/server/dist/types/callbacks/RepairCallbacks.d.ts b/Faupi-MunitionsExpert/server/dist/types/callbacks/RepairCallbacks.d.ts index 63733fa..14edeeb 100644 --- a/Faupi-MunitionsExpert/server/dist/types/callbacks/RepairCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/callbacks/RepairCallbacks.d.ts @@ -6,6 +6,20 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa export declare class RepairCallbacks { protected repairController: RepairController; constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; } diff --git a/Faupi-MunitionsExpert/server/dist/types/callbacks/TraderCallbacks.d.ts b/Faupi-MunitionsExpert/server/dist/types/callbacks/TraderCallbacks.d.ts index 128d9b2..e4fd099 100644 --- a/Faupi-MunitionsExpert/server/dist/types/callbacks/TraderCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/callbacks/TraderCallbacks.d.ts @@ -9,10 +9,10 @@ export declare class TraderCallbacks extends OnLoadOnUpdate { protected traderController: TraderController; constructor(httpResponse: HttpResponseUtil, traderController: TraderController); onLoad(): void; + onUpdate(): boolean; getRoute(): string; getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - onUpdate(): boolean; } diff --git a/Faupi-MunitionsExpert/server/dist/types/context/ContextVariable.d.ts b/Faupi-MunitionsExpert/server/dist/types/context/ContextVariable.d.ts index e438947..0fe0a63 100644 --- a/Faupi-MunitionsExpert/server/dist/types/context/ContextVariable.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/context/ContextVariable.d.ts @@ -4,7 +4,7 @@ export declare class ContextVariable { private timestamp; private type; constructor(value: any, type: ContextVariableType); - getValue(): any; + getValue(): T; getTimestamp(): Date; getType(): ContextVariableType; } diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/BotController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/BotController.d.ts index 5e6f05d..a5111d5 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/BotController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/BotController.d.ts @@ -1,3 +1,4 @@ +import { ApplicationContext } from "../context/ApplicationContext"; import { BotGenerator } from "../generators/BotGenerator"; import { BotHelper } from "../helpers/BotHelper"; import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; @@ -5,15 +6,22 @@ import { IBotBase } from "../models/eft/common/tables/IBotBase"; import { IBotCore } from "../models/eft/common/tables/IBotCore"; import { Difficulty } from "../models/eft/common/tables/IBotType"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { PmcAiService } from "../services/PmcAiService"; export declare class BotController { + protected logger: ILogger; protected databaseServer: DatabaseServer; protected botGenerator: BotGenerator; protected botHelper: BotHelper; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; protected botConfig: IBotConfig; - constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); /** * Return the number of bot loadout varieties to be generated * @param type bot Type we want the loadout gen count for @@ -29,7 +37,18 @@ export declare class BotController { * @returns Difficulty object */ getBotDifficulty(type: string, difficulty: string): Difficulty; - protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty; + protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ getBotCap(): number; } diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/GameController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/GameController.d.ts index 85ec418..2d00898 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/GameController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/GameController.d.ts @@ -7,11 +7,13 @@ import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { IHttpConfig } from "../models/spt/config/IHttpConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { LocaleService } from "../services/LocaleService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { Watermark } from "../utils/Watermark"; export declare class GameController { protected logger: ILogger; + protected databaseServer: DatabaseServer; protected watermark: Watermark; protected httpServerHelper: HttpServerHelper; protected localeService: LocaleService; @@ -20,9 +22,14 @@ export declare class GameController { protected configServer: ConfigServer; protected httpConfig: IHttpConfig; protected coreConfig: ICoreConfig; - constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; protected logProfileDetails(fullProfile: IAkiProfile): void; getGameConfig(sessionID: string): IGameConfigResponse; getServer(): any[]; + getValidGameVersion(): any; } diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/HideoutController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/HideoutController.d.ts index 3eefe1a..dcd8894 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/HideoutController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/HideoutController.d.ts @@ -28,6 +28,7 @@ import { HashUtil } from "../utils/HashUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; +import { JsonUtil } from "../utils/JsonUtil"; export declare class HideoutController { protected logger: ILogger; protected hashUtil: HashUtil; @@ -45,9 +46,10 @@ export declare class HideoutController { protected hideoutHelper: HideoutHelper; protected scavCaseRewardGenerator: ScavCaseRewardGenerator; protected configServer: ConfigServer; + protected jsonUtil: JsonUtil; protected static nameBackendCountersCrafting: string; protected hideoutConfig: IHideoutConfig; - constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer, jsonUtil: JsonUtil); upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; /** diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/InraidController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/InraidController.d.ts index b899e7d..102a2fb 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/InraidController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/InraidController.d.ts @@ -5,9 +5,11 @@ import { ItemHelper } from "../helpers/ItemHelper"; import { ProfileHelper } from "../helpers/ProfileHelper"; import { QuestHelper } from "../helpers/QuestHelper"; import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; @@ -15,6 +17,7 @@ import { InsuranceService } from "../services/InsuranceService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class InraidController { + protected logger: ILogger; protected saveServer: SaveServer; protected jsonUtil: JsonUtil; protected timeUtil: TimeUtil; @@ -29,16 +32,40 @@ export declare class InraidController { protected inRaidHelper: InRaidHelper; protected configServer: ConfigServer; protected inraidConfig: IInRaidConfig; - constructor(saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer); + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer); addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void; saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Handle updating the profile post-pmc raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePmcProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Reduce body part hp to % of max + * @param pmcData profile to edit + * @param multipler multipler to apply to max health + */ + protected reducePmcHealthToPercent(pmcData: IPmcData, multipler: number): void; + /** + * Handle updating the profile post-pscav raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Is the player dead after a raid - dead is anything other than "survived" / "runner" + * @param statusOnExit exit value from offraidData object + * @returns true if dead + */ + protected isPlayerDead(statusOnExit: string): boolean; /** * Mark inventory items as FiR if player survived raid, otherwise remove FiR from them * @param offraidData Save Progress Request * @param pmcData player profile * @param isPlayerScav Was the player a pScav */ - private markOrRemoveFoundInRaidItems; - private handlePostRaidPlayerScavProcess; - private handlePostRaidPlayerScavKarmaChanges; + protected markOrRemoveFoundInRaidItems(offraidData: ISaveProgressRequestData, pmcData: IPmcData, isPlayerScav: boolean): void; + protected handlePostRaidPlayerScavProcess(scavData: IPmcData, sessionID: string, offraidData: ISaveProgressRequestData, pmcData: IPmcData, isDead: boolean): void; + protected handlePostRaidPlayerScavKarmaChanges(pmcData: IPmcData, offraidData: ISaveProgressRequestData, scavData: IPmcData, sessionID: string): void; } diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/InventoryController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/InventoryController.d.ts index f57f731..f564919 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/InventoryController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/InventoryController.d.ts @@ -92,7 +92,11 @@ export declare class InventoryController { */ toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse; /** - * Handles Tagging of items (primary Containers). + * Add a tag to an inventory item + * @param pmcData profile with item to add tag to + * @param body tag request data + * @param sessionID session id + * @returns client response object */ tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/LocationController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/LocationController.d.ts index 90b6d7a..9db3205 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/LocationController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/LocationController.d.ts @@ -1,18 +1,33 @@ import { LocationGenerator } from "../generators/LocationGenerator"; +import { LootGenerator } from "../generators/LootGenerator"; import { ILocationBase } from "../models/eft/common/ILocationBase"; import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { LootItem } from "../models/spt/services/LootItem"; import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class LocationController { protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; protected logger: ILogger; protected locationGenerator: LocationGenerator; + protected lootGenerator: LootGenerator; protected databaseServer: DatabaseServer; protected timeUtil: TimeUtil; - constructor(jsonUtil: JsonUtil, logger: ILogger, locationGenerator: LocationGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil); + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger, locationGenerator: LocationGenerator, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer); get(location: string): ILocationBase; generate(name: string): ILocationBase; generateAll(): ILocationsGenerateAllResponse; + /** + * Get loot for an airdop container + * Generates it randomly based on config/airdrop.json values + * @returns Array of LootItem + */ + getAirdropLoot(): LootItem[]; } diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/MatchController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/MatchController.d.ts index 71cb7d3..07f6a89 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/MatchController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/MatchController.d.ts @@ -9,23 +9,33 @@ import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestDa import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; import { IMatchConfig } from "../models/spt/config/IMatchConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; import { BotLootCacheService } from "../services/BotLootCacheService"; import { MatchLocationService } from "../services/MatchLocationService"; +import { PmcAiService } from "../services/PmcAiService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; export declare class MatchController { + protected logger: ILogger; protected saveServer: SaveServer; protected profileHelper: ProfileHelper; protected matchLocationService: MatchLocationService; protected traderHelper: TraderHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; + protected profileSnapshotService: ProfileSnapshotService; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected applicationContext: ApplicationContext; protected matchConfig: IMatchConfig; protected inraidConfig: IInRaidConfig; - constructor(saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); + protected botConfig: IBotConfig; + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); getEnabled(): boolean; getProfile(info: IGetProfileRequestData): IPmcData[]; createGroup(sessionID: string, info: ICreateGroupRequestData): any; diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/QuestController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/QuestController.d.ts index 2cbccfb..282f50e 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/QuestController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/QuestController.d.ts @@ -39,16 +39,31 @@ export declare class QuestController { * @returns array of IQuest */ getClientQuests(sessionID: string): IQuest[]; + /** + * Is the quest for the opposite side the player is on + * @param side player side (usec/bear) + * @param questId questId to check + */ + protected questIsForOtherSide(side: string, questId: string): boolean; + /** + * Handle the client accepting a quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update + * @param acceptedQuest Quest accepted + * @param sessionID Session id + * @returns client response + */ acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; /** - * Remove completed quest from profile + * Update completed quest in profile * Add newly unlocked quests to profile * Also recalculate thier level due to exp rewards * @param pmcData Player profile - * @param body completed quest request - * @param sessionID session id - * @returns ItemEvent response + * @param body Completed quest request + * @param sessionID Session id + * @returns ItemEvent client response */ completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; /** @@ -67,10 +82,20 @@ export declare class QuestController { protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]; /** * Fail the quests provided + * Update quest in profile, otherwise add fresh quest object with failed status * @param sessionID session id * @param pmcData player profile * @param questsToFail quests to fail */ protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void; handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment a backend counter stored value by an amount, + * Create counter if it does not exist + * @param pmcData Profile to find backend counter in + * @param conditionId backend counter id to update + * @param questId quest id counter is associated with + * @param counterValue value to increment the backend counter with + */ + protected updateProfileBackendCounterValue(pmcData: IPmcData, conditionId: string, questId: string, counterValue: number): void; } diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/RagfairController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/RagfairController.d.ts index c4ffc15..06af740 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/RagfairController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/RagfairController.d.ts @@ -9,6 +9,7 @@ import { RagfairOfferHelper } from "../helpers/RagfairOfferHelper"; import { RagfairSellHelper } from "../helpers/RagfairSellHelper"; import { RagfairSortHelper } from "../helpers/RagfairSortHelper"; import { RagfairTaxHelper } from "../helpers/RagfairTaxHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; import { IPmcData } from "../models/eft/common/IPmcData"; import { Item } from "../models/eft/common/tables/IItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; @@ -33,6 +34,9 @@ import { RagfairPriceService } from "../services/RagfairPriceService"; import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { TimeUtil } from "../utils/TimeUtil"; +/** + * Handle RagfairCallback events + */ export declare class RagfairController { protected logger: ILogger; protected timeUtil: TimeUtil; @@ -52,14 +56,20 @@ export declare class RagfairController { protected handbookHelper: HandbookHelper; protected paymentHelper: PaymentHelper; protected inventoryHelper: InventoryHelper; + protected traderHelper: TraderHelper; protected ragfairHelper: RagfairHelper; protected ragfairOfferService: RagfairOfferService; protected ragfairRequiredItemsService: RagfairRequiredItemsService; protected ragfairOfferGenerator: RagfairOfferGenerator; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; - constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer); + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer); getOffers(sessionID: string, info: ISearchRequestData): IGetOffersResult; + /** + * Update a trader flea offer with buy restrictions stored in the traders assort + * @param offer flea offer to update + */ + protected setTraderOfferPurchaseLimits(offer: IRagfairOffer): void; protected isLinkedSearch(info: ISearchRequestData): boolean; protected isRequiredSearch(info: ISearchRequestData): boolean; update(): void; diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/RepairController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/RepairController.d.ts index 0e78ef6..ae54a53 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/RepairController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/RepairController.d.ts @@ -8,9 +8,9 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa import { IRepairConfig } from "../models/spt/config/IRepairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; -import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; export declare class RepairController { protected logger: ILogger; protected itemEventRouter: ItemEventRouter; @@ -19,23 +19,23 @@ export declare class RepairController { protected traderHelper: TraderHelper; protected paymentService: PaymentService; protected repairHelper: RepairHelper; - protected configServer: ConfigServer; + protected repairService: RepairService; protected repairConfig: IRepairConfig; - constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); /** * Repair with trader - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; /** * Repair with repair kit - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; } diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/RepeatableQuestController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/RepeatableQuestController.d.ts index 98d05dd..4c31a3d 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/RepeatableQuestController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/RepeatableQuestController.d.ts @@ -7,6 +7,7 @@ import { Exit } from "../models/eft/common/ILocationBase"; import { IPmcData } from "../models/eft/common/IPmcData"; import { TraderInfo } from "../models/eft/common/tables/IBotBase"; import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; import { ELocationName } from "../models/enums/ELocationName"; @@ -15,6 +16,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { PaymentService } from "../services/PaymentService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; @@ -64,9 +66,10 @@ export declare class RepeatableQuestController { protected itemEventRouter: ItemEventRouter; protected paymentService: PaymentService; protected objectId: ObjectId; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected questConfig: IQuestConfig; - constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, configServer: ConfigServer); + constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint * Returns an array of objects in the format of repeatable quests to the client. @@ -217,4 +220,16 @@ export declare class RepeatableQuestController { debugLogRepeatableQuestIds(pmcData: IPmcData): void; probabilityObjectArray(configArrayInput: ProbabilityObject[]): ProbabilityObjectArray; changeRepeatableQuest(pmcDataIn: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + /** + * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) + * @returns a list of rewardable items [[_tpl, itemTemplate],...] + */ + protected getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig): [string, ITemplateItem][]; + /** + * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward + * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. + * @param {*} tpl template id of item to check + * @returns boolean: true if item is valid reward + */ + isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean; } diff --git a/Faupi-MunitionsExpert/server/dist/types/controllers/TraderController.d.ts b/Faupi-MunitionsExpert/server/dist/types/controllers/TraderController.d.ts index 7bab158..b79f55e 100644 --- a/Faupi-MunitionsExpert/server/dist/types/controllers/TraderController.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/controllers/TraderController.d.ts @@ -4,6 +4,7 @@ import { TraderHelper } from "../helpers/TraderHelper"; import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; @@ -15,12 +16,29 @@ export declare class TraderController { protected traderHelper: TraderHelper; protected timeUtil: TimeUtil; protected traderAssortService: TraderAssortService; + protected fenceService: FenceService; protected jsonUtil: JsonUtil; - constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, jsonUtil: JsonUtil); + constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, fenceService: FenceService, jsonUtil: JsonUtil); + /** + * Runs when onLoad event is fired + * Iterate over traders, ensure an unmolested copy of their assorts is stored in traderAssortService + * Store timestamp of next assort refresh in nextResupply property of traders .base object + */ load(): void; - getTrader(traderID: string, sessionID: string): ITraderBase; + /** + * Runs when onUpdate is fired + * If current time is > nextResupply(expire) time of trader, refresh traders assorts and + * Fence is handled slightly differently + * @returns has run + */ + update(): boolean; + /** + * Return an array of all traders + * @param sessionID Session id + * @returns array if ITraderBase objects + */ getAllTraders(sessionID: string): ITraderBase[]; - updateTraders(): boolean; + getTrader(sessionID: string, traderID: string): ITraderBase; getAssort(sessionId: string, traderId: string): ITraderAssort; - getPurchasesData(traderID: string, sessionID: string): Record; + getPurchasesData(sessionID: string, traderID: string): Record; } diff --git a/Faupi-MunitionsExpert/server/dist/types/di/Container.d.ts b/Faupi-MunitionsExpert/server/dist/types/di/Container.d.ts index 17791b0..98d1fa1 100644 --- a/Faupi-MunitionsExpert/server/dist/types/di/Container.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/di/Container.d.ts @@ -1,4 +1,7 @@ import { DependencyContainer } from "tsyringe"; +/** + * Handle the registration of classes to be used by the Dependency Injection code + */ export declare class Container { static registerTypes(depContainer: DependencyContainer): void; static registerListTypes(depContainer: DependencyContainer): void; diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/BotGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/BotGenerator.d.ts index a5fc0ad..2ac51db 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/BotGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/BotGenerator.d.ts @@ -9,6 +9,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { PmcAiService } from "../services/PmcAiService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; @@ -30,9 +31,10 @@ export declare class BotGenerator { protected botEquipmentFilterService: BotEquipmentFilterService; protected botHelper: BotHelper; protected gameEventHelper: GameEventHelper; + protected pmcAiService: PmcAiService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, pmcAiService: PmcAiService, configServer: ConfigServer); /** * Generate a player scav bot object * @param role e.g. assault / pmcbot @@ -40,14 +42,14 @@ export declare class BotGenerator { * @param botTemplate base bot template to use (e.g. assault/pmcbot) * @returns */ - generatePlayerScav(role: string, difficulty: string, botTemplate: IBotType): IBotBase; - generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; /** - * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check - * @param botRole the bot role to check if should be a pmc - * @returns true if should be a pmc + * Generate an array of bot objects for populate a raid with + * @param sessionId session id + * @param info request object + * @returns bot array */ - protected shouldBotBePmc(botRole: string): boolean; + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; /** * Get a randomised PMC side based on bot config value 'isUsec' * @returns pmc side as string @@ -58,12 +60,30 @@ export declare class BotGenerator { * @returns IBotBase object */ protected getCloneOfBotBase(): IBotBase; - protected generateBot(bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param role botRole bot will use + * @param node Bot template from db/bots/x.json + * @param isPmc Is bot to be a PMC + * @param isPlayerScav is bot to be a p scav bot + * @returns IBotBase object + */ + protected generateBot(sessionId: string, bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; /** * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client */ protected logPmcGeneratedCount(output: IBotBase[]): void; - protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult; + /** + * Return a randomised bot level and exp value + * @param role botRole being generated for + * @param min Min exp value + * @param max Max exp value + * @returns IRandomisedBotLevelResult object + */ + protected generateRandomLevel(role: string, min: number, max: number): BotGenerator.IRandomisedBotLevelResult; /** * Converts health object to the required format * @param healthObj health object from bot json @@ -72,19 +92,23 @@ export declare class BotGenerator { */ protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; protected generateSkills(skillsObj: Skills): Skills; - /** - * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) - * @param pmcSide eft side (usec/bear) - * @returns pmc side as defined in config - */ - protected getPmcRole(pmcSide: string): string; /** * Iterate through bots inventory and loot to find and remove christmas items (as defined in GameEventHelper) * @param nodeInventory Bots inventory to iterate over */ protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ protected generateId(bot: IBotBase): IBotBase; protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ protected getPMCDifficulty(requestedDifficulty: string): string; /** * Add a side-specific (usec/bear) dogtag item to a bots inventory diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/BotInventoryGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/BotInventoryGenerator.d.ts index 35d1ee8..c5ed545 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/BotInventoryGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/BotInventoryGenerator.d.ts @@ -1,13 +1,16 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; -import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType"; +import { Chances, Generation, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; -import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; -import { BotWeaponGenerator } from "./BotWeaponGenerator"; import { BotLootGenerator } from "./BotLootGenerator"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; export declare class BotInventoryGenerator { protected logger: ILogger; protected hashUtil: HashUtil; @@ -17,8 +20,14 @@ export declare class BotInventoryGenerator { protected botLootGenerator: BotLootGenerator; protected botGeneratorHelper: BotGeneratorHelper; protected weightedRandomHelper: WeightedRandomHelper; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper); - generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer); + generateInventory(sessionId: string, templateInventory: Inventory, equipmentChances: Chances, itemGenerationLimitsMinMax: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation): void; protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void; protected generateInventoryBase(): PmcInventory; } diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/BotLootGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/BotLootGenerator.d.ts index c6a3f29..c1f5310 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/BotLootGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/BotLootGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { HandbookHelper } from "../helpers/HandbookHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; @@ -20,11 +21,12 @@ export declare class BotLootGenerator { protected handbookHelper: HandbookHelper; protected botGeneratorHelper: BotGeneratorHelper; protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botLootCacheService: BotLootCacheService, configServer: ConfigServer); - generateLoot(templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer); + generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; protected getRandomisedCount(min: number, max: number, nValue: number): number; /** * Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit is reached @@ -47,7 +49,7 @@ export declare class BotLootGenerator { * @param botRole bots role, .e.g. pmcBot * @param isPmc are we generating for a pmc */ - protected addLooseWeaponsToInventorySlot(botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean): void; + protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean): void; /** * Get a random item from the pool parameter using the biasedRandomNumber system * @param pool pool of items to pick an item from diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/BotWeaponGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/BotWeaponGenerator.d.ts index 9215214..487901b 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/BotWeaponGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/BotWeaponGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { MinMax } from "../models/common/MinMax"; @@ -14,6 +15,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; export declare class BotWeaponGenerator { protected jsonUtil: JsonUtil; protected logger: ILogger; @@ -24,11 +26,24 @@ export declare class BotWeaponGenerator { protected botGeneratorHelper: BotGeneratorHelper; protected randomUtil: RandomUtil; protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected inventoryMagGenComponents: IInventoryMagGen[]; protected readonly modMagazineSlotId = "mod_magazine"; protected botConfig: IBotConfig; - constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer); + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, inventoryMagGenComponents: IInventoryMagGen[]); /** - * Get a random weapon from a bots pool of weapons (weighted) + * Pick a random weapon based on weightings and generate a functional weapon + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId + * @param modChances + * @param botRole role of bot, e.g. assault/followerBully + * @param isPmc Is weapon generated for a pmc + * @returns GenerateWeaponResult object + */ + generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; + /** + * Get a random weighted weapon from a bots pool of weapons * @param equipmentSlot Primary/secondary/holster * @param botTemplateInventory e.g. assault.json * @returns weapon tpl @@ -39,43 +54,24 @@ export declare class BotWeaponGenerator { * @param weaponTpl weapon tpl to generate (use pickWeightedWeaponTplFromPool()) * @param equipmentSlot slot to fit into, primary/secondary/holster * @param botTemplateInventory e.g. assault.json - * @param weaponParentId - * @param modChances - * @param botRole + * @param weaponParentId ParentId of the weapon being generated + * @param modChances Dictionary of item types and % chance weapon will have that mod + * @param botRole e.g. assault/exusec * @param isPmc * @returns GenerateWeaponResult object */ - generateWeaponByTpl(weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; + generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; /** - * Generate an entirely random weapon - * @param equipmentSlot Primary/secondary/holster - * @param botTemplateInventory e.g. assault.json - * @param weaponParentId - * @param modChances - * @param botRole - * @param isPmc - * @returns GenerateWeaponResult object - */ - generateRandomWeapon(equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; - /** - * Create array with weapon base as only element - * Add additional properties as required - * @param weaponTpl - * @param weaponParentId - * @param equipmentSlot - * @param weaponItemTemplate + * Create array with weapon base as only element and + * add additional properties based on weapon type + * @param weaponTpl Weapon tpl to create item with + * @param weaponParentId Weapons parent id + * @param equipmentSlot e.g. primary/secondary/holster + * @param weaponItemTemplate db template for weapon * @param botRole for durability values - * @returns + * @returns Base weapon item in array */ - constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; - /** - * Add compatible magazines to an inventory based on a generated weapon - * @param weaponDetails - * @param magCounts - * @param inventory - * @param botRole the bot type we're getting generating extra mags for - */ - addExtraMagazinesToInventory(weaponDetails: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; /** * Get the mods necessary to kit out a weapon to its preset level * @param weaponTpl weapon to find preset for @@ -84,33 +80,21 @@ export declare class BotWeaponGenerator { * @returns array of weapon mods */ protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[]; - /** Checks if all required slots are occupied on a weapon and all it's mods */ + /** + * Checks if all required slots are occupied on a weapon and all it's mods + * @param weaponItemArray Weapon + mods + * @returns true if valid + */ protected isWeaponValid(weaponItemArray: Item[]): boolean; /** * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. * Additionally, adds extra bullets to SecuredContainer - * @param weaponMods - * @param weaponTemplate - * @param magCounts - * @param ammoTpl - * @param inventory - * @param botRole the bot type we're getting generating extra mags for - * @returns + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for */ - protected generateExtraMagazines(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory, botRole: string): void; - /** - * Get a randomised number of bullets for a specific magazine - * @param magCounts min and max count of magazines - * @param magTemplate magazine to generate bullet count for - * @returns bullet count number - */ - protected getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; - /** - * Get a randomised count of magazines - * @param magCounts min and max value returned value can be between - * @returns numberical value of magazine count - */ - protected getRandomisedMagazineCount(magCounts: MinMax): number; + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; /** * Add ammo to the secure container * @param stackCount How many stacks of ammo to add @@ -127,21 +111,13 @@ export declare class BotWeaponGenerator { * @returns magazine tpl string */ protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; - /** - * Get a weapons default magazine template id - * @param weaponTemplate weapon to get default magazine for - * @returns tpl of magazine - */ - protected getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; - protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void; /** * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) * @param ammo a list of ammo tpls the weapon can use * @param weaponTemplate the weapon we want to pick ammo for - * @param isPmc is the ammo being gathered for a pmc (runs pmc ammo filtering) * @returns an ammo tpl that works with the desired gun */ - protected getCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem, isPmc: boolean): string; + protected getWeightedCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem): string; /** * Get a weapons compatible cartridge caliber * @param weaponTemplate Weapon to look up caliber of diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/LocationGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/LocationGenerator.d.ts index bd368b5..cc61dcf 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/LocationGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/LocationGenerator.d.ts @@ -3,10 +3,9 @@ import { GameEventHelper } from "../helpers/GameEventHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { PresetHelper } from "../helpers/PresetHelper"; import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; -import { ILooseLoot, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; +import { ILooseLoot, SpawnpointsForced, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; import { Item } from "../models/eft/common/tables/IItem"; import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase"; -import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { ILocationConfig } from "../models/spt/config/ILocationConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -36,11 +35,19 @@ export declare class LocationGenerator { generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; protected getLooseLootMultiplerForLocation(location: string): number; protected getStaticLootMultiplerForLocation(location: string): number; + /** + * Create array of loose + forced loot using probability system + * @param dynamicLootDist + * @param staticAmmoDist + * @param locationName Location to generate loot for + * @returns Array of spawn points with loot in them + */ generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; + /** + * Add forced spawn point loot into loot parameter array + * @param loot array to add forced loot to + * @param forcedSpawnPoints forced loot to add + */ + protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[]): void; protected createItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; - protected getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; - protected getRandomValidCaliber(magTemplate: ITemplateItem): string; - protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; - protected createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; - protected createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item; } diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/LootGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/LootGenerator.d.ts new file mode 100644 index 0000000..bbc1915 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/generators/LootGenerator.d.ts @@ -0,0 +1,58 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { LootItem } from "../models/spt/services/LootItem"; +import { LootRequest } from "../models/spt/services/LootRequest"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class LootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected itemFilterService: ItemFilterService; + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, itemFilterService: ItemFilterService); + /** + * Generate a list of items based on options passed in + * @param options parameters to adjust what loot is generated + * @returns An array of loot items + */ + createRandomloot(options: LootRequest): LootItem[]; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Find a random item in items.json and add to result array + * @param items items to choose from + * @param itemTypeCounts item limit counts + * @param options item filters + * @param result array to add found item to + * @returns true if item was valid and added to pool + */ + protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, options: LootRequest, result: LootItem[]): boolean; + /** + * + * Find a random item in items.json and add to result array + * @param globalDefaultPresets presets to choose from + * @param itemTypeCounts item limit counts + * @param result array to add found preset to + * @returns true if preset was valid and added to pool + */ + protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record, result: LootItem[]): boolean; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/PMCLootGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/PMCLootGenerator.d.ts index 64e6f7f..b9f2a83 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/PMCLootGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/PMCLootGenerator.d.ts @@ -1,15 +1,21 @@ import { ItemHelper } from "../helpers/ItemHelper"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { ConfigServer } from "../servers/ConfigServer"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +/** + * Handle the generation of dynamic PMC loot in pockets and backpacks + * and the removal of blacklisted items + */ export declare class PMCLootGenerator { protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected configServer: ConfigServer; + protected itemFilterService: ItemFilterService; protected pocketLootPool: string[]; protected backpackLootPool: string[]; protected botConfig: IBotConfig; - constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService); generatePMCPocketLootPool(): string[]; generatePMCBackpackLootPool(): string[]; } diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/RagfairAssortGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/RagfairAssortGenerator.d.ts index cbdd7f2..db4811d 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/RagfairAssortGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/RagfairAssortGenerator.d.ts @@ -1,5 +1,8 @@ import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -8,18 +11,40 @@ export declare class RagfairAssortGenerator { protected hashUtil: HashUtil; protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; protected generatedAssortItems: Item[]; - constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer); + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); /** * Get an array of unique items that can be sold on the flea * @returns array of unique items */ getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ protected assortsAreGenerated(): boolean; /** * Generate an array of items the flea can sell * @returns array of unique items */ protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ protected createRagfairAssortItem(tplId: string, id?: string): Item; } diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/RagfairOfferGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/RagfairOfferGenerator.d.ts index 3e7f4cc..317cd6b 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/RagfairOfferGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/RagfairOfferGenerator.d.ts @@ -41,15 +41,37 @@ export declare class RagfairOfferGenerator { createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; protected getTraderId(userID: string): string; protected getRating(userID: string): number; + /** + * Is the offers user rating growing + * @param userID user to check rating of + * @returns true if its growing + */ protected getRatingGrowing(userID: string): boolean; + /** + * Get number of section until offer should expire + * @param userID Id of the offer owner + * @param time Time the offer is posted + * @returns number of seconds until offer expires + */ protected getOfferEndTime(userID: string, time: number): number; /** * Create multiple offers for items by using a unique list of items we've generated previously - * @param expiredOffers + * @param expiredOffers optional, expired offers to regenerate */ generateDynamicOffers(expiredOffers?: Item[]): void; - generateTraderOffers(traderID: string): void; + /** + * Generate trader offers on flea using the traders assort data + * @param traderID Trader to generate offers for + */ + generateFleaOffersForTrader(traderID: string): void; protected getItemCondition(userID: string, items: Item[], itemDetails: ITemplateItem): Item[]; + /** + * Add missing conditions to an item if needed + * Durabiltiy for repairable items + * HpResource for medical items + * @param item item to add conditions to + * @returns Item with conditions added + */ protected addMissingCondition(item: Item): Item; protected getOfferRequirements(items: Item[]): { count: number; @@ -57,6 +79,14 @@ export declare class RagfairOfferGenerator { }[]; /** * Create a flea offer and store it in the Ragfair server offers array + * @param userID owner of the offer + * @param time time offer is put up + * @param items items in the offer + * @param barterScheme + * @param loyalLevel + * @param price price of offer + * @param sellInOnePiece + * @returns */ createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; } diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/ScavCaseRewardGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/ScavCaseRewardGenerator.d.ts index c7d6ab7..89cb5c8 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/ScavCaseRewardGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/ScavCaseRewardGenerator.d.ts @@ -8,9 +8,13 @@ import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "../mo import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { RagfairPriceService } from "../services/RagfairPriceService"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; +/** + * Handle the creation of randomised scav case rewards + */ export declare class ScavCaseRewardGenerator { protected logger: ILogger; protected randomUtil: RandomUtil; @@ -18,9 +22,10 @@ export declare class ScavCaseRewardGenerator { protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected ragfairPriceService: RagfairPriceService; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected scavCaseConfig: IScavCaseConfig; - constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); + constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * Create an array of rewards that will be given to the player upon completing their scav case build * @param body client request diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/WeatherGenerator.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/WeatherGenerator.d.ts index 44cecbb..8ddbe49 100644 --- a/Faupi-MunitionsExpert/server/dist/types/generators/WeatherGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/generators/WeatherGenerator.d.ts @@ -1,7 +1,7 @@ import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; -import { ConfigServer } from "../servers/ConfigServer"; import { IWeatherData } from "../models/eft/weather/IWeatherData"; import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class WeatherGenerator { @@ -21,11 +21,16 @@ export declare class WeatherGenerator { protected getAcceleratedTime(computedDate: Date): string; /** * Get current time formatted to fit BSGs requirement - * @param computedDate + * @param computedDate date to format into bsg style * @returns */ protected getNormalTime(computedDate: Date): string; - generateWeather(data: IWeatherData): IWeatherData; + /** + * Return randomised Weather data + * @param weatherData weather input data + * @returns Randomised weather data + */ + generateWeather(weatherData: IWeatherData): IWeatherData; protected getWeightedFog(): string; protected getWeightedRain(): number; protected getRandomFloat(node: string): number; diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/InventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..4fcb1e2 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,14 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/AssortHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/AssortHelper.d.ts index 15586b9..bfc157f 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/AssortHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/AssortHelper.d.ts @@ -17,7 +17,7 @@ export declare class AssortHelper { * @param assort assort items from a trader * @returns assort items minus locked quest assorts */ - stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort; + stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, flea?: boolean): ITraderAssort; /** * Remove assorts from a trader that have not been unlocked yet * @param pmcProfile player profile @@ -32,5 +32,5 @@ export declare class AssortHelper { * @param itemID item id to remove from asort * @returns Modified assort */ - removeItemFromAssort(assort: ITraderAssort, itemID: string): ITraderAssort; + removeItemFromAssort(assort: ITraderAssort, itemID: string, flea?: boolean): ITraderAssort; } diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/BotGeneratorHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/BotGeneratorHelper.d.ts index 3cd7256..5e3e501 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/BotGeneratorHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/BotGeneratorHelper.d.ts @@ -1,19 +1,33 @@ import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; -import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; -import { Grid, ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; -import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { ItemFilterService } from "../services/ItemFilterService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGeneratorHelper } from "./BotWeaponGeneratorHelper"; import { ContainerHelper } from "./ContainerHelper"; import { InventoryHelper } from "./InventoryHelper"; import { ItemHelper } from "./ItemHelper"; import { ProbabilityHelper } from "./ProbabilityHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} export declare class BotGeneratorHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; @@ -25,16 +39,121 @@ export declare class BotGeneratorHelper { protected itemHelper: ItemHelper; protected inventoryHelper: InventoryHelper; protected containerHelper: ContainerHelper; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected itemFilterService: ItemFilterService; + protected profileHelper: ProfileHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer); - generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, configServer: ConfigServer); /** - * Is this magazine cylinder related (revolvers and grenade launchers) - * @param magazineParentName the name of the magazines parent - * @returns true if it is cylinder related + * Check mods are compatible and add to array + * @param equipment Equipment item to add mods to + * @param modPool Mod list to choose frm + * @param parentId parentid of item to add mod to + * @param parentTemplate template objet of item to add mods to + * @param modSpawnChances dictionary of mod items and their chance to spawn for this bot type + * @returns Item + compatible mods as an array */ - magazineIsCylinderRelated(magazineParentName: string): boolean; + generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; + /** + * @param sessionId session id + * @param weapon Weapon to add mods to + * @param modPool Pool of compatible mods to attach to weapon + * @param weaponParentId parentId of weapon + * @param parentWeaponTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @returns Weapon + mods array + */ + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentWeaponTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string): Item[]; + /** + * + * @param modSlot + * @param isRandomisableSlot + * @param modsParent + * @param botEquipBlacklist + * @param itemModPool + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate + * @returns + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, modsParent: Slot, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Check if mod item is on limited list + has surpassed the limit set for it + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @returns true if over item limit + */ + protected modHasReachedItemLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits): boolean; + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + protected initModLimits(botRole: string): BotModLimits; + /** + * Generate a pool of mods for this bots mod type if bot has values inside `randomisedWeaponModSlots` array found in bot.json/equipment[botrole] + * @param allowedMods Mods to be added to mod pool + * @param botEquipBlacklist blacklist of items not allowed to be added to mod pool + * @param modSlot Slot to generate mods for + * @param itemModPool base mod pool to replace values of + */ + protected generateDynamicWeaponModPool(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string, itemModPool: Record): void; + /** + * Find all compatible mods for equipment item and add to modPool + * @param itemDetails item to find mods for + * @param modPool ModPool to add mods to + */ + generateDynamicModPool(itemDetails: ITemplateItem, modPool: Mods): void; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; + /** + * Check if the specific item type on the weapon has reached the set limit + * @param modTpl log mod tpl if over type limit + * @param currentCount current number of this item on gun + * @param maxLimit mod limit allowed + * @param botRole role of bot we're checking weapon of + * @returns true if limit reached + */ + protected weaponModLimitReached(modTpl: string, currentCount: { + count: number; + }, maxLimit: number, botRole: string): boolean; + /** + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate tempalte of the mods parent item + * @returns true if valid + */ + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; + /** + * Create a mod item with parameters as properties + * @param modId _id + * @param modTpl _tpl + * @param parentId parentId + * @param modSlot slotId + * @param modTemplate Used to add additional properites in the upd object + * @returns Item object + */ + protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem): Item; /** * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot * never return true for an item that has 0% spawn chance @@ -46,7 +165,7 @@ export declare class BotGeneratorHelper { protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; /** * Get a list of containers that hold ammo - * e.g. mod_magazine + * e.g. mod_magazine / patron_in_weapon_000 * @returns string array */ protected getAmmoContainers(): string[]; @@ -62,11 +181,11 @@ export declare class BotGeneratorHelper { * Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0. * Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots. * This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine" - * - * @param {object} items The items where the CylinderMagazine's camora are appended to - * @param {object} modPool modPool which should include available cartrigdes - * @param {string} parentId The CylinderMagazine's UID - * @param {object} parentTemplate The CylinderMagazine's template + * @param items The items where the CylinderMagazine's camora are appended to + * @param modPool modPool which should include available cartrigdes + * @param parentId The CylinderMagazine's UID + * @param parentTemplate The CylinderMagazine's template + * @returns */ protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void; /** @@ -75,6 +194,13 @@ export declare class BotGeneratorHelper { * @returns string array of shells fro luitple camora sources */ protected mergeCamoraPoolsTogether(camorasWithShells: Record): string[]; + /** + * Adds properties to an item + * e.g. Repairable / HasHinge / Foldable / MaxDurability + * @param itemTemplate + * @param botRole Used by weapons to randomise the durability values + * @returns Item Upd object with extra properties + */ generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: any): { upd?: Upd; }; @@ -92,13 +218,15 @@ export declare class BotGeneratorHelper { * @returns Repairable object */ protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; - protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** - * Sort by spawn chance, highest to lowest, higher is more common - * @param unsortedModArray String array to sort - * @returns Sorted string array + * Get a random mod from an items compatible mods Filter array + * @param modTpl + * @param parentSlot + * @param modSlot + * @param items + * @returns item tpl */ - protected sortModArray(unsortedModArray: string[]): string[]; + protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** * Can an item be added to an item without issue * @param items @@ -107,18 +235,8 @@ export declare class BotGeneratorHelper { * @returns true if possible */ isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean; - /** - * Adds an item with all its childern into specified equipmentSlots, wherever it fits. - * @param equipmentSlots - * @param parentId - * @param parentTpl - * @param itemWithChildren - * @param inventory - * @returns a `boolean` indicating item was added - */ - addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean; - protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; } +/** TODO - move into own class */ export declare class ExhaustableArray { private itemPool; private randomUtil; diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/BotHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/BotHelper.d.ts index 9b89481..18738e5 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/BotHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/BotHelper.d.ts @@ -13,11 +13,34 @@ export declare class BotHelper { protected configServer: ConfigServer; protected botConfig: IBotConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retreive difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ getBotTemplate(role: string): IBotType; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ getPmcDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; /** * Randomise the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent * @param difficultySettings pmc difficulty settings */ randomisePmcHostility(difficultySettings: Difficulty): void; @@ -31,7 +54,7 @@ export declare class BotHelper { */ addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; /** - * Add a bot to the ENEMY_BOT_TYPES array + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list * @param difficultySettings bot settings to alter * @param typesToAdd bot type to add to enemy list */ @@ -42,4 +65,10 @@ export declare class BotHelper { * @param typesToAdd bot type to add to revenge list */ addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; } diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..7e25f56 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,78 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper); + /** + * Get a randomised number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomised count of magazines + * @param magCounts min and max value returned value can be between + * @returns numberical value of magazine count + */ + getRandomisedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartrdiges to a bots inventory (vest/pocket) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + */ + addBulletsToVestAndPockets(ammoTpl: string, cartridgeCount: number, inventory: Inventory): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * Adds an item with all its childern into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/ExtendedProfileHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/ExtendedProfileHelper.d.ts deleted file mode 100644 index c05d88e..0000000 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/ExtendedProfileHelper.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BotGenerator } from "../generators/BotGenerator"; -import { IPmcData, Skills, Stats } from "../models/eft/common/IPmcData"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { SaveServer } from "../servers/SaveServer"; -import { BotLootCacheService } from "../services/BotLootCacheService"; -import { FenceService } from "../services/FenceService"; -import { JsonUtil } from "../utils/JsonUtil"; -import { TimeUtil } from "../utils/TimeUtil"; -import { Watermark } from "../utils/Watermark"; -import { ItemHelper } from "./ItemHelper"; -import { ProfileHelper } from "./ProfileHelper"; -/** - * This class needs to exist outside of ProfileHelper to ensure cyclic deps don't cause the server to fail on load - */ -export declare class ExtendedProfileHelper extends ProfileHelper { - protected botLootCacheService: BotLootCacheService; - protected botGenerator: BotGenerator; - constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, botLootCacheService: BotLootCacheService, fenceService: FenceService, botGenerator: BotGenerator); - generatePlayerScav(sessionID: string): IPmcData; - protected getScavSkills(sessionID: string): Skills; - protected removeSecureContainer(profile: IPmcData): IPmcData; - protected getDefaultScavSkills(): Skills; - protected getScavStats(sessionID: string): Stats; - protected getScavLevel(sessionID: string): number; - protected getScavExperience(sessionID: string): number; - protected setScavCooldownTimer(profile: IPmcData, pmcData: IPmcData): IPmcData; -} diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/HideoutHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/HideoutHelper.d.ts index 36e4009..7495a6a 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/HideoutHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/HideoutHelper.d.ts @@ -44,14 +44,72 @@ export declare class HideoutHelper { initProduction(recipeId: string, productionTime: number): Production; isProductionType(productive: Productive): productive is Production; applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void; + /** + * TODO: + * After looking at the skills there doesnt seem to be a configuration per skill to boost + * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it) + * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure! + * @param pmcData + * @param bonus + */ protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void; + /** + * Process a players hideout, update areas that use resources + increment production timers + * @param sessionID Session id + */ updatePlayerHideout(sessionID: string): void; + /** + * Update progress timer for water collector + * @param pmcData profile to update + * @param productionId id of water collection production to update + * @param hideoutProperties Hideout properties + */ + protected updateWaterCollectorProductionTimer(pmcData: IPmcData, productionId: string, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Iterate over productions and update their progress timers + * @param pmcData Profile to check for productions and update + * @param hideoutProperties Hideout properties + */ + protected updateProductionTimers(pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Update progress timer for scav case + * @param pmcData Profile to update + * @param productionId Id of scav case production to update + */ + protected updateScavCaseProductionTimer(pmcData: IPmcData, productionId: string): void; + /** + * Iterate over hideout areas that use resources (fuel/filters etc) and update associated values + * @param sessionID Session id + * @param pmcData Profile to update areas of + * @param hideoutProperties hideout properties + */ + protected updateAreasWithResources(sessionID: string, pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void; protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean; - protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): HideoutArea; - protected updateWaterFilters(waterFilterArea: HideoutArea, pwProd: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; + protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void; + /** + * Adjust water filter objects resourceValue or delete when they reach 0 resource + * @param waterFilterArea water filter area to update + * @param production production object + * @param isGeneratorOn is generatory enabled + * @param pmcData Player profile + * @returns Updated HideoutArea object + */ + protected updateWaterFilters(waterFilterArea: HideoutArea, production: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd; - protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): HideoutArea; + protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): void; protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production; protected getBTCSlots(pmcData: IPmcData): number; protected getManagementSkillsSlots(): number; diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/InRaidHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/InRaidHelper.d.ts index c3cbfbb..962df38 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/InRaidHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/InRaidHelper.d.ts @@ -5,6 +5,7 @@ import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequ import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; import { InventoryHelper } from "./InventoryHelper"; import { PaymentHelper } from "./PaymentHelper"; @@ -15,19 +16,8 @@ export declare class InRaidHelper { protected databaseServer: DatabaseServer; protected inventoryHelper: InventoryHelper; protected paymentHelper: PaymentHelper; - constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper); - /** - * Reset the SPT inraid property stored in a profile to 'none' - * @param sessionID Session id - */ - protected removePlayer(sessionID: string): void; - /** - * Some maps have one-time-use keys (e.g. Labs - * Remove the relevant key from an inventory based on the post-raid request data passed in - * @param offraidData post-raid data - * @param sessionID Session id - */ - protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + protected profileFixerService: ProfileFixerService; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, profileFixerService: ProfileFixerService); /** * Check an array of items and add an upd object to money items with a stack count of 1 * Single stack money items have no upd object and thus no StackObjectsCount, causing issues @@ -52,6 +42,18 @@ export declare class InRaidHelper { * @returns Reset profile object */ updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData; + /** + * Some maps have one-time-use keys (e.g. Labs + * Remove the relevant key from an inventory based on the post-raid request data passed in + * @param offraidData post-raid data + * @param sessionID Session id + */ + protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Set the SPT inraid location Profile property to 'none' + * @param sessionID Session id + */ + protected setPlayerInRaidLocationStatusToNone(sessionID: string): void; /** * Adds SpawnedInSession property to items found in a raid * Removes SpawnedInSession for non-scav players if item was taken into raid with SpawnedInSession = true @@ -93,5 +95,10 @@ export declare class InRaidHelper { * @returns true if item is kept after death */ isItemKeptAfterDeath(slotId: string): boolean; + /** + * Return the equipped items from a players inventory + * @param items Players inventory to search through + * @returns an array of equipped items + */ getPlayerGear(items: Item[]): Item[]; } diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/InventoryHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/InventoryHelper.d.ts index dc7cbca..b8e5c9d 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/InventoryHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/InventoryHelper.d.ts @@ -43,6 +43,7 @@ export declare class InventoryHelper { constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, httpResponse: HttpResponseUtil, fenceService: FenceService, databaseServer: DatabaseServer, paymentHelper: PaymentHelper, traderAssortHelper: TraderAssortHelper, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, containerHelper: ContainerHelper, profileHelper: ProfileHelper, configServer: ConfigServer); addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse; removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + removeItemByCount(pmcData: IPmcData, itemId: string, count: number, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record; protected getSizeByInventoryItemHash(itemTpl: string, itemID: string, inventoryItemHash: InventoryHelper.InventoryItemHash): Record; protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash; diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/ItemHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/ItemHelper.d.ts index 1701c62..0effaf2 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/ItemHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/ItemHelper.d.ts @@ -1,35 +1,30 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { InsuredItem } from "../models/eft/common/tables/IBotBase"; import { Item, Repairable } from "../models/eft/common/tables/IItem"; +import { IStaticAmmoDetails } from "../models/eft/common/tables/ILootBase"; import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; declare class ItemHelper { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected objectId: ObjectId; + protected mathUtil: MathUtil; protected databaseServer: DatabaseServer; - constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer); + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer); /** - * Checks if a id is a valid item. Valid meaning that it's an item that be stored in stash + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash * @param {string} tpl the template id / tpl * @returns boolean; true for items that may be in player posession and not quest items */ isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean; - /** - * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward - * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. - * @param {*} tpl template id of item to check - * @returns boolean: true if item is valid reward - */ - isValidRewardItem(tpl: string): boolean; - /** - * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) - * @returns a list of rewardable items [[_tpl, itemTemplate],...] - */ - getRewardableItems(): [string, ITemplateItem][]; /** * Check if the tpl / template Id provided is a descendent of the baseclass * @@ -84,6 +79,11 @@ declare class ItemHelper { * @returns {array} The array of StackSlotItems */ generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; /** * Gets item data from items.json * @param tpl items template id to look up @@ -196,6 +196,22 @@ declare class ItemHelper { * @returns ItemSize object (width and height) */ getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; + /** + * Get a random cartridge from an items Filter property + * @param item + * @returns + */ + getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; + createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; + protected getRandomValidCaliber(magTemplate: ITemplateItem): string; + protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; + createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item; + /** + * Get the size of a stack, return 1 if no stack object count property found + * @param item Item to get stack size of + * @returns size of stack + */ + getItemStackSize(item: Item): number; } declare namespace ItemHelper { interface ItemSize { diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/ProfileHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/ProfileHelper.d.ts index 6c150c8..9c6560a 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/ProfileHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/ProfileHelper.d.ts @@ -2,24 +2,41 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { Stats } from "../models/eft/common/tables/IBotBase"; import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { FenceService } from "../services/FenceService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; import { Watermark } from "../utils/Watermark"; import { ItemHelper } from "./ItemHelper"; export declare class ProfileHelper { + protected logger: ILogger; protected jsonUtil: JsonUtil; protected watermark: Watermark; protected timeUtil: TimeUtil; protected saveServer: SaveServer; protected databaseServer: DatabaseServer; protected itemHelper: ItemHelper; + protected profileSnapshotService: ProfileSnapshotService; protected fenceService: FenceService; - constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, fenceService: FenceService); + constructor(logger: ILogger, jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService, fenceService: FenceService); resetProfileQuestCondition(sessionID: string, conditionId: string): void; getCompleteProfile(sessionID: string): IPmcData[]; + /** + * Fix xp doubling on post-raid xp reward screen by sending a 'dummy' profile to the post-raid screen + * Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using + * the now updated profile values as a base, meaning it shows x2 xp gained + * Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return + * Delete snapshot of pre-raid profile prior to returning profile data + * @param sessionId Session id + * @param output pmc and scav profiles array + * @param pmcProfile post-raid pmc profile + * @param scavProfile post-raid scav profile + * @returns updated profile array + */ + protected postRaidXpWorkaroundFix(sessionId: string, output: IPmcData[], pmcProfile: IPmcData, scavProfile: IPmcData): IPmcData[]; isNicknameTaken(info: IValidateNicknameRequestData, sessionID: string): boolean; /** * Add experience to a PMC inside the players profile diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/QuestHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/QuestHelper.d.ts index 0f68cd5..d66d150 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/QuestHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/QuestHelper.d.ts @@ -36,13 +36,30 @@ export declare class QuestHelper { protected configServer: ConfigServer; protected questConfig: IQuestConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, traderHelper: TraderHelper, configServer: ConfigServer); - questStatus(pmcData: IPmcData, questID: string): QuestStatus; /** - * returns true is the condition is satisfied + * Get status of a quest by quest id + * @param pmcData Profile to search + * @param questID Quest id to look up + * @returns QuestStauts enum + */ + getQuestStatus(pmcData: IPmcData, questID: string): QuestStatus; + /** + * returns true is the level condition is satisfied + * @param playerLevel Players level + * @param condition Quest condition + * @returns true if player level is greater than or equal to quest */ - evaluateLevel(pmcProfile: IPmcData, cond: AvailableForConditions): boolean; + doesPlayerLevelFulfilCondition(playerLevel: number, condition: AvailableForConditions): boolean; getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[]; - rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progress: number): void; + /** + * Increase skill points of a skill on player profile + * @param sessionID Session id + * @param pmcData Player profile + * @param output output object to send back to client + * @param skillName Name of skill to increase skill points of + * @param progressAmount Amount of skill points to add to skill + */ + rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progressAmount: number): void; getQuestLocale(questId: string): any; /** * Debug Routine for showing some information on the diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairOfferHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairOfferHelper.d.ts index 8d03bee..e9d72ca 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairOfferHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairOfferHelper.d.ts @@ -22,12 +22,14 @@ import { ProfileHelper } from "./ProfileHelper"; import { RagfairHelper } from "./RagfairHelper"; import { RagfairServerHelper } from "./RagfairServerHelper"; import { RagfairSortHelper } from "./RagfairSortHelper"; +import { TraderHelper } from "./TraderHelper"; export declare class RagfairOfferHelper { protected logger: ILogger; protected timeUtil: TimeUtil; protected hashUtil: HashUtil; protected itemEventRouter: ItemEventRouter; protected databaseServer: DatabaseServer; + protected traderHelper: TraderHelper; protected saveServer: SaveServer; protected dialogueHelper: DialogueHelper; protected itemHelper: ItemHelper; @@ -43,10 +45,10 @@ export declare class RagfairOfferHelper { protected static goodSoldTemplate: string; protected ragfairConfig: IRagfairConfig; protected questConfig: IQuestConfig; - constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); + constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); getValidOffers(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; - processOffers(sessionID: string): boolean; + processOffersOnProfile(sessionID: string): boolean; protected getProfileOffers(sessionID: string): IRagfairOffer[]; protected deleteOfferByOfferId(sessionID: string, offerId: string): void; protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse; diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairSellHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairSellHelper.d.ts index 6ec004a..91b8a20 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairSellHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairSellHelper.d.ts @@ -11,6 +11,12 @@ export declare class RagfairSellHelper { protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer); - calculateSellChance(baseChance: number, offerPrice: number, requirementsPriceInRub: number): number; - rollForSale(sellChance: number, count: number): SellResult[]; + calculateSellChance(baseChancePercent: number, offerPriceRub: number, playerListedPriceRub: number): number; + /** + * Determine if the offer being listed will be sold + * @param sellChancePercent chance item will sell + * @param itemSellCount count of items to sell + * @returns Array of purchases of item(s) lsited + */ + rollForSale(sellChancePercent: number, itemSellCount: number): SellResult[]; } diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairServerHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairServerHelper.d.ts index e4939d1..a03cdda 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairServerHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/RagfairServerHelper.d.ts @@ -6,6 +6,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { LocaleService } from "../services/LocaleService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -13,6 +14,9 @@ import { RandomUtil } from "../utils/RandomUtil"; import { DialogueHelper } from "./DialogueHelper"; import { ItemHelper } from "./ItemHelper"; import { ProfileHelper } from "./ProfileHelper"; +/** + * Helper class for common ragfair server actions + */ export declare class RagfairServerHelper { protected randomUtil: RandomUtil; protected hashUtil: HashUtil; @@ -23,11 +27,12 @@ export declare class RagfairServerHelper { protected localeService: LocaleService; protected dialogueHelper: DialogueHelper; protected jsonUtil: JsonUtil; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; protected questConfig: IQuestConfig; protected static goodsReturnedTemplate: string; - constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, configServer: ConfigServer); + constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * Is item valid / on blacklist / quest item * @param itemDetails diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/RepairHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/RepairHelper.d.ts index 9a3ab29..5b09320 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/RepairHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/RepairHelper.d.ts @@ -14,8 +14,17 @@ export declare class RepairHelper { protected configServer: ConfigServer; protected repairConfig: IRepairConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); - updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit?: boolean, applyRandomDegradation?: boolean): Item; - protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number): number; - protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, armorMax: number): number; + /** + * + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; isWeaponTemplate(tpl: string): boolean; } diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/TradeHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/TradeHelper.d.ts index 975062b..7ab9768 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/TradeHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/TradeHelper.d.ts @@ -39,6 +39,12 @@ export declare class TradeHelper { * @returns */ sellItem(pmcData: IPmcData, body: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment the assorts buy count by number of items purchased + * Show error on screen if player attepts to buy more than what the buy max allows + * @param assortBeingPurchased assort being bought + * @param itemsPurchasedCount number of items being bought + */ protected incrementAssortBuyCount(assortBeingPurchased: Item, itemsPurchasedCount: number): void; protected checkPurchaseIsWithinTraderItemLimit(assortBeingPurchased: Item, assortId: string, count: number): void; } diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/TraderAssortHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/TraderAssortHelper.d.ts index 91ba6b9..025efd6 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/TraderAssortHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/TraderAssortHelper.d.ts @@ -1,7 +1,7 @@ import { RagfairAssortGenerator } from "../generators/RagfairAssortGenerator"; import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; import { Item } from "../models/eft/common/tables/IItem"; -import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITrader, ITraderAssort } from "../models/eft/common/tables/ITrader"; import { ITraderConfig } from "../models/spt/config/ITraderConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -10,13 +10,16 @@ import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { JsonUtil } from "../utils/JsonUtil"; import { MathUtil } from "../utils/MathUtil"; +import { TimeUtil } from "../utils/TimeUtil"; import { AssortHelper } from "./AssortHelper"; import { PaymentHelper } from "./PaymentHelper"; import { ProfileHelper } from "./ProfileHelper"; +import { TraderHelper } from "./TraderHelper"; export declare class TraderAssortHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; protected mathUtil: MathUtil; + protected timeUtil: TimeUtil; protected databaseServer: DatabaseServer; protected profileHelper: ProfileHelper; protected assortHelper: AssortHelper; @@ -24,18 +27,32 @@ export declare class TraderAssortHelper { protected ragfairAssortGenerator: RagfairAssortGenerator; protected ragfairOfferGenerator: RagfairOfferGenerator; protected traderAssortService: TraderAssortService; + protected traderHelper: TraderHelper; protected fenceService: FenceService; protected configServer: ConfigServer; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, fenceService: FenceService, configServer: ConfigServer); + constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, traderHelper: TraderHelper, fenceService: FenceService, configServer: ConfigServer); /** * Get a traders assorts * Can be used for returning ragfair / fence assorts + * Filter out assorts not unlocked due to level OR quest completion * @param sessionId session id - * @param traderId trader id - * @returns a traders assorts + * @param traderId traders id + * @returns a traders' assorts */ - getAssort(sessionId: string, traderId: string): ITraderAssort; + getAssort(sessionId: string, traderId: string, flea?: boolean): ITraderAssort; + /** + * Reset a traders assorts and move nextResupply value to future + * Flag trader as needing a flea offer reset to be picked up by flea update() function + * @param trader trader details to alter + */ + resetExpiredTrader(trader: ITrader): void; + /** + * Does the supplied trader need its assorts refreshed + * @param traderID Trader to check + * @returns true they need refreshing + */ + traderAssortsHaveExpired(traderID: string): boolean; /** * Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config * @param traderAssort Assorts to multiple price of diff --git a/Faupi-MunitionsExpert/server/dist/types/helpers/TraderHelper.d.ts b/Faupi-MunitionsExpert/server/dist/types/helpers/TraderHelper.d.ts index b2e9d38..0dc93e8 100644 --- a/Faupi-MunitionsExpert/server/dist/types/helpers/TraderHelper.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/helpers/TraderHelper.d.ts @@ -9,6 +9,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { FenceService } from "../services/FenceService"; import { PlayerService } from "../services/PlayerService"; +import { TimeUtil } from "../utils/TimeUtil"; import { HandbookHelper } from "./HandbookHelper"; import { ItemHelper } from "./ItemHelper"; import { PaymentHelper } from "./PaymentHelper"; @@ -23,9 +24,10 @@ export declare class TraderHelper { protected handbookHelper: HandbookHelper; protected playerService: PlayerService; protected fenceService: FenceService; + protected timeUtil: TimeUtil; protected configServer: ConfigServer; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); getTrader(traderID: string, sessionID: string): ITraderBase; getTraderAssortsById(traderId: string): ITraderAssort; /** @@ -63,7 +65,7 @@ export declare class TraderHelper { * @param item * @returns boolean */ - protected isWeaponAndBelowTraderBuyDurability(traderID: string, item: Item): boolean; + protected isWeaponBelowTraderBuyDurability(traderID: string, item: Item): boolean; /** * Get the price of an item and all of its attached children * Take into account bonuses/adjsutments e.g. discounts @@ -97,6 +99,17 @@ export declare class TraderHelper { * @param sessionID session id */ lvlUp(traderID: string, sessionID: string): void; + /** + * Get the next update timestamp for a trader + * @param traderID Trader to look up update value for + * @returns future timestamp + */ + getNextUpdateTimestamp(traderID: string): number; + /** + * Get the reset time between trader assort refreshes in seconds + * @param traderId Trader to look up + * @returns Time in seconds + */ getTraderUpdateSeconds(traderId: string): number; /** * check if an item is allowed to be sold to a trader diff --git a/Faupi-MunitionsExpert/server/dist/types/loaders/DelayedModLoader.d.ts b/Faupi-MunitionsExpert/server/dist/types/loaders/DelayedModLoader.d.ts deleted file mode 100644 index 2a05604..0000000 --- a/Faupi-MunitionsExpert/server/dist/types/loaders/DelayedModLoader.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { HandbookController } from "../controllers/HandbookController"; -import { IModLoader } from "../models/spt/mod/IModLoader"; -import { ModCompilerService } from "../services/ModCompilerService"; -import { VFS } from "../utils/VFS"; -import { BundleLoader } from "./BundleLoader"; -import { InitialModLoader } from "./InitialModLoader"; -export declare class DelayedModLoader implements IModLoader { - protected bundleLoader: BundleLoader; - protected handbookController: HandbookController; - protected vfs: VFS; - protected modCompilerService: ModCompilerService; - protected initialModLoader: InitialModLoader; - constructor(bundleLoader: BundleLoader, handbookController: HandbookController, vfs: VFS, modCompilerService: ModCompilerService, initialModLoader: InitialModLoader); - getBundles(local: boolean): string; - getBundle(key: string, local: boolean): void; - getModPath(mod: string): string; - load(): void; - protected executeMods(container: DependencyContainer): void; - protected addBundles(): void; -} diff --git a/Faupi-MunitionsExpert/server/dist/types/loaders/InitialModLoader.d.ts b/Faupi-MunitionsExpert/server/dist/types/loaders/InitialModLoader.d.ts deleted file mode 100644 index 68e47fe..0000000 --- a/Faupi-MunitionsExpert/server/dist/types/loaders/InitialModLoader.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { ICoreConfig } from "../models/spt/config/ICoreConfig"; -import { ModLoader } from "../models/spt/mod/IMod"; -import { IModLoader } from "../models/spt/mod/IModLoader"; -import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { ConfigServer } from "../servers/ConfigServer"; -import { ModCompilerService } from "../services/ModCompilerService"; -import { JsonUtil } from "../utils/JsonUtil"; -import { VFS } from "../utils/VFS"; -import { BundleLoader } from "./BundleLoader"; -export declare class InitialModLoader implements IModLoader { - protected logger: ILogger; - protected vfs: VFS; - protected jsonUtil: JsonUtil; - protected modCompilerService: ModCompilerService; - protected bundleLoader: BundleLoader; - protected configServer: ConfigServer; - protected static container: DependencyContainer; - protected readonly basepath = "user/mods/"; - protected imported: Record; - protected akiConfig: ICoreConfig; - constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, configServer: ConfigServer); - load(container: DependencyContainer): Promise; - getBundles(local: boolean): string; - getBundle(key: string, local: boolean): void; - /** - * Returns a list of mods with preserved load order - * @returns Array of mod names in load order - */ - getImportedModsNames(): string[]; - getModPath(mod: string): string; - protected importClass(name: string, filepath: string, container: DependencyContainer): void; - protected importMods(): Promise; - /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array - */ - protected getBrokenMods(mods: string[]): string[]; - /** - * Get packageJson data for mods - * @param mods mods to get packageJson for - * @returns dictionary - */ - protected getModsPackageData(mods: string[]): Record; - /** - * Does mod have "delayedLoad(" string in its entry class - * @param modFolderName folder name - * @param modToValidate package.json details - * @returns boolean - */ - protected isModSpt300Compatible(modFolderName: string, modToValidate: IPackageJsonData): boolean; - protected isModCombatibleWithAki(mod: IPackageJsonData): boolean; - protected executeMods(container: DependencyContainer): void; - sortModsLoadOrder(): string[]; - protected addMod(mod: string): Promise; - protected areModDependenciesFulfilled(mod: IPackageJsonData, loadedMods: Record): boolean; - protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; - protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; - protected getLoadOrder(mods: Record): Record; - getContainer(): DependencyContainer; -} diff --git a/Faupi-MunitionsExpert/server/dist/types/loaders/PreAkiModLoader.d.ts b/Faupi-MunitionsExpert/server/dist/types/loaders/PreAkiModLoader.d.ts index 6ded3c6..4ab1689 100644 --- a/Faupi-MunitionsExpert/server/dist/types/loaders/PreAkiModLoader.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/loaders/PreAkiModLoader.d.ts @@ -33,9 +33,20 @@ export declare class PreAkiModLoader implements IModLoader { protected importClass(name: string, filepath: string, container: DependencyContainer): void; protected importMods(): Promise; /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array + * Check for duplciate mods loaded, show error if duplicate mod found + * @param modPackageData dictionary of mod package.json data + */ + protected checkForDuplicateMods(modPackageData: Record): void; + /** + * Check for and return duplicate strings inside an array + * @param stringArray Array to check for duplicates + * @returns string array of duplicates, empty if none found + */ + protected getDuplicates(stringArray: string[]): string[]; + /** + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array */ protected getBrokenMods(mods: string[]): string[]; /** @@ -57,7 +68,12 @@ export declare class PreAkiModLoader implements IModLoader { protected addMod(mod: string): Promise; protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; protected getLoadOrder(mods: Record): Record; getContainer(): DependencyContainer; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/IGlobals.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/IGlobals.d.ts index 9d28dbc..81e2023 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/IGlobals.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/IGlobals.d.ts @@ -1175,5 +1175,6 @@ export interface Preset { _name: string; _parent: string; _items: Item[]; + /** Default presets have this property */ _encyclopedia?: string; } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/ILocationBase.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/ILocationBase.d.ts index b1dd448..78ade9a 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/ILocationBase.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/ILocationBase.d.ts @@ -137,7 +137,7 @@ export interface BotLocationModifier { VisibleDistance: number; } export interface MinMaxBot { - WildSpawnType: string; + WildSpawnType: WildSpawnType; max: number; min: number; } @@ -195,7 +195,7 @@ export interface Wave { BotPreset: string; BotSide: string; SpawnPoints: string; - WildSpawnType: string; + WildSpawnType: WildSpawnType; isPlayers: boolean; number: number; slots_max: number; @@ -203,3 +203,7 @@ export interface Wave { time_max: number; time_min: number; } +export declare enum WildSpawnType { + ASSAULT = "assault", + MARKSMAN = "marksman" +} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/MemberCategory.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/MemberCategory.d.ts deleted file mode 100644 index 3bd9a21..0000000 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/MemberCategory.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -export declare enum MemberCategory { - Default = 0, - Developer = 1, - UniqueId = 2, - Trader = 4, - Group = 8, - System = 16, - ChatModerator = 32, - ChatModeratorWithPermanentBan = 64, - UnitTest = 128, - Sherpa = 256, - Emissary = 512 -} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/IBotBase.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/IBotBase.d.ts index 0ee468e..25cb861 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/IBotBase.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/IBotBase.d.ts @@ -28,6 +28,8 @@ export interface IBotBase { CarExtractCounts: CarExtractCounts; SurvivorClass: SurvivorClass; WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; } export interface Info { EntryPoint: string; @@ -66,13 +68,13 @@ export interface IBan { dateTime: number; } export declare enum BanType { - Chat = 0, - RagFair = 1, - Voip = 2, - Trading = 3, - Online = 4, - Friends = 5, - ChangeNickname = 6 + CHAT = 0, + RAGFAIR = 1, + VOIP = 2, + TRADING = 3, + ONLINE = 4, + FRIENDS = 5, + CHANGE_NICKNAME = 6 } export interface Customization { Head: string; @@ -312,11 +314,11 @@ export interface Notes { export interface CarExtractCounts { } export declare enum SurvivorClass { - Unknown = 0, - Neutralizer = 1, - Marauder = 2, - Paramedic = 3, - Survivor = 4 + UNKNOWN = 0, + NEUTRALIZER = 1, + MARAUDER = 2, + PARAMEDIC = 3, + SURVIVOR = 4 } export interface Quest { qid: string; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts index 23a1a14..8569e61 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts @@ -34,6 +34,7 @@ export interface Props { LootExperience?: number; ExamineExperience?: number; HideEntrails?: boolean; + InsuranceDisabled?: boolean; RepairCost?: number; RepairSpeed?: number; ExtraSizeLeft?: number; @@ -79,7 +80,7 @@ export interface Props { HasShoulderContact?: boolean; SightingRange?: number; DoubleActionAccuracyPenaltyMult?: number; - ModesCount: any; + ModesCount?: any; DurabilityBurnModificator?: number; HeatFactor?: number; CoolFactor?: number; @@ -155,7 +156,7 @@ export interface Props { RigLayoutName?: string; MaxDurability?: number; armorZone?: string[]; - armorClass: any; + armorClass?: any; mousePenalty?: number; weaponErgonomicPenalty?: number; BluntThroughput?: number; @@ -206,6 +207,7 @@ export interface Props { IsOneoff?: boolean; MustBoltBeOpennedForExternalReload?: boolean; MustBoltBeOpennedForInternalReload?: boolean; + NoFiremodeOnBoltcatch?: boolean; BoltAction?: boolean; HipAccuracyRestorationDelay?: number; HipAccuracyRestorationSpeed?: number; @@ -252,8 +254,8 @@ export interface Props { foodUseTime?: number; foodEffectType?: string; StimulatorBuffs?: string; - effects_health: any; - effects_damage: any; + effects_health?: any; + effects_damage?: any; MaximumNumberOfUsage?: number; knifeHitDelay?: number; knifeHitSlashRate?: number; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/ITrader.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/ITrader.d.ts index f0fe2b5..37b2d61 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/ITrader.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/common/tables/ITrader.d.ts @@ -7,7 +7,7 @@ export interface ITrader { suits?: ISuit[]; } export interface ITraderBase { - refreshAssort: boolean; + refreshTraderRagfairOffers: boolean; _id: string; avatar: string; balance_dol: number; @@ -58,7 +58,7 @@ export interface Repair { quality: string; } export interface ITraderAssort { - nextResupply?: number; + nextResupply: number; items: Item[]; barter_scheme: Record; loyal_level_items: Record; @@ -67,6 +67,7 @@ export interface IBarterScheme { count: number; _tpl: string; onlyFunctional?: boolean; + sptQuestLocked?: boolean; } export interface ISuit { _id: string; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/health/Effect.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/health/Effect.d.ts index 2f0adac..7eb3ffc 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/health/Effect.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/health/Effect.d.ts @@ -1,5 +1,5 @@ export declare enum Effect { - Fracture = "Fracture", - LightBleeding = "LightBleeding", - HeavyBleeding = "HeavyBleeding" + FRACTURE = "Fracture", + LIGHT_BLEEDING = "LightBleeding", + HEAVY_BLEEDING = "HeavyBleeding" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/health/IOffraidHealRequestData.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/health/IOffraidHealRequestData.d.ts index c242300..26b02bd 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/health/IOffraidHealRequestData.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/health/IOffraidHealRequestData.d.ts @@ -7,12 +7,12 @@ export interface IOffraidHealRequestData extends IBaseInteractionRequestData { time: number; } export declare enum BodyPart { - Head = 0, - Chest = 1, - Stomach = 2, - LeftArm = 3, - RightArm = 4, - LeftLeg = 5, - RightLeg = 6, - Common = 7 + HEAD = "Head", + CHEST = "Chest", + STOMACH = "Stomach", + LEFT_ARM = "LeftArm", + RIGHT_ARM = "RightArm", + LEFT_LEG = "LeftLeg", + RIGHT_LEG = "RightLeg", + COMMON = "Common" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/hideout/HideoutAreasEnum.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/hideout/HideoutAreasEnum.d.ts deleted file mode 100644 index 10f851b..0000000 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/hideout/HideoutAreasEnum.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -export declare enum HideoutAreasEnum { - NOTSET = -1, - VENTS = 0, - SECURITY = 1, - LAVATORY = 2, - STASH = 3, - GENERATOR = 4, - HEATING = 5, - WATER_COLLECTOR = 6, - MEDSTATION = 7, - NUTRITION_UNIT = 8, - REST_SPACE = 9, - WORKBENCH = 10, - INTEL_CENTER = 11, - SHOOTING_RANGE = 12, - LIBRARY = 13, - SCAV_CASE = 14, - ILLUMINATION = 15, - PLACE_OF_FAME = 16, - AIR_FILTERING = 17, - SOLAR_POWER = 18, - BOOZE_GENERATOR = 19, - BITCOIN_FARM = 20, - CHRISTMAS_TREE = 21 -} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/notifier/INotifier.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/notifier/INotifier.d.ts index 8c48260..b248636 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/notifier/INotifier.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/notifier/INotifier.d.ts @@ -1,9 +1,9 @@ export interface INotifierChannel { - "server": string; - "channel_id": string; - "url": string; - "notifierServer": string; - "ws": string; + server: string; + channel_id: string; + url: string; + notifierServer: string; + ws: string; } import { Message } from "../profile/IAkiProfile"; export interface INotification { diff --git a/Faupi-MunitionsExpert/server/dist/types/models/eft/ragfair/IRagfairOffer.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/eft/ragfair/IRagfairOffer.d.ts index 63f655e..141b605 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/eft/ragfair/IRagfairOffer.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/eft/ragfair/IRagfairOffer.d.ts @@ -15,6 +15,8 @@ export interface IRagfairOffer { name?: string; shortName?: string; loyaltyLevel: number; + buyRestrictionMax?: number; + buyRestrictionCurrent?: number; locked: boolean; unlimitedCount: boolean; summaryCost: number; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/AmmoTypes.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/AmmoTypes.d.ts index b52ddcf..254b410 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/AmmoTypes.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/AmmoTypes.d.ts @@ -23,7 +23,7 @@ export declare enum Ammo762x54 { BT_GZH = "5e023d34e8a400319a28ed44", BS_GZH = "5e023d48186a883be655e551" } -export declare enum Ammo338Lapua { +export declare enum Ammo86x70 { TAC_X = "5fc382b6d6fa9c00c571bbc3", UCW = "5fc382c1016cce60e8341b20", AP = "5fc382a9d724d907e2077dab", @@ -85,13 +85,13 @@ export declare enum Ammo9x21 { PE_GZH = "5a26ac06c4a282000c5a90a8", BT_GZH = "5a26ac0ec4a28200741e1e18" } -export declare enum Ammo357Mag { +export declare enum Ammo9x33R { FMJ = "62330b3ed4dc74626d570b95", HOLLOW_POINT = "62330bfadc5883093563729b", SOFT_POINT = "62330c40bdd19b369e1e53d1", JACKET_HP = "62330c18744e5e31df12f516" } -export declare enum Ammo45ACP { +export declare enum Ammo1143x23ACP { MATCH_FMJ = "5e81f423763d9f754677bf2e", HYDRA_SHOK = "5efb0fc6aeb21837e749c801", LASERMATCH_FMJ = "5efb0d4f4bc50b58e81710f3", @@ -126,7 +126,7 @@ export declare enum Ammo556x45 { MK_318_MOD_0_SOST = "60194943740c5d77f6705eea", SSA_AP = "601949593ae8f707c4608daa" } -export declare enum Ammo300Blackout { +export declare enum Ammo762x35 { M62_TRACER = "619636be6db0f2477964e710", BCP_FMJ = "5fbe3ffdf8b6a877a729ea82", AP = "5fd20ff893a8961fc660a954", diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/BaseClasses.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/BaseClasses.d.ts index e733bca..36ebc71 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/BaseClasses.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/BaseClasses.d.ts @@ -25,6 +25,7 @@ export declare enum BaseClasses { SIGHTS = "5448fe7a4bdc2d6f028b456b", MEDS = "543be5664bdc2dd4348b4569", MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", KEY = "543be5e94bdc2df1348b4568", KEY_MECHANICAL = "5c99f98d86f7745c314214b3", KEYCARD = "5c164d2286f774194c5e69fa", @@ -66,8 +67,8 @@ export declare enum BaseClasses { LUBRICANT = "57864e4c24597754843f8723", BATTERY = "57864ee62459775490116fc1", ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", - REFLEX_SIGHT = "55818ad54bdc2ddc698b4569", TACTICAL_COMBO = "55818b164bdc2ddc698b456c", + FLASHLIGHT = "55818b084bdc2d5b648b4571", MAGAZINE = "5448bc234bdc2d3c308b4569", LIGHT_LASER = "55818b0e4bdc2dde698b456e", FLASH_HIDER = "550aa4bf4bdc2dd6348b456b", diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/BotAmount.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/BotAmount.d.ts index d0e1df1..9ef9cab 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/BotAmount.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/BotAmount.d.ts @@ -1,7 +1,7 @@ export declare enum BotAmount { - AsOnline = "AsOnline", - Low = "Low", - Medium = "Medium", - High = "High", - Horde = "Horde" + AS_ONLINE = "AsOnline", + LOW = "Low", + MEDIUM = "Medium", + HIGH = "High", + HORDE = "Horde" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/BotDifficulty.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/BotDifficulty.d.ts index c901bcf..80e45ad 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/BotDifficulty.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/BotDifficulty.d.ts @@ -1,8 +1,8 @@ export declare enum BotDifficulty { - AsOnline = "AsOnline", - Easy = "Easy", - Medium = "Medium", - Hard = "Hard", - Impossible = "Impossible", - Random = "Random" + AS_ONLINE = "AsOnline", + EASY = "Easy", + MEDIUM = "Medium", + HARD = "Hard", + IMPOSSIBLE = "Impossible", + RANDOM = "Random" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/ConfigTypes.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/ConfigTypes.d.ts index 61d6f99..468ece5 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/ConfigTypes.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/ConfigTypes.d.ts @@ -8,6 +8,7 @@ export declare enum ConfigTypes { IN_RAID = "aki-inraid", INSURANCE = "aki-insurance", INVENTORY = "aki-inventory", + ITEM = "aki-item", LOCALE = "aki-locale", LOCATION = "aki-location", MATCH = "aki-match", diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/ELocationName.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/ELocationName.d.ts index b56cc08..7ae7caa 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/ELocationName.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/ELocationName.d.ts @@ -1,5 +1,6 @@ export declare enum ELocationName { FACTORY_DAY = "factory4_day", + FACTORY_NIGHT = "factory4_night", BIGMAP = "bigmap", WOODS = "Woods", SHORELINE = "Shoreline", diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/MemberCategory.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/MemberCategory.d.ts index 3bd9a21..a81380e 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/MemberCategory.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/MemberCategory.d.ts @@ -1,13 +1,13 @@ export declare enum MemberCategory { - Default = 0, - Developer = 1, - UniqueId = 2, - Trader = 4, - Group = 8, - System = 16, - ChatModerator = 32, - ChatModeratorWithPermanentBan = 64, - UnitTest = 128, - Sherpa = 256, - Emissary = 512 + DEFAULT = 0, + DEVELOPER = 1, + UNIQUE_ID = 2, + TRADER = 4, + GROUP = 8, + SYSTEM = 16, + CHAT_MODERATOR = 32, + CHAT_MODERATOR_WITH_PERMANENT_BAN = 64, + UNIT_TEST = 128, + SHERPA = 256, + EMISSARY = 512 } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/QuestRewardType.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/QuestRewardType.d.ts index 1d3db86..16f7e39 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/QuestRewardType.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/QuestRewardType.d.ts @@ -1,8 +1,8 @@ export declare enum QuestRewardType { - Skill = "Skill", - Experience = "Experience", - TraderStanding = "TraderStanding", - TraderUnlock = "TraderUnlock", - Item = "Item", - AssortmentUnlock = "AssortmentUnlock" + SKILL = "Skill", + EXPERIENCE = "Experience", + TRADER_STANDING = "TraderStanding", + TRADER_UNLOCK = "TraderUnlock", + ITEM = "Item", + ASSORTMENT_UNLOCK = "AssortmentUnlock" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/RaidMode.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/RaidMode.d.ts index c5a8cff..e20cf3f 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/enums/RaidMode.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/RaidMode.d.ts @@ -1,5 +1,5 @@ export declare enum RaidMode { - Online = "Online", - Local = "Local", - Coop = "Coop" + ONLINE = "Online", + LOCAL = "Local", + COOP = "Coop" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/enums/WeaponTypes.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/external/mod.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/external/mod.d.ts deleted file mode 100644 index ecef460..0000000 --- a/Faupi-MunitionsExpert/server/dist/types/models/external/mod.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DependencyContainer } from "./tsyringe"; -export interface IMod { - load: (container: DependencyContainer) => void; - delayedLoad: (container: DependencyContainer) => void; -} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/bots/BotLootCache.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/bots/BotLootCache.d.ts index e185315..aedf7b0 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/bots/BotLootCache.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/bots/BotLootCache.d.ts @@ -11,13 +11,13 @@ export declare class BotLootCache { grenadeItems: ITemplateItem[]; } export declare enum LootCacheType { - Special = "Special", - Backpack = "Backpack", - Pocket = "Pocket", - Vest = "Vest", - Combined = "Combined", - HealingItems = "HealingItems", - DrugItems = "DrugItems", - StimItems = "StimItems", - GrenadeItems = "GrenadeItems" + SPECIAL = "Special", + BACKPACK = "Backpack", + POCKET = "Pocket", + VEST = "Vest", + COMBINED = "Combined", + HEALING_ITEMS = "HealingItems", + DRUG_ITEMS = "DrugItems", + STIM_ITEMS = "StimItems", + GRENADE_ITEMS = "GrenadeItems" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IAirdropConfig.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IAirdropConfig.d.ts index f4aee89..3edcbdd 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IAirdropConfig.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IAirdropConfig.d.ts @@ -1,14 +1,14 @@ +import { MinMax } from "../../common/MinMax"; import { IBaseConfig } from "./IBaseConfig"; export interface IAirdropConfig extends IBaseConfig { kind: "aki-airdrop"; airdropChancePercent: AirdropChancePercent; - airdropMinOpenHeight: number; - airdropMaxOpenHeight: number; planeMinFlyHeight: number; planeMaxFlyHeight: number; planeVolume: number; airdropMinStartTimeSeconds: number; airdropMaxStartTimeSeconds: number; + loot: AirdropLoot; } export interface AirdropChancePercent { bigmap: number; @@ -18,3 +18,13 @@ export interface AirdropChancePercent { interchange: number; reserve: number; } +export interface AirdropLoot { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IBotConfig.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IBotConfig.d.ts index e171087..af8ceba 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IBotConfig.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IBotConfig.d.ts @@ -1,17 +1,31 @@ import { MinMax } from "../../common/MinMax"; import { IBaseConfig } from "./IBaseConfig"; +import { IBotDurability } from "./IBotDurability"; +import { IPmcConfig } from "./IPmcConfig"; export interface IBotConfig extends IBaseConfig { kind: "aki-bot"; + /** How many variants of each bot should be generated on raid start */ presetBatch: PresetBatch; + /** What bot types should be classified as bosses */ bosses: string[]; - durability: Durability; + /** Control weapon/armor durability min/max values for each bot type */ + durability: IBotDurability; + /** Control the weighting of how expensive an average loot item is on a PMC or Scav */ lootNValue: LootNvalue; + /** Control what bots are added to a bots revenge list key: bottype, value: bottypes to revenge on seeing their death */ revenge: Record; - pmc: PmcConfig; + /** PMC bot specific config settings */ + pmc: IPmcConfig; + /** Control how many items are allowed to spawn on a bot + * key: bottype, value: */ itemSpawnLimits: Record>; - equipment: Record; + /** Blacklist/whitelist items on a bot */ + equipment: Record; + /** Show a bots botType value after their name */ showTypeInNickname: boolean; - maxBotCap: number; + /** Max number of bots that can be spawned in a raid at any one time */ + maxBotCap: Record; + /** How many stacks of secret ammo should a bot have in its bot secure container */ secureContainerAmmoStackCount: number; } export interface PresetBatch { @@ -44,79 +58,23 @@ export interface PresetBatch { test: number; exUsec: number; } -export interface Durability { - default: DefaultDurability; - pmc: PmcDurability; - boss: BotDurability; - follower: BotDurability; - assault: BotDurability; - cursedassault: BotDurability; - marksman: BotDurability; - pmcbot: BotDurability; - exusec: BotDurability; - sectantpriest: BotDurability; - sectantwarrior: BotDurability; -} -export interface DefaultDurability { - armor: DefaultArmor; - weapon: WeaponDurability; -} -export interface DefaultArmor { - maxDelta: number; - minDelta: number; -} -export interface WeaponDurability { - lowestMax: number; - highestMax: number; - maxDelta: number; - minDelta: number; -} -export interface PmcDurability { - armor: PmcDurabilityArmor; - weapon: WeaponDurability; -} -export interface PmcDurabilityArmor { - lowestMaxPercent: number; - highestMaxPercent: number; - maxDelta: number; - minDelta: number; -} -export interface BotDurability { - armor: ArmorDurability; - weapon: WeaponDurability; -} -export interface ArmorDurability { - maxDelta: number; - minDelta: number; -} export interface LootNvalue { scav: number; pmc: number; } -export interface PmcConfig { - dynamicLoot: PmcDynamicLoot; - difficulty: string; - looseWeaponInBackpackChancePercent: number; - looseWeaponInBackpackLootMinMax: MinMax; - isUsec: number; - chanceSameSideIsHostilePercent: number; - usecType: string; - bearType: string; - maxBackpackLootTotalRub: number; - maxPocketLootTotalRub: number; - maxVestLootTotalRub: number; - convertIntoPmcChance: Record; - enemyTypes: string[]; -} -export interface PmcDynamicLoot { - whitelist: string[]; - blacklist: string[]; - moneyStackLimits: Record; -} -export interface Equipment { +export interface EquipmentFilters { + weaponModLimits: ModLimits; + randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; blacklist: EquipmentFilterDetails[]; whitelist: EquipmentFilterDetails[]; } +export interface ModLimits { + /** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */ + scopeLimit?: number; + /** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */ + lightLaserLimit?: number; +} export interface EquipmentFilterDetails { levelRange: MinMax; equipment: Record; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IBotDurability.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IBotDurability.d.ts new file mode 100644 index 0000000..38a47cc --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IBotDurability.d.ts @@ -0,0 +1,47 @@ +export interface IBotDurability { + default: DefaultDurability; + pmc: PmcDurability; + boss: BotDurability; + follower: BotDurability; + assault: BotDurability; + cursedassault: BotDurability; + marksman: BotDurability; + pmcbot: BotDurability; + exusec: BotDurability; + gifter: BotDurability; + sectantpriest: BotDurability; + sectantwarrior: BotDurability; +} +/** Durability values to be used when a more specific bot type cant be found */ +export interface DefaultDurability { + armor: DefaultArmor; + weapon: WeaponDurability; +} +export interface DefaultArmor { + maxDelta: number; + minDelta: number; +} +export interface WeaponDurability { + lowestMax: number; + highestMax: number; + maxDelta: number; + minDelta: number; +} +export interface PmcDurability { + armor: PmcDurabilityArmor; + weapon: WeaponDurability; +} +export interface PmcDurabilityArmor { + lowestMaxPercent: number; + highestMaxPercent: number; + maxDelta: number; + minDelta: number; +} +export interface BotDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface ArmorDurability { + maxDelta: number; + minDelta: number; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IHideoutConfig.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IHideoutConfig.d.ts index 36d6246..f232052 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IHideoutConfig.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IHideoutConfig.d.ts @@ -2,6 +2,10 @@ import { IBaseConfig } from "./IBaseConfig"; export interface IHideoutConfig extends IBaseConfig { kind: "aki-hideout"; runIntervalSeconds: number; - fuelDrainRateMultipler: number; hoursForSkillCrafting: number; + generatorSpeedWithoutFuel: number; + generatorFuelFlowRate: number; + airFilterUnitFlowRate: number; + /** SEE HIDEOUTHELPER BEFORE CHANGING CONFIG */ + gpuBoostRate: number; } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IItemConfig.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IItemConfig.d.ts new file mode 100644 index 0000000..5ecccc2 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IItemConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IItemConfig extends IBaseConfig { + kind: "aki-item"; + blacklist: string[]; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IPmcConfig.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IPmcConfig.d.ts new file mode 100644 index 0000000..9db2ba1 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IPmcConfig.d.ts @@ -0,0 +1,26 @@ +import { MinMax } from "../../common/MinMax"; +export interface IPmcConfig { + dynamicLoot: DynamicLoot; + useDifficultyOverride: boolean; + difficulty: string; + looseWeaponInBackpackChancePercent: number; + looseWeaponInBackpackLootMinMax: MinMax; + isUsec: number; + chanceSameSideIsHostilePercent: number; + /** key: location, value: type for usec/bear */ + pmcType: Record; + maxBackpackLootTotalRub: number; + maxPocketLootTotalRub: number; + maxVestLootTotalRub: number; + convertIntoPmcChance: Record; + enemyTypes: string[]; +} +export interface PmcTypes { + usec: string; + bear: string; +} +export interface DynamicLoot { + whitelist: string[]; + blacklist: string[]; + moneyStackLimits: Record; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IQuestConfig.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IQuestConfig.d.ts index be4a97b..45c9aae 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IQuestConfig.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IQuestConfig.d.ts @@ -4,6 +4,8 @@ export interface IQuestConfig extends IBaseConfig { kind: "aki-quest"; redeemTime: number; repeatableQuests: IRepeatableQuestConfig[]; + bearOnlyQuests: string[]; + usecOnlyQuests: string[]; } export interface IRepeatableQuestConfig { name: string; @@ -15,6 +17,10 @@ export interface IRepeatableQuestConfig { locations: Record; traderWhitelist: ITraderWhitelist[]; questConfig: IQuestConfig; + /** Item base types to block when generating rewards */ + rewardBaseTypeBlacklist: string[]; + /** Item tplIds to ignore when generating rewards */ + rewardBlacklist: string[]; } export interface IRewardScaling { levels: number[]; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IRagfairConfig.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IRagfairConfig.d.ts index c24e617..c1b8763 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IRagfairConfig.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/IRagfairConfig.d.ts @@ -12,6 +12,7 @@ export interface Sell { chance: Chance; time: Time; reputation: Reputation; + simulatedSellHours: number; } export interface Chance { base: number; @@ -27,11 +28,18 @@ export interface Reputation { gain: number; loss: number; } +export declare class OfferAdjustment { + maxPriceDifferenceBelowHandbookPercent: number; + handbookPriceMultipier: number; + priceThreshholdRub: number; +} export interface Dynamic { + offerAdjustment: OfferAdjustment; expiredOfferThreshold: number; offerItemCount: MinMax; price: MinMax; presetPrice: MinMax; + showDefaultPresetsOnly: boolean; endTimeSeconds: MinMax; condition: Condition; stackablePercent: MinMax; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/ITraderConfig.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/ITraderConfig.d.ts index c8e8044..6b1c1e3 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/config/ITraderConfig.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/config/ITraderConfig.d.ts @@ -12,8 +12,10 @@ export interface UpdateTime { seconds: number; } export interface FenceConfig { + partialRefreshTimeSeconds: number; + partialRefreshChangePercent: number; assortSize: number; - maxPresetsCount: number; + maxPresetsPercent: number; presetPriceMult: number; blacklist: string[]; } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/helpers/Traders.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/helpers/Traders.d.ts deleted file mode 100644 index e935d29..0000000 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/helpers/Traders.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare const enum Traders { - PRAPOR = "54cb50c76803fa8b248b4571", - THERAPIST = "54cb57776803fa99248b456e", - FENCE = "579dc571d53a0658a154fbec", - SKIER = "58330581ace78e27b8b10cee", - PEACEKEEPER = "5935c25fb3acc3127c3d8cd9", - MECHANIC = "5a7c2eca46aef81a7ca2145d", - RAGMAN = "5ac3b934156ae10c4430e83c", - JAEGER = "5c0647fdd443bc2504c2d371" -} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/location/AirDropLootItem.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/location/AirDropLootItem.d.ts new file mode 100644 index 0000000..da791ff --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/location/AirDropLootItem.d.ts @@ -0,0 +1,6 @@ +export declare class AirDropLootItem { + id: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/logging/LogBackgroundColor.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/logging/LogBackgroundColor.d.ts index 87e08a9..1dd369b 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/logging/LogBackgroundColor.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/logging/LogBackgroundColor.d.ts @@ -1,11 +1,11 @@ export declare enum LogBackgroundColor { - default = "", - black = "blackBG", - red = "redBG", - green = "greenBG", - yellow = "yellowBG", - blue = "blueBG", - magenta = "magentaBG", - cyan = "cyanBG", - white = "whiteBG" + DEFAULT = "", + BLACK = "blackBG", + RED = "redBG", + GREEN = "greenBG", + YELLOW = "yellowBG", + BLUE = "blueBG", + MAGENTA = "magentaBG", + CYAN = "cyanBG", + WHITE = "whiteBG" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/logging/LogTextColor.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/logging/LogTextColor.d.ts index 7147ae3..6c7abf3 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/logging/LogTextColor.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/logging/LogTextColor.d.ts @@ -1,11 +1,11 @@ export declare enum LogTextColor { - black = "black", - red = "red", - green = "green", - yellow = "yellow", - blue = "blue", - magenta = "magenta", - cyan = "cyan", - white = "white", - gray = "" + BLACK = "black", + RED = "red", + GREEN = "green", + YELLOW = "yellow", + BLUE = "blue", + MAGENTA = "magenta", + CYAN = "cyan", + WHITE = "white", + GRAY = "" } diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/server/ILocaleBase.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/server/ILocaleBase.d.ts index 8887c06..6e20b89 100644 --- a/Faupi-MunitionsExpert/server/dist/types/models/spt/server/ILocaleBase.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/server/ILocaleBase.d.ts @@ -13,10 +13,10 @@ export interface ILocaleGlobalBase { season: Record; customization: Record; repeatableQuest: Record; - templates: ILocaleTemplateBase; - locations: ILocaleLocationsBase; - banners: ILocaleBannersBase; - trading: ILocaleTradingBase; + templates: Record; + locations: Record; + banners: Record; + trading: Record; } export interface ILocaleQuest { name: string; @@ -31,23 +31,11 @@ export interface ILocaleQuest { export interface ILocalePreset { Name: string; } -export interface ILocaleTemplateBase { - templates: Record; -} -export interface ILocaleLocationsBase { - locations: Record; -} -export interface ILocaleBannersBase { - locations: Record; -} export interface ILocaleProps { Name: string; ShortName: string; Description: string; } -export interface ILocaleTradingBase { - locations: Record; -} export interface ILocaleTradingProps { FullName: string; FirstName: string; diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/services/LootItem.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/services/LootItem.d.ts new file mode 100644 index 0000000..acb7606 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/services/LootItem.d.ts @@ -0,0 +1,6 @@ +export declare class LootItem { + id?: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/models/spt/services/LootRequest.d.ts b/Faupi-MunitionsExpert/server/dist/types/models/spt/services/LootRequest.d.ts new file mode 100644 index 0000000..1da8770 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/models/spt/services/LootRequest.d.ts @@ -0,0 +1,11 @@ +import { MinMax } from "../../common/MinMax"; +export declare class LootRequest { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/servers/DatabaseServer.d.ts b/Faupi-MunitionsExpert/server/dist/types/servers/DatabaseServer.d.ts index aa152d0..b3d29e9 100644 --- a/Faupi-MunitionsExpert/server/dist/types/servers/DatabaseServer.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/servers/DatabaseServer.d.ts @@ -2,5 +2,5 @@ import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; export declare class DatabaseServer { protected tableData: IDatabaseTables; getTables(): IDatabaseTables; - setTables(any: any): void; + setTables(tableData: IDatabaseTables): void; } diff --git a/Faupi-MunitionsExpert/server/dist/types/servers/RagfairServer.d.ts b/Faupi-MunitionsExpert/server/dist/types/servers/RagfairServer.d.ts index bc86cdb..c93864b 100644 --- a/Faupi-MunitionsExpert/server/dist/types/servers/RagfairServer.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/servers/RagfairServer.d.ts @@ -1,4 +1,6 @@ import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { TraderAssortHelper } from "../helpers/TraderAssortHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; @@ -12,11 +14,18 @@ export declare class RagfairServer { protected ragfairOfferService: RagfairOfferService; protected ragfairCategoriesService: RagfairCategoriesService; protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected traderHelper: TraderHelper; + protected traderAssortHelper: TraderAssortHelper; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; - constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, configServer: ConfigServer); + constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, traderHelper: TraderHelper, traderAssortHelper: TraderAssortHelper, configServer: ConfigServer); load(): void; update(): void; + /** + * Get traders who need to be periodically refreshed + * @returns string array of traders + */ + protected getUpdateableTraders(): string[]; getAllCategories(): Record; getBespokeCategories(offers: IRagfairOffer[]): Record; /** diff --git a/Faupi-MunitionsExpert/server/dist/types/services/BotEquipmentFilterService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/BotEquipmentFilterService.d.ts index e49645b..632f961 100644 --- a/Faupi-MunitionsExpert/server/dist/types/services/BotEquipmentFilterService.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/services/BotEquipmentFilterService.d.ts @@ -1,12 +1,12 @@ import { IBotType } from "../models/eft/common/tables/IBotType"; -import { Equipment, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; +import { EquipmentFilters, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; export declare class BotEquipmentFilterService { protected logger: ILogger; protected configServer: ConfigServer; protected botConfig: IBotConfig; - protected botEquipmentFilterlists: Record; + protected botEquipmentFilterlists: Record; constructor(logger: ILogger, configServer: ConfigServer); /** * Filter a bots data to exclude equipment and cartridges defines in the botConfig @@ -22,7 +22,7 @@ export declare class BotEquipmentFilterService { * @param playerLevel Level of the player * @returns EquipmentBlacklistDetails object */ - protected getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; + getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; /** * Get the whitelist for a specific bot type that's within the players level * @param botRole Bot type diff --git a/Faupi-MunitionsExpert/server/dist/types/services/BotGenerationCacheService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..670c583 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,52 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected botHelper: BotHelper; + protected storedBots: IBotBase[]; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore + */ + storeBots(botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param role role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(role: string): IBotBase[]; + /** + * Find a bot by its index from cache + * @param indexOfBotToReturn index to find bot by + * @returns bot profile + */ + protected getBotFromCache(indexOfBotToReturn: number): IBotBase; + /** + * Remove bot profile by index from cache + * @param indexOfBotToReturn Index of bot profile to remove + */ + protected removeBotFromCache(indexOfBotToReturn: number): void; + /** + * Get index of bot profile that matches criteria + * @param role role of bot we want + * @param getPmc is requested bot a pmc + * @returns index of found bot + */ + protected getIndexOfBotToReturn(role: string, getPmc: boolean): number; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have bots + * @returns true if empty + */ + cacheIsEmpty(): boolean; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/services/BotLootCacheService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/BotLootCacheService.d.ts index cc71eee..00ffb9c 100644 --- a/Faupi-MunitionsExpert/server/dist/types/services/BotLootCacheService.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/services/BotLootCacheService.d.ts @@ -34,6 +34,17 @@ export declare class BotLootCacheService { * @param isPmc Is the bot a PMC (alteres what loot is cached) */ protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; /** * Ammo/grenades have this property * @param props diff --git a/Faupi-MunitionsExpert/server/dist/types/services/FenceService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/FenceService.d.ts index 79058c6..23fbf52 100644 --- a/Faupi-MunitionsExpert/server/dist/types/services/FenceService.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/services/FenceService.d.ts @@ -11,29 +11,109 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { ItemFilterService } from "./ItemFilterService"; +/** + * Handle actions surrounding Fence + * e.g. generating or refreshing assorts / get next refresh time + */ export declare class FenceService { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; protected randomUtil: RandomUtil; protected databaseServer: DatabaseServer; protected handbookHelper: HandbookHelper; protected itemHelper: ItemHelper; protected presetHelper: PresetHelper; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected fenceAssort: ITraderAssort; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, configServer: ConfigServer); + protected nextMiniRefreshTimestamp: number; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, itemFilterService: ItemFilterService, configServer: ConfigServer); protected setFenceAssort(fenceAssort: ITraderAssort): void; - getFenceAssorts(): ITraderAssort; - hasExpiredCache(refreshAssort: boolean): boolean; - generateFenceAssortCache(pmcData: IPmcData): void; /** - * Get the fence level the passed in profile has + * Get assorts player can purchase + * Adjust prices based on fence level of player + * @param pmcProfile Player profile + * @returns ITraderAssort + */ + getFenceAssorts(pmcProfile: IPmcData): ITraderAssort; + /** + * Get fence assorts with no price adjustments based on fence rep + * @returns ITraderAssort + */ + getRawFenceAssorts(): ITraderAssort; + /** + * Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json + * @returns true if it needs a partial refresh + */ + needsPartialRefresh(): boolean; + /** + * Replace a percentage of fence assorts with freshly generated items + */ + performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; + /** + * Choose an item (not mod) at random and remove from assorts + */ + protected removeRandomItemFromAssorts(): void; + /** + * Get an integer rounded count of items to replace based on percentrage from traderConfig value + * @param totalItemCount total item count + * @returns rounded int of items to replace + */ + protected getCountOfItemsToReplace(totalItemCount: number): number; + /** + * Get the count of items fence offers + * @returns number + */ + getOfferCount(): number; + /** + * Create a trader assort for fence + */ + generateFenceAssortCache(): void; + /** + * Create skeleton to hold assort items + * @returns ITraderAssort object + */ + protected createBaseTraderAssortItem(): ITraderAssort; + /** + * Hydrate result parameter object with generated assorts + * @param assortCount Number of assorts to generate + * @param assorts object to add assorts to + */ + protected createAssorts(assortCount: number, assorts: ITraderAssort): void; + /** + * Get the next update timestamp for fence + * @returns future timestamp + */ + getNextFenceUpdateTimestamp(): number; + /** + * Get fence refresh time in seconds + */ + protected getFenceRefreshTime(): number; + /** + * Get fence level the passed in profile has * @param pmcData Player profile - * @returns FenceLevel + * @returns FenceLevel object */ getFenceInfo(pmcData: IPmcData): FenceLevel; + /** + * Remove an assort from fence by id + * @param assortIdToRemove assort id to remove from fence assorts + */ removeFenceOffer(assortIdToRemove: string): void; - updateFenceOffers(pmcData: IPmcData): void; } diff --git a/Faupi-MunitionsExpert/server/dist/types/services/InsuranceService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/InsuranceService.d.ts index 171bf10..6be8a2f 100644 --- a/Faupi-MunitionsExpert/server/dist/types/services/InsuranceService.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/services/InsuranceService.d.ts @@ -2,6 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper"; import { SecureContainerHelper } from "../helpers/SecureContainerHelper"; import { TraderHelper } from "../helpers/TraderHelper"; import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; import { Item } from "../models/eft/common/tables/IItem"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; @@ -44,8 +45,22 @@ export declare class InsuranceService { * @param mapId Id of the map player died/exited that caused the insurance to be issued on */ sendInsuredItems(pmcData: IPmcData, sessionID: string, mapId: string): void; + /** + * Store lost gear post-raid inside profile + * @param pmcData player profile to store gear in + * @param offraidData post-raid request object + * @param preRaidGear gear player wore prior to raid + * @param sessionID Session id + */ storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; - protected addGearToSend(pmcData: IPmcData, insuredItem: any, actualItem: any, sessionID: string): any; + /** + * Add gear item to InsuredItems array in player profile + * @param pmcData profile to store item in + * @param insuredItem Item to store in profile + * @param actualItem item to store + * @param sessionID Session id + */ + protected addGearToSend(pmcData: IPmcData, insuredItem: InsuredItem, actualItem: Item, sessionID: string): void; getPremium(pmcData: IPmcData, inventoryItem: Item, traderId: string): number; } diff --git a/Faupi-MunitionsExpert/server/dist/types/services/ItemFilterService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/ItemFilterService.d.ts new file mode 100644 index 0000000..c9c8ef3 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/services/ItemFilterService.d.ts @@ -0,0 +1,24 @@ +import { IItemConfig } from "../models/spt/config/IItemConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** Centralise the handling of blacklisting items, uses blacklist found in config/item.json */ +export declare class ItemFilterService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected blacklist: string[]; + protected itemConfig: IItemConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Check if the provided template id is blacklisted in config/item.json + * @param tpl template id + * @returns true if blacklisted + */ + isItemBlacklisted(tpl: string): boolean; + /** + * Return every template id blacklisted in config/item.json + * @returns string array of blacklisted tempalte ids + */ + getBlacklistedItems(): string[]; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/services/PmcAiService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/PmcAiService.d.ts new file mode 100644 index 0000000..0690f1f --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/services/PmcAiService.d.ts @@ -0,0 +1,27 @@ +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +/** Storing/retreving pmcRoles set at the start of a raid - its done at that point as we know what location the player is heading to */ +export declare class PmcAiService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected usecRole: string; + protected bearRole: string; + constructor(logger: ILogger, configServer: ConfigServer); + /** + * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) + * @param pmcSide eft side (usec/bear) + * @returns pmc side as defined in config + */ + getPmcRole(pmcSide: "usec" | "bear" | string): string; + /** + * Set the roles for pmcs + * @param location map location to look up and use as pmc types + */ + setPmcRolesByLocation(location: string): void; + /** + * Clear the saved role from usec/bear PMCs + */ + clearPmcRoles(): void; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/services/ProfileFixerService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/ProfileFixerService.d.ts index ed1dec7..9cb5a38 100644 --- a/Faupi-MunitionsExpert/server/dist/types/services/ProfileFixerService.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/services/ProfileFixerService.d.ts @@ -45,6 +45,11 @@ export declare class ProfileFixerService { * @param pmcProfile Profile to find and remove slots from */ protected removeResourcesFromSlotsInHideoutWithoutLocationIndexValue(pmcProfile: IPmcData): void; + /** + * Hideout slots need to be in a specific order, locationIndex in ascending order + * @param pmcProfile profile to edit + */ + protected reorderHideoutAreasWithResouceInputs(pmcProfile: IPmcData): void; /** * add in objects equal to the number of slots * @param areaType area to check diff --git a/Faupi-MunitionsExpert/server/dist/types/services/ProfileSnapshotService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/ProfileSnapshotService.d.ts new file mode 100644 index 0000000..445ffd0 --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/services/ProfileSnapshotService.d.ts @@ -0,0 +1,30 @@ +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class ProfileSnapshotService { + protected jsonUtil: JsonUtil; + protected storedProfileSnapshots: Record; + constructor(jsonUtil: JsonUtil); + /** + * Store a profile into an in-memory object + * @param sessionID session id - acts as the key + * @param profile - profile to save + */ + storeProfileSnapshot(sessionID: string, profile: IAkiProfile): void; + /** + * Retreve a stored profile + * @param sessionID key + * @returns A player profile object + */ + getProfileSnapshot(sessionID: string): IAkiProfile; + /** + * Does a profile exists against the provided key + * @param sessionID key + * @returns true if exists + */ + hasProfileSnapshot(sessionID: string): boolean; + /** + * Remove a stored profile by key + * @param sessionID key + */ + clearProfileSnapshot(sessionID: string): void; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/services/RagfairOfferService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/RagfairOfferService.d.ts index 7398a8f..f9e3a34 100644 --- a/Faupi-MunitionsExpert/server/dist/types/services/RagfairOfferService.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/services/RagfairOfferService.d.ts @@ -24,7 +24,6 @@ export declare class RagfairOfferService { protected httpResponse: HttpResponseUtil; protected configServer: ConfigServer; protected playerOffersLoaded: boolean; - protected toUpdate: Record; protected expiredOffers: Item[]; protected offers: IRagfairOffer[]; protected ragfairConfig: IRagfairConfig; @@ -38,8 +37,6 @@ export declare class RagfairOfferService { getOffersOfType(templateId: string): IRagfairOffer[]; addOffer(offer: IRagfairOffer): void; addOfferToExpired(staleOffer: IRagfairOffer): void; - setTraderUpdateStatus(traderId: string, shouldUpdate: boolean): void; - shouldTraderBeUpdated(traderID: string): boolean; getExpiredOfferCount(): number; /** * Get an array of expired items not yet processed into new offers @@ -53,12 +50,15 @@ export declare class RagfairOfferService { * @returns offer exists - true */ doesOfferExist(offerId: string): boolean; - getTraders(): Record; - flagTraderForUpdate(expiredOfferUserId: string): void; removeOfferById(offerId: string): void; removeOfferStack(offerID: string, amount: number): void; removeAllOffersByTrader(traderId: string): void; - addTradersToUpdateList(): void; + /** + * Do the trader offers on flea need to be refreshed + * @param traderID Trader to check + * @returns true if they do + */ + traderOffersNeedRefreshing(traderID: string): boolean; addPlayerOffers(): void; expireStaleOffers(): void; /** diff --git a/Faupi-MunitionsExpert/server/dist/types/services/RagfairPriceService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/RagfairPriceService.d.ts index 679fe1d..466c9e3 100644 --- a/Faupi-MunitionsExpert/server/dist/types/services/RagfairPriceService.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/services/RagfairPriceService.d.ts @@ -27,6 +27,20 @@ export declare class RagfairPriceService { getDynamicPrice(itemTpl: string): number; getAllFleaPrices(): Record; getFleaPriceForItem(tplId: string): number; + /** + * Check to see if an items price is below its handbook price and adjust accoring to values set to config/ragfair.json + * @param itemPrice price of item + * @param itemTpl item template Id being checked + * @returns adjusted price value in roubles + */ + protected adjustPriceIfBelowHandbook(itemPrice: number, itemTpl: string): number; + /** + * Get the percentage difference between two values + * @param a numerical value a + * @param b numerical value b + * @returns different in percent + */ + protected getPriceDifference(a: number, b: number): number; getStaticPriceForItem(tplId: string): number; getBarterPrice(barterScheme: IBarterScheme[]): number; getDynamicOfferPrice(items: Item[], desiredCurrency: string): number; diff --git a/Faupi-MunitionsExpert/server/dist/types/services/RepairService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/RepairService.d.ts new file mode 100644 index 0000000..3e6077c --- /dev/null +++ b/Faupi-MunitionsExpert/server/dist/types/services/RepairService.d.ts @@ -0,0 +1,75 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected itemEventRouter: ItemEventRouter; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + repairConfig: IRepairConfig; + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + * @param output IItemEventRouterResponse + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData, output: IItemEventRouterResponse): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; +} diff --git a/Faupi-MunitionsExpert/server/dist/types/services/TraderAssortService.d.ts b/Faupi-MunitionsExpert/server/dist/types/services/TraderAssortService.d.ts index 5ba2d05..03b4e12 100644 --- a/Faupi-MunitionsExpert/server/dist/types/services/TraderAssortService.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/services/TraderAssortService.d.ts @@ -2,5 +2,10 @@ import { ITraderAssort } from "../models/eft/common/tables/ITrader"; export declare class TraderAssortService { protected pristineTraderAssorts: Record; getPristineTraderAssort(traderId: string): ITraderAssort; + /** + * Store trader assorts inside a class property + * @param traderId Traderid to store assorts against + * @param assort Assorts to store + */ setPristineTraderAssort(traderId: string, assort: ITraderAssort): void; } diff --git a/Faupi-MunitionsExpert/server/dist/types/utils/HashUtil.d.ts b/Faupi-MunitionsExpert/server/dist/types/utils/HashUtil.d.ts index bacbf2a..a8500e1 100644 --- a/Faupi-MunitionsExpert/server/dist/types/utils/HashUtil.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/utils/HashUtil.d.ts @@ -4,8 +4,18 @@ import { TimeUtil } from "./TimeUtil"; export declare class HashUtil { protected timeUtil: TimeUtil; constructor(timeUtil: TimeUtil); + /** + * Create a 24 character id using the sha256 algorithm + current timestamp + * @returns 24 character hash + */ generate(): string; generateMd5ForData(data: string): string; generateSha1ForData(data: string): string; + /** + * Create a hash for the data parameter + * @param algorithm algorithm to use to hash + * @param data data to be hashed + * @returns hash value + */ generateHashForData(algorithm: string, data: crypto.BinaryLike): string; } diff --git a/Faupi-MunitionsExpert/server/dist/types/utils/RandomUtil.d.ts b/Faupi-MunitionsExpert/server/dist/types/utils/RandomUtil.d.ts index c24dd60..633e472 100644 --- a/Faupi-MunitionsExpert/server/dist/types/utils/RandomUtil.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/utils/RandomUtil.d.ts @@ -136,7 +136,7 @@ export declare class RandomUtil { * Drawing can be with or without replacement * @param {array} list The array we want to draw randomly from * @param {integer} count The number of times we want to draw - * @param {boolean} replacement Draw with ot without replacement from the input array + * @param {boolean} replacement Draw with or without replacement from the input array * @return {array} Array consisting of N random elements */ drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; @@ -150,4 +150,10 @@ export declare class RandomUtil { */ drawRandomFromDict(dict: any, count?: number, replacement?: boolean): any[]; getBiasedRandomNumber(min: number, max: number, shift: number, n: number): number; + /** + * Fisher-Yates shuffle an array + * @param array Array to shuffle + * @returns Shuffled array + */ + shuffle(array: Array): Array; } diff --git a/Faupi-MunitionsExpert/server/dist/types/utils/TimeUtil.d.ts b/Faupi-MunitionsExpert/server/dist/types/utils/TimeUtil.d.ts index eed4e6d..1367e26 100644 --- a/Faupi-MunitionsExpert/server/dist/types/utils/TimeUtil.d.ts +++ b/Faupi-MunitionsExpert/server/dist/types/utils/TimeUtil.d.ts @@ -1,9 +1,16 @@ +/** + * Utility class to handle time related problems + */ export declare class TimeUtil { static readonly oneHourAsSeconds = 3600; formatTime(date: Date): string; formatDate(date: Date): string; getDate(): string; getTime(): string; + /** + * Get timestamp in seconds + * @returns + */ getTimestamp(): number; /** * mail in eft requires time be in a specific format @@ -15,4 +22,10 @@ export declare class TimeUtil { * @returns current date in format: 00.00.0000 (dd.mm.yyyy) */ getDateMailFormat(): string; + /** + * Convert hours into seconds + * @param hours hours to convert to seconds + * @returns number + */ + getHoursAsSeconds(hours: number): number; } diff --git a/Faupi-MunitionsExpert/server/package.json b/Faupi-MunitionsExpert/server/package.json index 80566a2..977a01d 100644 --- a/Faupi-MunitionsExpert/server/package.json +++ b/Faupi-MunitionsExpert/server/package.json @@ -1,10 +1,10 @@ { "name": "MunitionsExpert", "author": "Faupi", - "version": "1.6.3", + "version": "1.6.4", "license": "NCSA Open Source", "main": "./src/MunitionsExpert.js", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "updatedBy": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/Faupi-MunitionsExpert/server/src/MunitionsExpert.ts b/Faupi-MunitionsExpert/server/src/MunitionsExpert.ts index c90c240..cb25940 100644 --- a/Faupi-MunitionsExpert/server/src/MunitionsExpert.ts +++ b/Faupi-MunitionsExpert/server/src/MunitionsExpert.ts @@ -69,7 +69,7 @@ class MunitionsExpert implements IPreAkiLoadMod, IPostAkiLoadMod url: "/MunitionsExpert/GetInfo", action: (url, info, sessionId, output) => { - return this.json.serialize(this.path.resolve(this.modLoader.getModPath("Faupi-MunitionsExpert 1.6.0"))); + return this.json.serialize(this.path.resolve(this.modLoader.getModPath("Faupi-MunitionsExpert 1.6.4"))); } } ], diff --git a/Faupi-MunitionsExpert/server/types/Utils.d.ts b/Faupi-MunitionsExpert/server/types/Utils.d.ts deleted file mode 100644 index e69de29..0000000 diff --git a/Faupi-MunitionsExpert/server/types/callbacks/InsuranceCallbacks.d.ts b/Faupi-MunitionsExpert/server/types/callbacks/InsuranceCallbacks.d.ts index 6819960..8835ba2 100644 --- a/Faupi-MunitionsExpert/server/types/callbacks/InsuranceCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/types/callbacks/InsuranceCallbacks.d.ts @@ -1,5 +1,5 @@ import { InsuranceController } from "../controllers/InsuranceController"; -import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate"; +import { OnUpdate } from "../di/OnUpdate"; import { IPmcData } from "../models/eft/common/IPmcData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData"; @@ -10,14 +10,13 @@ import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { InsuranceService } from "../services/InsuranceService"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; -export declare class InsuranceCallbacks extends OnLoadOnUpdate { +export declare class InsuranceCallbacks extends OnUpdate { protected insuranceController: InsuranceController; protected insuranceService: InsuranceService; protected httpResponse: HttpResponseUtil; protected configServer: ConfigServer; protected insuranceConfig: IInsuranceConfig; constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer); - onLoad(): void; getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData; insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; onUpdate(secondsSinceLastRun: number): boolean; diff --git a/Faupi-MunitionsExpert/server/types/callbacks/LocationCallbacks.d.ts b/Faupi-MunitionsExpert/server/types/callbacks/LocationCallbacks.d.ts index cc69369..6e0b538 100644 --- a/Faupi-MunitionsExpert/server/types/callbacks/LocationCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/types/callbacks/LocationCallbacks.d.ts @@ -11,4 +11,5 @@ export declare class LocationCallbacks { constructor(httpResponse: HttpResponseUtil, locationController: LocationController); getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; + getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string; } diff --git a/Faupi-MunitionsExpert/server/types/callbacks/ProfileCallbacks.d.ts b/Faupi-MunitionsExpert/server/types/callbacks/ProfileCallbacks.d.ts index 6a86fc0..183bb0a 100644 --- a/Faupi-MunitionsExpert/server/types/callbacks/ProfileCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/types/callbacks/ProfileCallbacks.d.ts @@ -1,5 +1,6 @@ import { ProfileController } from "../controllers/ProfileController"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData"; @@ -12,20 +13,51 @@ import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendRespon import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { TimeUtil } from "../utils/TimeUtil"; +/** Handle profile related client events */ export declare class ProfileCallbacks { protected httpResponse: HttpResponseUtil; protected timeUtil: TimeUtil; protected profileController: ProfileController; constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController); createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; - getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Get the complete player profile (scav + pmc character) + * @param url + * @param info Empty + * @param sessionID Session id + * @returns Profile object + */ + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle the creation of a scav profile for player + * Occurs post-raid and when profile first created immediately after character details are confirmed by player + * @param url + * @param info empty + * @param sessionID Session id + * @returns Profile object + */ + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/voice/change event + * @param url + * @param info Change voice request object + * @param sessionID Session id + * @returns Client response + */ changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/profile/nickname/change event + * Client allows player to adjust their profile name + * @param url + * @param info Change nickname request object + * @param sessionID Session id + * @returns client response + */ changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; /** - * Called when creating a character, when you choose a character face/voice + * Called when creating a character when choosing a character face/voice * @param url * @param info response (empty) * @param sessionID diff --git a/Faupi-MunitionsExpert/server/types/callbacks/RagfairCallbacks.d.ts b/Faupi-MunitionsExpert/server/types/callbacks/RagfairCallbacks.d.ts index 3a405c9..c609f2f 100644 --- a/Faupi-MunitionsExpert/server/types/callbacks/RagfairCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/types/callbacks/RagfairCallbacks.d.ts @@ -19,6 +19,9 @@ import { ConfigServer } from "../servers/ConfigServer"; import { RagfairServer } from "../servers/RagfairServer"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { JsonUtil } from "../utils/JsonUtil"; +/** + * Handle ragfair related callback events + */ export declare class RagfairCallbacks extends OnLoadOnUpdate { protected httpResponse: HttpResponseUtil; protected logger: ILogger; diff --git a/Faupi-MunitionsExpert/server/types/callbacks/RepairCallbacks.d.ts b/Faupi-MunitionsExpert/server/types/callbacks/RepairCallbacks.d.ts index 63733fa..14edeeb 100644 --- a/Faupi-MunitionsExpert/server/types/callbacks/RepairCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/types/callbacks/RepairCallbacks.d.ts @@ -6,6 +6,20 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa export declare class RepairCallbacks { protected repairController: RepairController; constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; } diff --git a/Faupi-MunitionsExpert/server/types/callbacks/TraderCallbacks.d.ts b/Faupi-MunitionsExpert/server/types/callbacks/TraderCallbacks.d.ts index 128d9b2..e4fd099 100644 --- a/Faupi-MunitionsExpert/server/types/callbacks/TraderCallbacks.d.ts +++ b/Faupi-MunitionsExpert/server/types/callbacks/TraderCallbacks.d.ts @@ -9,10 +9,10 @@ export declare class TraderCallbacks extends OnLoadOnUpdate { protected traderController: TraderController; constructor(httpResponse: HttpResponseUtil, traderController: TraderController); onLoad(): void; + onUpdate(): boolean; getRoute(): string; getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - onUpdate(): boolean; } diff --git a/Faupi-MunitionsExpert/server/types/context/ContextVariable.d.ts b/Faupi-MunitionsExpert/server/types/context/ContextVariable.d.ts index e438947..0fe0a63 100644 --- a/Faupi-MunitionsExpert/server/types/context/ContextVariable.d.ts +++ b/Faupi-MunitionsExpert/server/types/context/ContextVariable.d.ts @@ -4,7 +4,7 @@ export declare class ContextVariable { private timestamp; private type; constructor(value: any, type: ContextVariableType); - getValue(): any; + getValue(): T; getTimestamp(): Date; getType(): ContextVariableType; } diff --git a/Faupi-MunitionsExpert/server/types/controllers/BotController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/BotController.d.ts index 5e6f05d..a5111d5 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/BotController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/BotController.d.ts @@ -1,3 +1,4 @@ +import { ApplicationContext } from "../context/ApplicationContext"; import { BotGenerator } from "../generators/BotGenerator"; import { BotHelper } from "../helpers/BotHelper"; import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; @@ -5,15 +6,22 @@ import { IBotBase } from "../models/eft/common/tables/IBotBase"; import { IBotCore } from "../models/eft/common/tables/IBotCore"; import { Difficulty } from "../models/eft/common/tables/IBotType"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { PmcAiService } from "../services/PmcAiService"; export declare class BotController { + protected logger: ILogger; protected databaseServer: DatabaseServer; protected botGenerator: BotGenerator; protected botHelper: BotHelper; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; protected botConfig: IBotConfig; - constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); /** * Return the number of bot loadout varieties to be generated * @param type bot Type we want the loadout gen count for @@ -29,7 +37,18 @@ export declare class BotController { * @returns Difficulty object */ getBotDifficulty(type: string, difficulty: string): Difficulty; - protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty; + protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ getBotCap(): number; } diff --git a/Faupi-MunitionsExpert/server/types/controllers/GameController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/GameController.d.ts index 85ec418..2d00898 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/GameController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/GameController.d.ts @@ -7,11 +7,13 @@ import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { IHttpConfig } from "../models/spt/config/IHttpConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { LocaleService } from "../services/LocaleService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { Watermark } from "../utils/Watermark"; export declare class GameController { protected logger: ILogger; + protected databaseServer: DatabaseServer; protected watermark: Watermark; protected httpServerHelper: HttpServerHelper; protected localeService: LocaleService; @@ -20,9 +22,14 @@ export declare class GameController { protected configServer: ConfigServer; protected httpConfig: IHttpConfig; protected coreConfig: ICoreConfig; - constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; protected logProfileDetails(fullProfile: IAkiProfile): void; getGameConfig(sessionID: string): IGameConfigResponse; getServer(): any[]; + getValidGameVersion(): any; } diff --git a/Faupi-MunitionsExpert/server/types/controllers/HideoutController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/HideoutController.d.ts index 3eefe1a..dcd8894 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/HideoutController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/HideoutController.d.ts @@ -28,6 +28,7 @@ import { HashUtil } from "../utils/HashUtil"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; +import { JsonUtil } from "../utils/JsonUtil"; export declare class HideoutController { protected logger: ILogger; protected hashUtil: HashUtil; @@ -45,9 +46,10 @@ export declare class HideoutController { protected hideoutHelper: HideoutHelper; protected scavCaseRewardGenerator: ScavCaseRewardGenerator; protected configServer: ConfigServer; + protected jsonUtil: JsonUtil; protected static nameBackendCountersCrafting: string; protected hideoutConfig: IHideoutConfig; - constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer, jsonUtil: JsonUtil); upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; /** diff --git a/Faupi-MunitionsExpert/server/types/controllers/InraidController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/InraidController.d.ts index b899e7d..102a2fb 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/InraidController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/InraidController.d.ts @@ -5,9 +5,11 @@ import { ItemHelper } from "../helpers/ItemHelper"; import { ProfileHelper } from "../helpers/ProfileHelper"; import { QuestHelper } from "../helpers/QuestHelper"; import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; @@ -15,6 +17,7 @@ import { InsuranceService } from "../services/InsuranceService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class InraidController { + protected logger: ILogger; protected saveServer: SaveServer; protected jsonUtil: JsonUtil; protected timeUtil: TimeUtil; @@ -29,16 +32,40 @@ export declare class InraidController { protected inRaidHelper: InRaidHelper; protected configServer: ConfigServer; protected inraidConfig: IInRaidConfig; - constructor(saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer); + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer); addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void; saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Handle updating the profile post-pmc raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePmcProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Reduce body part hp to % of max + * @param pmcData profile to edit + * @param multipler multipler to apply to max health + */ + protected reducePmcHealthToPercent(pmcData: IPmcData, multipler: number): void; + /** + * Handle updating the profile post-pscav raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Is the player dead after a raid - dead is anything other than "survived" / "runner" + * @param statusOnExit exit value from offraidData object + * @returns true if dead + */ + protected isPlayerDead(statusOnExit: string): boolean; /** * Mark inventory items as FiR if player survived raid, otherwise remove FiR from them * @param offraidData Save Progress Request * @param pmcData player profile * @param isPlayerScav Was the player a pScav */ - private markOrRemoveFoundInRaidItems; - private handlePostRaidPlayerScavProcess; - private handlePostRaidPlayerScavKarmaChanges; + protected markOrRemoveFoundInRaidItems(offraidData: ISaveProgressRequestData, pmcData: IPmcData, isPlayerScav: boolean): void; + protected handlePostRaidPlayerScavProcess(scavData: IPmcData, sessionID: string, offraidData: ISaveProgressRequestData, pmcData: IPmcData, isDead: boolean): void; + protected handlePostRaidPlayerScavKarmaChanges(pmcData: IPmcData, offraidData: ISaveProgressRequestData, scavData: IPmcData, sessionID: string): void; } diff --git a/Faupi-MunitionsExpert/server/types/controllers/InventoryController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/InventoryController.d.ts index f57f731..f564919 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/InventoryController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/InventoryController.d.ts @@ -92,7 +92,11 @@ export declare class InventoryController { */ toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse; /** - * Handles Tagging of items (primary Containers). + * Add a tag to an inventory item + * @param pmcData profile with item to add tag to + * @param body tag request data + * @param sessionID session id + * @returns client response object */ tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; diff --git a/Faupi-MunitionsExpert/server/types/controllers/LocationController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/LocationController.d.ts index 90b6d7a..9db3205 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/LocationController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/LocationController.d.ts @@ -1,18 +1,33 @@ import { LocationGenerator } from "../generators/LocationGenerator"; +import { LootGenerator } from "../generators/LootGenerator"; import { ILocationBase } from "../models/eft/common/ILocationBase"; import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { LootItem } from "../models/spt/services/LootItem"; import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class LocationController { protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; protected logger: ILogger; protected locationGenerator: LocationGenerator; + protected lootGenerator: LootGenerator; protected databaseServer: DatabaseServer; protected timeUtil: TimeUtil; - constructor(jsonUtil: JsonUtil, logger: ILogger, locationGenerator: LocationGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil); + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger, locationGenerator: LocationGenerator, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer); get(location: string): ILocationBase; generate(name: string): ILocationBase; generateAll(): ILocationsGenerateAllResponse; + /** + * Get loot for an airdop container + * Generates it randomly based on config/airdrop.json values + * @returns Array of LootItem + */ + getAirdropLoot(): LootItem[]; } diff --git a/Faupi-MunitionsExpert/server/types/controllers/MatchController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/MatchController.d.ts index 71cb7d3..07f6a89 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/MatchController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/MatchController.d.ts @@ -9,23 +9,33 @@ import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestDa import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; import { IMatchConfig } from "../models/spt/config/IMatchConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; import { BotLootCacheService } from "../services/BotLootCacheService"; import { MatchLocationService } from "../services/MatchLocationService"; +import { PmcAiService } from "../services/PmcAiService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; export declare class MatchController { + protected logger: ILogger; protected saveServer: SaveServer; protected profileHelper: ProfileHelper; protected matchLocationService: MatchLocationService; protected traderHelper: TraderHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; + protected profileSnapshotService: ProfileSnapshotService; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected applicationContext: ApplicationContext; protected matchConfig: IMatchConfig; protected inraidConfig: IInRaidConfig; - constructor(saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); + protected botConfig: IBotConfig; + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); getEnabled(): boolean; getProfile(info: IGetProfileRequestData): IPmcData[]; createGroup(sessionID: string, info: ICreateGroupRequestData): any; diff --git a/Faupi-MunitionsExpert/server/types/controllers/QuestController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/QuestController.d.ts index 2cbccfb..282f50e 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/QuestController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/QuestController.d.ts @@ -39,16 +39,31 @@ export declare class QuestController { * @returns array of IQuest */ getClientQuests(sessionID: string): IQuest[]; + /** + * Is the quest for the opposite side the player is on + * @param side player side (usec/bear) + * @param questId questId to check + */ + protected questIsForOtherSide(side: string, questId: string): boolean; + /** + * Handle the client accepting a quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update + * @param acceptedQuest Quest accepted + * @param sessionID Session id + * @returns client response + */ acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; /** - * Remove completed quest from profile + * Update completed quest in profile * Add newly unlocked quests to profile * Also recalculate thier level due to exp rewards * @param pmcData Player profile - * @param body completed quest request - * @param sessionID session id - * @returns ItemEvent response + * @param body Completed quest request + * @param sessionID Session id + * @returns ItemEvent client response */ completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; /** @@ -67,10 +82,20 @@ export declare class QuestController { protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]; /** * Fail the quests provided + * Update quest in profile, otherwise add fresh quest object with failed status * @param sessionID session id * @param pmcData player profile * @param questsToFail quests to fail */ protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void; handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment a backend counter stored value by an amount, + * Create counter if it does not exist + * @param pmcData Profile to find backend counter in + * @param conditionId backend counter id to update + * @param questId quest id counter is associated with + * @param counterValue value to increment the backend counter with + */ + protected updateProfileBackendCounterValue(pmcData: IPmcData, conditionId: string, questId: string, counterValue: number): void; } diff --git a/Faupi-MunitionsExpert/server/types/controllers/RagfairController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/RagfairController.d.ts index c4ffc15..06af740 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/RagfairController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/RagfairController.d.ts @@ -9,6 +9,7 @@ import { RagfairOfferHelper } from "../helpers/RagfairOfferHelper"; import { RagfairSellHelper } from "../helpers/RagfairSellHelper"; import { RagfairSortHelper } from "../helpers/RagfairSortHelper"; import { RagfairTaxHelper } from "../helpers/RagfairTaxHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; import { IPmcData } from "../models/eft/common/IPmcData"; import { Item } from "../models/eft/common/tables/IItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; @@ -33,6 +34,9 @@ import { RagfairPriceService } from "../services/RagfairPriceService"; import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; import { TimeUtil } from "../utils/TimeUtil"; +/** + * Handle RagfairCallback events + */ export declare class RagfairController { protected logger: ILogger; protected timeUtil: TimeUtil; @@ -52,14 +56,20 @@ export declare class RagfairController { protected handbookHelper: HandbookHelper; protected paymentHelper: PaymentHelper; protected inventoryHelper: InventoryHelper; + protected traderHelper: TraderHelper; protected ragfairHelper: RagfairHelper; protected ragfairOfferService: RagfairOfferService; protected ragfairRequiredItemsService: RagfairRequiredItemsService; protected ragfairOfferGenerator: RagfairOfferGenerator; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; - constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer); + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer); getOffers(sessionID: string, info: ISearchRequestData): IGetOffersResult; + /** + * Update a trader flea offer with buy restrictions stored in the traders assort + * @param offer flea offer to update + */ + protected setTraderOfferPurchaseLimits(offer: IRagfairOffer): void; protected isLinkedSearch(info: ISearchRequestData): boolean; protected isRequiredSearch(info: ISearchRequestData): boolean; update(): void; diff --git a/Faupi-MunitionsExpert/server/types/controllers/RepairController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/RepairController.d.ts index 0e78ef6..ae54a53 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/RepairController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/RepairController.d.ts @@ -8,9 +8,9 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa import { IRepairConfig } from "../models/spt/config/IRepairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; -import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; export declare class RepairController { protected logger: ILogger; protected itemEventRouter: ItemEventRouter; @@ -19,23 +19,23 @@ export declare class RepairController { protected traderHelper: TraderHelper; protected paymentService: PaymentService; protected repairHelper: RepairHelper; - protected configServer: ConfigServer; + protected repairService: RepairService; protected repairConfig: IRepairConfig; - constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); /** * Repair with trader - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; /** * Repair with repair kit - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; } diff --git a/Faupi-MunitionsExpert/server/types/controllers/RepeatableQuestController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/RepeatableQuestController.d.ts index 98d05dd..4c31a3d 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/RepeatableQuestController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/RepeatableQuestController.d.ts @@ -7,6 +7,7 @@ import { Exit } from "../models/eft/common/ILocationBase"; import { IPmcData } from "../models/eft/common/IPmcData"; import { TraderInfo } from "../models/eft/common/tables/IBotBase"; import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; import { ELocationName } from "../models/enums/ELocationName"; @@ -15,6 +16,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { PaymentService } from "../services/PaymentService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; @@ -64,9 +66,10 @@ export declare class RepeatableQuestController { protected itemEventRouter: ItemEventRouter; protected paymentService: PaymentService; protected objectId: ObjectId; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected questConfig: IQuestConfig; - constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, configServer: ConfigServer); + constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint * Returns an array of objects in the format of repeatable quests to the client. @@ -217,4 +220,16 @@ export declare class RepeatableQuestController { debugLogRepeatableQuestIds(pmcData: IPmcData): void; probabilityObjectArray(configArrayInput: ProbabilityObject[]): ProbabilityObjectArray; changeRepeatableQuest(pmcDataIn: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + /** + * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) + * @returns a list of rewardable items [[_tpl, itemTemplate],...] + */ + protected getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig): [string, ITemplateItem][]; + /** + * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward + * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. + * @param {*} tpl template id of item to check + * @returns boolean: true if item is valid reward + */ + isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean; } diff --git a/Faupi-MunitionsExpert/server/types/controllers/TraderController.d.ts b/Faupi-MunitionsExpert/server/types/controllers/TraderController.d.ts index 7bab158..b79f55e 100644 --- a/Faupi-MunitionsExpert/server/types/controllers/TraderController.d.ts +++ b/Faupi-MunitionsExpert/server/types/controllers/TraderController.d.ts @@ -4,6 +4,7 @@ import { TraderHelper } from "../helpers/TraderHelper"; import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; @@ -15,12 +16,29 @@ export declare class TraderController { protected traderHelper: TraderHelper; protected timeUtil: TimeUtil; protected traderAssortService: TraderAssortService; + protected fenceService: FenceService; protected jsonUtil: JsonUtil; - constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, jsonUtil: JsonUtil); + constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, fenceService: FenceService, jsonUtil: JsonUtil); + /** + * Runs when onLoad event is fired + * Iterate over traders, ensure an unmolested copy of their assorts is stored in traderAssortService + * Store timestamp of next assort refresh in nextResupply property of traders .base object + */ load(): void; - getTrader(traderID: string, sessionID: string): ITraderBase; + /** + * Runs when onUpdate is fired + * If current time is > nextResupply(expire) time of trader, refresh traders assorts and + * Fence is handled slightly differently + * @returns has run + */ + update(): boolean; + /** + * Return an array of all traders + * @param sessionID Session id + * @returns array if ITraderBase objects + */ getAllTraders(sessionID: string): ITraderBase[]; - updateTraders(): boolean; + getTrader(sessionID: string, traderID: string): ITraderBase; getAssort(sessionId: string, traderId: string): ITraderAssort; - getPurchasesData(traderID: string, sessionID: string): Record; + getPurchasesData(sessionID: string, traderID: string): Record; } diff --git a/Faupi-MunitionsExpert/server/types/di/Container.d.ts b/Faupi-MunitionsExpert/server/types/di/Container.d.ts index 17791b0..98d1fa1 100644 --- a/Faupi-MunitionsExpert/server/types/di/Container.d.ts +++ b/Faupi-MunitionsExpert/server/types/di/Container.d.ts @@ -1,4 +1,7 @@ import { DependencyContainer } from "tsyringe"; +/** + * Handle the registration of classes to be used by the Dependency Injection code + */ export declare class Container { static registerTypes(depContainer: DependencyContainer): void; static registerListTypes(depContainer: DependencyContainer): void; diff --git a/Faupi-MunitionsExpert/server/types/generators/BotGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/BotGenerator.d.ts index a5fc0ad..2ac51db 100644 --- a/Faupi-MunitionsExpert/server/types/generators/BotGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/BotGenerator.d.ts @@ -9,6 +9,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { PmcAiService } from "../services/PmcAiService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; @@ -30,9 +31,10 @@ export declare class BotGenerator { protected botEquipmentFilterService: BotEquipmentFilterService; protected botHelper: BotHelper; protected gameEventHelper: GameEventHelper; + protected pmcAiService: PmcAiService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, pmcAiService: PmcAiService, configServer: ConfigServer); /** * Generate a player scav bot object * @param role e.g. assault / pmcbot @@ -40,14 +42,14 @@ export declare class BotGenerator { * @param botTemplate base bot template to use (e.g. assault/pmcbot) * @returns */ - generatePlayerScav(role: string, difficulty: string, botTemplate: IBotType): IBotBase; - generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; /** - * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check - * @param botRole the bot role to check if should be a pmc - * @returns true if should be a pmc + * Generate an array of bot objects for populate a raid with + * @param sessionId session id + * @param info request object + * @returns bot array */ - protected shouldBotBePmc(botRole: string): boolean; + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; /** * Get a randomised PMC side based on bot config value 'isUsec' * @returns pmc side as string @@ -58,12 +60,30 @@ export declare class BotGenerator { * @returns IBotBase object */ protected getCloneOfBotBase(): IBotBase; - protected generateBot(bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param role botRole bot will use + * @param node Bot template from db/bots/x.json + * @param isPmc Is bot to be a PMC + * @param isPlayerScav is bot to be a p scav bot + * @returns IBotBase object + */ + protected generateBot(sessionId: string, bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; /** * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client */ protected logPmcGeneratedCount(output: IBotBase[]): void; - protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult; + /** + * Return a randomised bot level and exp value + * @param role botRole being generated for + * @param min Min exp value + * @param max Max exp value + * @returns IRandomisedBotLevelResult object + */ + protected generateRandomLevel(role: string, min: number, max: number): BotGenerator.IRandomisedBotLevelResult; /** * Converts health object to the required format * @param healthObj health object from bot json @@ -72,19 +92,23 @@ export declare class BotGenerator { */ protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; protected generateSkills(skillsObj: Skills): Skills; - /** - * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) - * @param pmcSide eft side (usec/bear) - * @returns pmc side as defined in config - */ - protected getPmcRole(pmcSide: string): string; /** * Iterate through bots inventory and loot to find and remove christmas items (as defined in GameEventHelper) * @param nodeInventory Bots inventory to iterate over */ protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ protected generateId(bot: IBotBase): IBotBase; protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ protected getPMCDifficulty(requestedDifficulty: string): string; /** * Add a side-specific (usec/bear) dogtag item to a bots inventory diff --git a/Faupi-MunitionsExpert/server/types/generators/BotInventoryGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/BotInventoryGenerator.d.ts index 35d1ee8..c5ed545 100644 --- a/Faupi-MunitionsExpert/server/types/generators/BotInventoryGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/BotInventoryGenerator.d.ts @@ -1,13 +1,16 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; -import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType"; +import { Chances, Generation, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; -import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; -import { BotWeaponGenerator } from "./BotWeaponGenerator"; import { BotLootGenerator } from "./BotLootGenerator"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; export declare class BotInventoryGenerator { protected logger: ILogger; protected hashUtil: HashUtil; @@ -17,8 +20,14 @@ export declare class BotInventoryGenerator { protected botLootGenerator: BotLootGenerator; protected botGeneratorHelper: BotGeneratorHelper; protected weightedRandomHelper: WeightedRandomHelper; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper); - generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer); + generateInventory(sessionId: string, templateInventory: Inventory, equipmentChances: Chances, itemGenerationLimitsMinMax: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation): void; protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void; protected generateInventoryBase(): PmcInventory; } diff --git a/Faupi-MunitionsExpert/server/types/generators/BotLootGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/BotLootGenerator.d.ts index c6a3f29..c1f5310 100644 --- a/Faupi-MunitionsExpert/server/types/generators/BotLootGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/BotLootGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { HandbookHelper } from "../helpers/HandbookHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; @@ -20,11 +21,12 @@ export declare class BotLootGenerator { protected handbookHelper: HandbookHelper; protected botGeneratorHelper: BotGeneratorHelper; protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botLootCacheService: BotLootCacheService, configServer: ConfigServer); - generateLoot(templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer); + generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; protected getRandomisedCount(min: number, max: number, nValue: number): number; /** * Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit is reached @@ -47,7 +49,7 @@ export declare class BotLootGenerator { * @param botRole bots role, .e.g. pmcBot * @param isPmc are we generating for a pmc */ - protected addLooseWeaponsToInventorySlot(botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean): void; + protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean): void; /** * Get a random item from the pool parameter using the biasedRandomNumber system * @param pool pool of items to pick an item from diff --git a/Faupi-MunitionsExpert/server/types/generators/BotWeaponGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/BotWeaponGenerator.d.ts index 9215214..487901b 100644 --- a/Faupi-MunitionsExpert/server/types/generators/BotWeaponGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/BotWeaponGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { MinMax } from "../models/common/MinMax"; @@ -14,6 +15,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; export declare class BotWeaponGenerator { protected jsonUtil: JsonUtil; protected logger: ILogger; @@ -24,11 +26,24 @@ export declare class BotWeaponGenerator { protected botGeneratorHelper: BotGeneratorHelper; protected randomUtil: RandomUtil; protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected inventoryMagGenComponents: IInventoryMagGen[]; protected readonly modMagazineSlotId = "mod_magazine"; protected botConfig: IBotConfig; - constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer); + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, inventoryMagGenComponents: IInventoryMagGen[]); /** - * Get a random weapon from a bots pool of weapons (weighted) + * Pick a random weapon based on weightings and generate a functional weapon + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId + * @param modChances + * @param botRole role of bot, e.g. assault/followerBully + * @param isPmc Is weapon generated for a pmc + * @returns GenerateWeaponResult object + */ + generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; + /** + * Get a random weighted weapon from a bots pool of weapons * @param equipmentSlot Primary/secondary/holster * @param botTemplateInventory e.g. assault.json * @returns weapon tpl @@ -39,43 +54,24 @@ export declare class BotWeaponGenerator { * @param weaponTpl weapon tpl to generate (use pickWeightedWeaponTplFromPool()) * @param equipmentSlot slot to fit into, primary/secondary/holster * @param botTemplateInventory e.g. assault.json - * @param weaponParentId - * @param modChances - * @param botRole + * @param weaponParentId ParentId of the weapon being generated + * @param modChances Dictionary of item types and % chance weapon will have that mod + * @param botRole e.g. assault/exusec * @param isPmc * @returns GenerateWeaponResult object */ - generateWeaponByTpl(weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; + generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; /** - * Generate an entirely random weapon - * @param equipmentSlot Primary/secondary/holster - * @param botTemplateInventory e.g. assault.json - * @param weaponParentId - * @param modChances - * @param botRole - * @param isPmc - * @returns GenerateWeaponResult object - */ - generateRandomWeapon(equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean): GenerateWeaponResult; - /** - * Create array with weapon base as only element - * Add additional properties as required - * @param weaponTpl - * @param weaponParentId - * @param equipmentSlot - * @param weaponItemTemplate + * Create array with weapon base as only element and + * add additional properties based on weapon type + * @param weaponTpl Weapon tpl to create item with + * @param weaponParentId Weapons parent id + * @param equipmentSlot e.g. primary/secondary/holster + * @param weaponItemTemplate db template for weapon * @param botRole for durability values - * @returns + * @returns Base weapon item in array */ - constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; - /** - * Add compatible magazines to an inventory based on a generated weapon - * @param weaponDetails - * @param magCounts - * @param inventory - * @param botRole the bot type we're getting generating extra mags for - */ - addExtraMagazinesToInventory(weaponDetails: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; /** * Get the mods necessary to kit out a weapon to its preset level * @param weaponTpl weapon to find preset for @@ -84,33 +80,21 @@ export declare class BotWeaponGenerator { * @returns array of weapon mods */ protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[]; - /** Checks if all required slots are occupied on a weapon and all it's mods */ + /** + * Checks if all required slots are occupied on a weapon and all it's mods + * @param weaponItemArray Weapon + mods + * @returns true if valid + */ protected isWeaponValid(weaponItemArray: Item[]): boolean; /** * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. * Additionally, adds extra bullets to SecuredContainer - * @param weaponMods - * @param weaponTemplate - * @param magCounts - * @param ammoTpl - * @param inventory - * @param botRole the bot type we're getting generating extra mags for - * @returns + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for */ - protected generateExtraMagazines(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory, botRole: string): void; - /** - * Get a randomised number of bullets for a specific magazine - * @param magCounts min and max count of magazines - * @param magTemplate magazine to generate bullet count for - * @returns bullet count number - */ - protected getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; - /** - * Get a randomised count of magazines - * @param magCounts min and max value returned value can be between - * @returns numberical value of magazine count - */ - protected getRandomisedMagazineCount(magCounts: MinMax): number; + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; /** * Add ammo to the secure container * @param stackCount How many stacks of ammo to add @@ -127,21 +111,13 @@ export declare class BotWeaponGenerator { * @returns magazine tpl string */ protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; - /** - * Get a weapons default magazine template id - * @param weaponTemplate weapon to get default magazine for - * @returns tpl of magazine - */ - protected getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; - protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void; /** * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) * @param ammo a list of ammo tpls the weapon can use * @param weaponTemplate the weapon we want to pick ammo for - * @param isPmc is the ammo being gathered for a pmc (runs pmc ammo filtering) * @returns an ammo tpl that works with the desired gun */ - protected getCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem, isPmc: boolean): string; + protected getWeightedCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem): string; /** * Get a weapons compatible cartridge caliber * @param weaponTemplate Weapon to look up caliber of diff --git a/Faupi-MunitionsExpert/server/types/generators/LocationGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/LocationGenerator.d.ts index bd368b5..cc61dcf 100644 --- a/Faupi-MunitionsExpert/server/types/generators/LocationGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/LocationGenerator.d.ts @@ -3,10 +3,9 @@ import { GameEventHelper } from "../helpers/GameEventHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { PresetHelper } from "../helpers/PresetHelper"; import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; -import { ILooseLoot, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; +import { ILooseLoot, SpawnpointsForced, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; import { Item } from "../models/eft/common/tables/IItem"; import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase"; -import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { ILocationConfig } from "../models/spt/config/ILocationConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -36,11 +35,19 @@ export declare class LocationGenerator { generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; protected getLooseLootMultiplerForLocation(location: string): number; protected getStaticLootMultiplerForLocation(location: string): number; + /** + * Create array of loose + forced loot using probability system + * @param dynamicLootDist + * @param staticAmmoDist + * @param locationName Location to generate loot for + * @returns Array of spawn points with loot in them + */ generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; + /** + * Add forced spawn point loot into loot parameter array + * @param loot array to add forced loot to + * @param forcedSpawnPoints forced loot to add + */ + protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[]): void; protected createItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; - protected getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; - protected getRandomValidCaliber(magTemplate: ITemplateItem): string; - protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; - protected createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; - protected createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item; } diff --git a/Faupi-MunitionsExpert/server/types/generators/LootGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/LootGenerator.d.ts new file mode 100644 index 0000000..bbc1915 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/generators/LootGenerator.d.ts @@ -0,0 +1,58 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { LootItem } from "../models/spt/services/LootItem"; +import { LootRequest } from "../models/spt/services/LootRequest"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class LootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected itemFilterService: ItemFilterService; + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, itemFilterService: ItemFilterService); + /** + * Generate a list of items based on options passed in + * @param options parameters to adjust what loot is generated + * @returns An array of loot items + */ + createRandomloot(options: LootRequest): LootItem[]; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Find a random item in items.json and add to result array + * @param items items to choose from + * @param itemTypeCounts item limit counts + * @param options item filters + * @param result array to add found item to + * @returns true if item was valid and added to pool + */ + protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, options: LootRequest, result: LootItem[]): boolean; + /** + * + * Find a random item in items.json and add to result array + * @param globalDefaultPresets presets to choose from + * @param itemTypeCounts item limit counts + * @param result array to add found preset to + * @returns true if preset was valid and added to pool + */ + protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record, result: LootItem[]): boolean; +} diff --git a/Faupi-MunitionsExpert/server/types/generators/PMCLootGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/PMCLootGenerator.d.ts index 64e6f7f..b9f2a83 100644 --- a/Faupi-MunitionsExpert/server/types/generators/PMCLootGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/PMCLootGenerator.d.ts @@ -1,15 +1,21 @@ import { ItemHelper } from "../helpers/ItemHelper"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { ConfigServer } from "../servers/ConfigServer"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +/** + * Handle the generation of dynamic PMC loot in pockets and backpacks + * and the removal of blacklisted items + */ export declare class PMCLootGenerator { protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected configServer: ConfigServer; + protected itemFilterService: ItemFilterService; protected pocketLootPool: string[]; protected backpackLootPool: string[]; protected botConfig: IBotConfig; - constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService); generatePMCPocketLootPool(): string[]; generatePMCBackpackLootPool(): string[]; } diff --git a/Faupi-MunitionsExpert/server/types/generators/RagfairAssortGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/RagfairAssortGenerator.d.ts index cbdd7f2..db4811d 100644 --- a/Faupi-MunitionsExpert/server/types/generators/RagfairAssortGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/RagfairAssortGenerator.d.ts @@ -1,5 +1,8 @@ import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -8,18 +11,40 @@ export declare class RagfairAssortGenerator { protected hashUtil: HashUtil; protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; protected generatedAssortItems: Item[]; - constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer); + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); /** * Get an array of unique items that can be sold on the flea * @returns array of unique items */ getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ protected assortsAreGenerated(): boolean; /** * Generate an array of items the flea can sell * @returns array of unique items */ protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ protected createRagfairAssortItem(tplId: string, id?: string): Item; } diff --git a/Faupi-MunitionsExpert/server/types/generators/RagfairOfferGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/RagfairOfferGenerator.d.ts index 3e7f4cc..317cd6b 100644 --- a/Faupi-MunitionsExpert/server/types/generators/RagfairOfferGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/RagfairOfferGenerator.d.ts @@ -41,15 +41,37 @@ export declare class RagfairOfferGenerator { createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; protected getTraderId(userID: string): string; protected getRating(userID: string): number; + /** + * Is the offers user rating growing + * @param userID user to check rating of + * @returns true if its growing + */ protected getRatingGrowing(userID: string): boolean; + /** + * Get number of section until offer should expire + * @param userID Id of the offer owner + * @param time Time the offer is posted + * @returns number of seconds until offer expires + */ protected getOfferEndTime(userID: string, time: number): number; /** * Create multiple offers for items by using a unique list of items we've generated previously - * @param expiredOffers + * @param expiredOffers optional, expired offers to regenerate */ generateDynamicOffers(expiredOffers?: Item[]): void; - generateTraderOffers(traderID: string): void; + /** + * Generate trader offers on flea using the traders assort data + * @param traderID Trader to generate offers for + */ + generateFleaOffersForTrader(traderID: string): void; protected getItemCondition(userID: string, items: Item[], itemDetails: ITemplateItem): Item[]; + /** + * Add missing conditions to an item if needed + * Durabiltiy for repairable items + * HpResource for medical items + * @param item item to add conditions to + * @returns Item with conditions added + */ protected addMissingCondition(item: Item): Item; protected getOfferRequirements(items: Item[]): { count: number; @@ -57,6 +79,14 @@ export declare class RagfairOfferGenerator { }[]; /** * Create a flea offer and store it in the Ragfair server offers array + * @param userID owner of the offer + * @param time time offer is put up + * @param items items in the offer + * @param barterScheme + * @param loyalLevel + * @param price price of offer + * @param sellInOnePiece + * @returns */ createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; } diff --git a/Faupi-MunitionsExpert/server/types/generators/ScavCaseRewardGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/ScavCaseRewardGenerator.d.ts index c7d6ab7..89cb5c8 100644 --- a/Faupi-MunitionsExpert/server/types/generators/ScavCaseRewardGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/ScavCaseRewardGenerator.d.ts @@ -8,9 +8,13 @@ import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "../mo import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { RagfairPriceService } from "../services/RagfairPriceService"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; +/** + * Handle the creation of randomised scav case rewards + */ export declare class ScavCaseRewardGenerator { protected logger: ILogger; protected randomUtil: RandomUtil; @@ -18,9 +22,10 @@ export declare class ScavCaseRewardGenerator { protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected ragfairPriceService: RagfairPriceService; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected scavCaseConfig: IScavCaseConfig; - constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, configServer: ConfigServer); + constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * Create an array of rewards that will be given to the player upon completing their scav case build * @param body client request diff --git a/Faupi-MunitionsExpert/server/types/generators/WeatherGenerator.d.ts b/Faupi-MunitionsExpert/server/types/generators/WeatherGenerator.d.ts index 44cecbb..8ddbe49 100644 --- a/Faupi-MunitionsExpert/server/types/generators/WeatherGenerator.d.ts +++ b/Faupi-MunitionsExpert/server/types/generators/WeatherGenerator.d.ts @@ -1,7 +1,7 @@ import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; -import { ConfigServer } from "../servers/ConfigServer"; import { IWeatherData } from "../models/eft/weather/IWeatherData"; import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { RandomUtil } from "../utils/RandomUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class WeatherGenerator { @@ -21,11 +21,16 @@ export declare class WeatherGenerator { protected getAcceleratedTime(computedDate: Date): string; /** * Get current time formatted to fit BSGs requirement - * @param computedDate + * @param computedDate date to format into bsg style * @returns */ protected getNormalTime(computedDate: Date): string; - generateWeather(data: IWeatherData): IWeatherData; + /** + * Return randomised Weather data + * @param weatherData weather input data + * @returns Randomised weather data + */ + generateWeather(weatherData: IWeatherData): IWeatherData; protected getWeightedFog(): string; protected getWeightedRain(): number; protected getRandomFloat(node: string): number; diff --git a/Faupi-MunitionsExpert/server/types/generators/weapongen/IInventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-MunitionsExpert/server/types/generators/weapongen/InventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..4fcb1e2 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,14 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/Faupi-MunitionsExpert/server/types/helpers/AssortHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/AssortHelper.d.ts index 15586b9..bfc157f 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/AssortHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/AssortHelper.d.ts @@ -17,7 +17,7 @@ export declare class AssortHelper { * @param assort assort items from a trader * @returns assort items minus locked quest assorts */ - stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort; + stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, flea?: boolean): ITraderAssort; /** * Remove assorts from a trader that have not been unlocked yet * @param pmcProfile player profile @@ -32,5 +32,5 @@ export declare class AssortHelper { * @param itemID item id to remove from asort * @returns Modified assort */ - removeItemFromAssort(assort: ITraderAssort, itemID: string): ITraderAssort; + removeItemFromAssort(assort: ITraderAssort, itemID: string, flea?: boolean): ITraderAssort; } diff --git a/Faupi-MunitionsExpert/server/types/helpers/BotGeneratorHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/BotGeneratorHelper.d.ts index 3cd7256..5e3e501 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/BotGeneratorHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/BotGeneratorHelper.d.ts @@ -1,19 +1,33 @@ import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; -import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; -import { Grid, ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; -import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { ItemFilterService } from "../services/ItemFilterService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGeneratorHelper } from "./BotWeaponGeneratorHelper"; import { ContainerHelper } from "./ContainerHelper"; import { InventoryHelper } from "./InventoryHelper"; import { ItemHelper } from "./ItemHelper"; import { ProbabilityHelper } from "./ProbabilityHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} export declare class BotGeneratorHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; @@ -25,16 +39,121 @@ export declare class BotGeneratorHelper { protected itemHelper: ItemHelper; protected inventoryHelper: InventoryHelper; protected containerHelper: ContainerHelper; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected itemFilterService: ItemFilterService; + protected profileHelper: ProfileHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer); - generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, configServer: ConfigServer); /** - * Is this magazine cylinder related (revolvers and grenade launchers) - * @param magazineParentName the name of the magazines parent - * @returns true if it is cylinder related + * Check mods are compatible and add to array + * @param equipment Equipment item to add mods to + * @param modPool Mod list to choose frm + * @param parentId parentid of item to add mod to + * @param parentTemplate template objet of item to add mods to + * @param modSpawnChances dictionary of mod items and their chance to spawn for this bot type + * @returns Item + compatible mods as an array */ - magazineIsCylinderRelated(magazineParentName: string): boolean; + generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; + /** + * @param sessionId session id + * @param weapon Weapon to add mods to + * @param modPool Pool of compatible mods to attach to weapon + * @param weaponParentId parentId of weapon + * @param parentWeaponTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @returns Weapon + mods array + */ + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentWeaponTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string): Item[]; + /** + * + * @param modSlot + * @param isRandomisableSlot + * @param modsParent + * @param botEquipBlacklist + * @param itemModPool + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate + * @returns + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, modsParent: Slot, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Check if mod item is on limited list + has surpassed the limit set for it + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @returns true if over item limit + */ + protected modHasReachedItemLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits): boolean; + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + protected initModLimits(botRole: string): BotModLimits; + /** + * Generate a pool of mods for this bots mod type if bot has values inside `randomisedWeaponModSlots` array found in bot.json/equipment[botrole] + * @param allowedMods Mods to be added to mod pool + * @param botEquipBlacklist blacklist of items not allowed to be added to mod pool + * @param modSlot Slot to generate mods for + * @param itemModPool base mod pool to replace values of + */ + protected generateDynamicWeaponModPool(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string, itemModPool: Record): void; + /** + * Find all compatible mods for equipment item and add to modPool + * @param itemDetails item to find mods for + * @param modPool ModPool to add mods to + */ + generateDynamicModPool(itemDetails: ITemplateItem, modPool: Mods): void; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; + /** + * Check if the specific item type on the weapon has reached the set limit + * @param modTpl log mod tpl if over type limit + * @param currentCount current number of this item on gun + * @param maxLimit mod limit allowed + * @param botRole role of bot we're checking weapon of + * @returns true if limit reached + */ + protected weaponModLimitReached(modTpl: string, currentCount: { + count: number; + }, maxLimit: number, botRole: string): boolean; + /** + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate tempalte of the mods parent item + * @returns true if valid + */ + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; + /** + * Create a mod item with parameters as properties + * @param modId _id + * @param modTpl _tpl + * @param parentId parentId + * @param modSlot slotId + * @param modTemplate Used to add additional properites in the upd object + * @returns Item object + */ + protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem): Item; /** * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot * never return true for an item that has 0% spawn chance @@ -46,7 +165,7 @@ export declare class BotGeneratorHelper { protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; /** * Get a list of containers that hold ammo - * e.g. mod_magazine + * e.g. mod_magazine / patron_in_weapon_000 * @returns string array */ protected getAmmoContainers(): string[]; @@ -62,11 +181,11 @@ export declare class BotGeneratorHelper { * Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0. * Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots. * This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine" - * - * @param {object} items The items where the CylinderMagazine's camora are appended to - * @param {object} modPool modPool which should include available cartrigdes - * @param {string} parentId The CylinderMagazine's UID - * @param {object} parentTemplate The CylinderMagazine's template + * @param items The items where the CylinderMagazine's camora are appended to + * @param modPool modPool which should include available cartrigdes + * @param parentId The CylinderMagazine's UID + * @param parentTemplate The CylinderMagazine's template + * @returns */ protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void; /** @@ -75,6 +194,13 @@ export declare class BotGeneratorHelper { * @returns string array of shells fro luitple camora sources */ protected mergeCamoraPoolsTogether(camorasWithShells: Record): string[]; + /** + * Adds properties to an item + * e.g. Repairable / HasHinge / Foldable / MaxDurability + * @param itemTemplate + * @param botRole Used by weapons to randomise the durability values + * @returns Item Upd object with extra properties + */ generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: any): { upd?: Upd; }; @@ -92,13 +218,15 @@ export declare class BotGeneratorHelper { * @returns Repairable object */ protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; - protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** - * Sort by spawn chance, highest to lowest, higher is more common - * @param unsortedModArray String array to sort - * @returns Sorted string array + * Get a random mod from an items compatible mods Filter array + * @param modTpl + * @param parentSlot + * @param modSlot + * @param items + * @returns item tpl */ - protected sortModArray(unsortedModArray: string[]): string[]; + protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** * Can an item be added to an item without issue * @param items @@ -107,18 +235,8 @@ export declare class BotGeneratorHelper { * @returns true if possible */ isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean; - /** - * Adds an item with all its childern into specified equipmentSlots, wherever it fits. - * @param equipmentSlots - * @param parentId - * @param parentTpl - * @param itemWithChildren - * @param inventory - * @returns a `boolean` indicating item was added - */ - addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean; - protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; } +/** TODO - move into own class */ export declare class ExhaustableArray { private itemPool; private randomUtil; diff --git a/Faupi-MunitionsExpert/server/types/helpers/BotHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/BotHelper.d.ts index 9b89481..18738e5 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/BotHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/BotHelper.d.ts @@ -13,11 +13,34 @@ export declare class BotHelper { protected configServer: ConfigServer; protected botConfig: IBotConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retreive difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ getBotTemplate(role: string): IBotType; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ getPmcDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; /** * Randomise the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent * @param difficultySettings pmc difficulty settings */ randomisePmcHostility(difficultySettings: Difficulty): void; @@ -31,7 +54,7 @@ export declare class BotHelper { */ addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; /** - * Add a bot to the ENEMY_BOT_TYPES array + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list * @param difficultySettings bot settings to alter * @param typesToAdd bot type to add to enemy list */ @@ -42,4 +65,10 @@ export declare class BotHelper { * @param typesToAdd bot type to add to revenge list */ addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; } diff --git a/Faupi-MunitionsExpert/server/types/helpers/BotWeaponGeneratorHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..7e25f56 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,78 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper); + /** + * Get a randomised number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomised count of magazines + * @param magCounts min and max value returned value can be between + * @returns numberical value of magazine count + */ + getRandomisedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartrdiges to a bots inventory (vest/pocket) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + */ + addBulletsToVestAndPockets(ammoTpl: string, cartridgeCount: number, inventory: Inventory): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * Adds an item with all its childern into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/Faupi-MunitionsExpert/server/types/helpers/ExtendedProfileHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/ExtendedProfileHelper.d.ts deleted file mode 100644 index c05d88e..0000000 --- a/Faupi-MunitionsExpert/server/types/helpers/ExtendedProfileHelper.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { BotGenerator } from "../generators/BotGenerator"; -import { IPmcData, Skills, Stats } from "../models/eft/common/IPmcData"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { SaveServer } from "../servers/SaveServer"; -import { BotLootCacheService } from "../services/BotLootCacheService"; -import { FenceService } from "../services/FenceService"; -import { JsonUtil } from "../utils/JsonUtil"; -import { TimeUtil } from "../utils/TimeUtil"; -import { Watermark } from "../utils/Watermark"; -import { ItemHelper } from "./ItemHelper"; -import { ProfileHelper } from "./ProfileHelper"; -/** - * This class needs to exist outside of ProfileHelper to ensure cyclic deps don't cause the server to fail on load - */ -export declare class ExtendedProfileHelper extends ProfileHelper { - protected botLootCacheService: BotLootCacheService; - protected botGenerator: BotGenerator; - constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, botLootCacheService: BotLootCacheService, fenceService: FenceService, botGenerator: BotGenerator); - generatePlayerScav(sessionID: string): IPmcData; - protected getScavSkills(sessionID: string): Skills; - protected removeSecureContainer(profile: IPmcData): IPmcData; - protected getDefaultScavSkills(): Skills; - protected getScavStats(sessionID: string): Stats; - protected getScavLevel(sessionID: string): number; - protected getScavExperience(sessionID: string): number; - protected setScavCooldownTimer(profile: IPmcData, pmcData: IPmcData): IPmcData; -} diff --git a/Faupi-MunitionsExpert/server/types/helpers/HideoutHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/HideoutHelper.d.ts index 36e4009..7495a6a 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/HideoutHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/HideoutHelper.d.ts @@ -44,14 +44,72 @@ export declare class HideoutHelper { initProduction(recipeId: string, productionTime: number): Production; isProductionType(productive: Productive): productive is Production; applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void; + /** + * TODO: + * After looking at the skills there doesnt seem to be a configuration per skill to boost + * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it) + * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure! + * @param pmcData + * @param bonus + */ protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void; + /** + * Process a players hideout, update areas that use resources + increment production timers + * @param sessionID Session id + */ updatePlayerHideout(sessionID: string): void; + /** + * Update progress timer for water collector + * @param pmcData profile to update + * @param productionId id of water collection production to update + * @param hideoutProperties Hideout properties + */ + protected updateWaterCollectorProductionTimer(pmcData: IPmcData, productionId: string, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Iterate over productions and update their progress timers + * @param pmcData Profile to check for productions and update + * @param hideoutProperties Hideout properties + */ + protected updateProductionTimers(pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Update progress timer for scav case + * @param pmcData Profile to update + * @param productionId Id of scav case production to update + */ + protected updateScavCaseProductionTimer(pmcData: IPmcData, productionId: string): void; + /** + * Iterate over hideout areas that use resources (fuel/filters etc) and update associated values + * @param sessionID Session id + * @param pmcData Profile to update areas of + * @param hideoutProperties hideout properties + */ + protected updateAreasWithResources(sessionID: string, pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void; protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean; - protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): HideoutArea; - protected updateWaterFilters(waterFilterArea: HideoutArea, pwProd: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; + protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void; + /** + * Adjust water filter objects resourceValue or delete when they reach 0 resource + * @param waterFilterArea water filter area to update + * @param production production object + * @param isGeneratorOn is generatory enabled + * @param pmcData Player profile + * @returns Updated HideoutArea object + */ + protected updateWaterFilters(waterFilterArea: HideoutArea, production: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd; - protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): HideoutArea; + protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): void; protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production; protected getBTCSlots(pmcData: IPmcData): number; protected getManagementSkillsSlots(): number; diff --git a/Faupi-MunitionsExpert/server/types/helpers/InRaidHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/InRaidHelper.d.ts index c3cbfbb..962df38 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/InRaidHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/InRaidHelper.d.ts @@ -5,6 +5,7 @@ import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequ import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; import { InventoryHelper } from "./InventoryHelper"; import { PaymentHelper } from "./PaymentHelper"; @@ -15,19 +16,8 @@ export declare class InRaidHelper { protected databaseServer: DatabaseServer; protected inventoryHelper: InventoryHelper; protected paymentHelper: PaymentHelper; - constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper); - /** - * Reset the SPT inraid property stored in a profile to 'none' - * @param sessionID Session id - */ - protected removePlayer(sessionID: string): void; - /** - * Some maps have one-time-use keys (e.g. Labs - * Remove the relevant key from an inventory based on the post-raid request data passed in - * @param offraidData post-raid data - * @param sessionID Session id - */ - protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + protected profileFixerService: ProfileFixerService; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, profileFixerService: ProfileFixerService); /** * Check an array of items and add an upd object to money items with a stack count of 1 * Single stack money items have no upd object and thus no StackObjectsCount, causing issues @@ -52,6 +42,18 @@ export declare class InRaidHelper { * @returns Reset profile object */ updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData; + /** + * Some maps have one-time-use keys (e.g. Labs + * Remove the relevant key from an inventory based on the post-raid request data passed in + * @param offraidData post-raid data + * @param sessionID Session id + */ + protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Set the SPT inraid location Profile property to 'none' + * @param sessionID Session id + */ + protected setPlayerInRaidLocationStatusToNone(sessionID: string): void; /** * Adds SpawnedInSession property to items found in a raid * Removes SpawnedInSession for non-scav players if item was taken into raid with SpawnedInSession = true @@ -93,5 +95,10 @@ export declare class InRaidHelper { * @returns true if item is kept after death */ isItemKeptAfterDeath(slotId: string): boolean; + /** + * Return the equipped items from a players inventory + * @param items Players inventory to search through + * @returns an array of equipped items + */ getPlayerGear(items: Item[]): Item[]; } diff --git a/Faupi-MunitionsExpert/server/types/helpers/InventoryHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/InventoryHelper.d.ts index dc7cbca..b8e5c9d 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/InventoryHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/InventoryHelper.d.ts @@ -43,6 +43,7 @@ export declare class InventoryHelper { constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, httpResponse: HttpResponseUtil, fenceService: FenceService, databaseServer: DatabaseServer, paymentHelper: PaymentHelper, traderAssortHelper: TraderAssortHelper, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, containerHelper: ContainerHelper, profileHelper: ProfileHelper, configServer: ConfigServer); addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse; removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + removeItemByCount(pmcData: IPmcData, itemId: string, count: number, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record; protected getSizeByInventoryItemHash(itemTpl: string, itemID: string, inventoryItemHash: InventoryHelper.InventoryItemHash): Record; protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash; diff --git a/Faupi-MunitionsExpert/server/types/helpers/ItemHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/ItemHelper.d.ts index 1701c62..0effaf2 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/ItemHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/ItemHelper.d.ts @@ -1,35 +1,30 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { InsuredItem } from "../models/eft/common/tables/IBotBase"; import { Item, Repairable } from "../models/eft/common/tables/IItem"; +import { IStaticAmmoDetails } from "../models/eft/common/tables/ILootBase"; import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; declare class ItemHelper { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected objectId: ObjectId; + protected mathUtil: MathUtil; protected databaseServer: DatabaseServer; - constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer); + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer); /** - * Checks if a id is a valid item. Valid meaning that it's an item that be stored in stash + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash * @param {string} tpl the template id / tpl * @returns boolean; true for items that may be in player posession and not quest items */ isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean; - /** - * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward - * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. - * @param {*} tpl template id of item to check - * @returns boolean: true if item is valid reward - */ - isValidRewardItem(tpl: string): boolean; - /** - * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) - * @returns a list of rewardable items [[_tpl, itemTemplate],...] - */ - getRewardableItems(): [string, ITemplateItem][]; /** * Check if the tpl / template Id provided is a descendent of the baseclass * @@ -84,6 +79,11 @@ declare class ItemHelper { * @returns {array} The array of StackSlotItems */ generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; /** * Gets item data from items.json * @param tpl items template id to look up @@ -196,6 +196,22 @@ declare class ItemHelper { * @returns ItemSize object (width and height) */ getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; + /** + * Get a random cartridge from an items Filter property + * @param item + * @returns + */ + getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; + createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; + protected getRandomValidCaliber(magTemplate: ITemplateItem): string; + protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; + createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item; + /** + * Get the size of a stack, return 1 if no stack object count property found + * @param item Item to get stack size of + * @returns size of stack + */ + getItemStackSize(item: Item): number; } declare namespace ItemHelper { interface ItemSize { diff --git a/Faupi-MunitionsExpert/server/types/helpers/ProfileHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/ProfileHelper.d.ts index 6c150c8..9c6560a 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/ProfileHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/ProfileHelper.d.ts @@ -2,24 +2,41 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { Stats } from "../models/eft/common/tables/IBotBase"; import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { FenceService } from "../services/FenceService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; import { Watermark } from "../utils/Watermark"; import { ItemHelper } from "./ItemHelper"; export declare class ProfileHelper { + protected logger: ILogger; protected jsonUtil: JsonUtil; protected watermark: Watermark; protected timeUtil: TimeUtil; protected saveServer: SaveServer; protected databaseServer: DatabaseServer; protected itemHelper: ItemHelper; + protected profileSnapshotService: ProfileSnapshotService; protected fenceService: FenceService; - constructor(jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, fenceService: FenceService); + constructor(logger: ILogger, jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService, fenceService: FenceService); resetProfileQuestCondition(sessionID: string, conditionId: string): void; getCompleteProfile(sessionID: string): IPmcData[]; + /** + * Fix xp doubling on post-raid xp reward screen by sending a 'dummy' profile to the post-raid screen + * Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using + * the now updated profile values as a base, meaning it shows x2 xp gained + * Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return + * Delete snapshot of pre-raid profile prior to returning profile data + * @param sessionId Session id + * @param output pmc and scav profiles array + * @param pmcProfile post-raid pmc profile + * @param scavProfile post-raid scav profile + * @returns updated profile array + */ + protected postRaidXpWorkaroundFix(sessionId: string, output: IPmcData[], pmcProfile: IPmcData, scavProfile: IPmcData): IPmcData[]; isNicknameTaken(info: IValidateNicknameRequestData, sessionID: string): boolean; /** * Add experience to a PMC inside the players profile diff --git a/Faupi-MunitionsExpert/server/types/helpers/QuestHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/QuestHelper.d.ts index 0f68cd5..d66d150 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/QuestHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/QuestHelper.d.ts @@ -36,13 +36,30 @@ export declare class QuestHelper { protected configServer: ConfigServer; protected questConfig: IQuestConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, traderHelper: TraderHelper, configServer: ConfigServer); - questStatus(pmcData: IPmcData, questID: string): QuestStatus; /** - * returns true is the condition is satisfied + * Get status of a quest by quest id + * @param pmcData Profile to search + * @param questID Quest id to look up + * @returns QuestStauts enum + */ + getQuestStatus(pmcData: IPmcData, questID: string): QuestStatus; + /** + * returns true is the level condition is satisfied + * @param playerLevel Players level + * @param condition Quest condition + * @returns true if player level is greater than or equal to quest */ - evaluateLevel(pmcProfile: IPmcData, cond: AvailableForConditions): boolean; + doesPlayerLevelFulfilCondition(playerLevel: number, condition: AvailableForConditions): boolean; getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[]; - rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progress: number): void; + /** + * Increase skill points of a skill on player profile + * @param sessionID Session id + * @param pmcData Player profile + * @param output output object to send back to client + * @param skillName Name of skill to increase skill points of + * @param progressAmount Amount of skill points to add to skill + */ + rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progressAmount: number): void; getQuestLocale(questId: string): any; /** * Debug Routine for showing some information on the diff --git a/Faupi-MunitionsExpert/server/types/helpers/RagfairOfferHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/RagfairOfferHelper.d.ts index 8d03bee..e9d72ca 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/RagfairOfferHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/RagfairOfferHelper.d.ts @@ -22,12 +22,14 @@ import { ProfileHelper } from "./ProfileHelper"; import { RagfairHelper } from "./RagfairHelper"; import { RagfairServerHelper } from "./RagfairServerHelper"; import { RagfairSortHelper } from "./RagfairSortHelper"; +import { TraderHelper } from "./TraderHelper"; export declare class RagfairOfferHelper { protected logger: ILogger; protected timeUtil: TimeUtil; protected hashUtil: HashUtil; protected itemEventRouter: ItemEventRouter; protected databaseServer: DatabaseServer; + protected traderHelper: TraderHelper; protected saveServer: SaveServer; protected dialogueHelper: DialogueHelper; protected itemHelper: ItemHelper; @@ -43,10 +45,10 @@ export declare class RagfairOfferHelper { protected static goodSoldTemplate: string; protected ragfairConfig: IRagfairConfig; protected questConfig: IQuestConfig; - constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); + constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); getValidOffers(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; - processOffers(sessionID: string): boolean; + processOffersOnProfile(sessionID: string): boolean; protected getProfileOffers(sessionID: string): IRagfairOffer[]; protected deleteOfferByOfferId(sessionID: string, offerId: string): void; protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse; diff --git a/Faupi-MunitionsExpert/server/types/helpers/RagfairSellHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/RagfairSellHelper.d.ts index 6ec004a..91b8a20 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/RagfairSellHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/RagfairSellHelper.d.ts @@ -11,6 +11,12 @@ export declare class RagfairSellHelper { protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer); - calculateSellChance(baseChance: number, offerPrice: number, requirementsPriceInRub: number): number; - rollForSale(sellChance: number, count: number): SellResult[]; + calculateSellChance(baseChancePercent: number, offerPriceRub: number, playerListedPriceRub: number): number; + /** + * Determine if the offer being listed will be sold + * @param sellChancePercent chance item will sell + * @param itemSellCount count of items to sell + * @returns Array of purchases of item(s) lsited + */ + rollForSale(sellChancePercent: number, itemSellCount: number): SellResult[]; } diff --git a/Faupi-MunitionsExpert/server/types/helpers/RagfairServerHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/RagfairServerHelper.d.ts index e4939d1..a03cdda 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/RagfairServerHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/RagfairServerHelper.d.ts @@ -6,6 +6,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; +import { ItemFilterService } from "../services/ItemFilterService"; import { LocaleService } from "../services/LocaleService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -13,6 +14,9 @@ import { RandomUtil } from "../utils/RandomUtil"; import { DialogueHelper } from "./DialogueHelper"; import { ItemHelper } from "./ItemHelper"; import { ProfileHelper } from "./ProfileHelper"; +/** + * Helper class for common ragfair server actions + */ export declare class RagfairServerHelper { protected randomUtil: RandomUtil; protected hashUtil: HashUtil; @@ -23,11 +27,12 @@ export declare class RagfairServerHelper { protected localeService: LocaleService; protected dialogueHelper: DialogueHelper; protected jsonUtil: JsonUtil; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; protected questConfig: IQuestConfig; protected static goodsReturnedTemplate: string; - constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, configServer: ConfigServer); + constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, itemFilterService: ItemFilterService, configServer: ConfigServer); /** * Is item valid / on blacklist / quest item * @param itemDetails diff --git a/Faupi-MunitionsExpert/server/types/helpers/RepairHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/RepairHelper.d.ts index 9a3ab29..5b09320 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/RepairHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/RepairHelper.d.ts @@ -14,8 +14,17 @@ export declare class RepairHelper { protected configServer: ConfigServer; protected repairConfig: IRepairConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); - updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit?: boolean, applyRandomDegradation?: boolean): Item; - protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number): number; - protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, armorMax: number): number; + /** + * + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; isWeaponTemplate(tpl: string): boolean; } diff --git a/Faupi-MunitionsExpert/server/types/helpers/TradeHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/TradeHelper.d.ts index 975062b..7ab9768 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/TradeHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/TradeHelper.d.ts @@ -39,6 +39,12 @@ export declare class TradeHelper { * @returns */ sellItem(pmcData: IPmcData, body: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment the assorts buy count by number of items purchased + * Show error on screen if player attepts to buy more than what the buy max allows + * @param assortBeingPurchased assort being bought + * @param itemsPurchasedCount number of items being bought + */ protected incrementAssortBuyCount(assortBeingPurchased: Item, itemsPurchasedCount: number): void; protected checkPurchaseIsWithinTraderItemLimit(assortBeingPurchased: Item, assortId: string, count: number): void; } diff --git a/Faupi-MunitionsExpert/server/types/helpers/TraderAssortHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/TraderAssortHelper.d.ts index 91ba6b9..025efd6 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/TraderAssortHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/TraderAssortHelper.d.ts @@ -1,7 +1,7 @@ import { RagfairAssortGenerator } from "../generators/RagfairAssortGenerator"; import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; import { Item } from "../models/eft/common/tables/IItem"; -import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITrader, ITraderAssort } from "../models/eft/common/tables/ITrader"; import { ITraderConfig } from "../models/spt/config/ITraderConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -10,13 +10,16 @@ import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { JsonUtil } from "../utils/JsonUtil"; import { MathUtil } from "../utils/MathUtil"; +import { TimeUtil } from "../utils/TimeUtil"; import { AssortHelper } from "./AssortHelper"; import { PaymentHelper } from "./PaymentHelper"; import { ProfileHelper } from "./ProfileHelper"; +import { TraderHelper } from "./TraderHelper"; export declare class TraderAssortHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; protected mathUtil: MathUtil; + protected timeUtil: TimeUtil; protected databaseServer: DatabaseServer; protected profileHelper: ProfileHelper; protected assortHelper: AssortHelper; @@ -24,18 +27,32 @@ export declare class TraderAssortHelper { protected ragfairAssortGenerator: RagfairAssortGenerator; protected ragfairOfferGenerator: RagfairOfferGenerator; protected traderAssortService: TraderAssortService; + protected traderHelper: TraderHelper; protected fenceService: FenceService; protected configServer: ConfigServer; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, fenceService: FenceService, configServer: ConfigServer); + constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, traderHelper: TraderHelper, fenceService: FenceService, configServer: ConfigServer); /** * Get a traders assorts * Can be used for returning ragfair / fence assorts + * Filter out assorts not unlocked due to level OR quest completion * @param sessionId session id - * @param traderId trader id - * @returns a traders assorts + * @param traderId traders id + * @returns a traders' assorts */ - getAssort(sessionId: string, traderId: string): ITraderAssort; + getAssort(sessionId: string, traderId: string, flea?: boolean): ITraderAssort; + /** + * Reset a traders assorts and move nextResupply value to future + * Flag trader as needing a flea offer reset to be picked up by flea update() function + * @param trader trader details to alter + */ + resetExpiredTrader(trader: ITrader): void; + /** + * Does the supplied trader need its assorts refreshed + * @param traderID Trader to check + * @returns true they need refreshing + */ + traderAssortsHaveExpired(traderID: string): boolean; /** * Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config * @param traderAssort Assorts to multiple price of diff --git a/Faupi-MunitionsExpert/server/types/helpers/TraderHelper.d.ts b/Faupi-MunitionsExpert/server/types/helpers/TraderHelper.d.ts index b2e9d38..0dc93e8 100644 --- a/Faupi-MunitionsExpert/server/types/helpers/TraderHelper.d.ts +++ b/Faupi-MunitionsExpert/server/types/helpers/TraderHelper.d.ts @@ -9,6 +9,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { FenceService } from "../services/FenceService"; import { PlayerService } from "../services/PlayerService"; +import { TimeUtil } from "../utils/TimeUtil"; import { HandbookHelper } from "./HandbookHelper"; import { ItemHelper } from "./ItemHelper"; import { PaymentHelper } from "./PaymentHelper"; @@ -23,9 +24,10 @@ export declare class TraderHelper { protected handbookHelper: HandbookHelper; protected playerService: PlayerService; protected fenceService: FenceService; + protected timeUtil: TimeUtil; protected configServer: ConfigServer; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); getTrader(traderID: string, sessionID: string): ITraderBase; getTraderAssortsById(traderId: string): ITraderAssort; /** @@ -63,7 +65,7 @@ export declare class TraderHelper { * @param item * @returns boolean */ - protected isWeaponAndBelowTraderBuyDurability(traderID: string, item: Item): boolean; + protected isWeaponBelowTraderBuyDurability(traderID: string, item: Item): boolean; /** * Get the price of an item and all of its attached children * Take into account bonuses/adjsutments e.g. discounts @@ -97,6 +99,17 @@ export declare class TraderHelper { * @param sessionID session id */ lvlUp(traderID: string, sessionID: string): void; + /** + * Get the next update timestamp for a trader + * @param traderID Trader to look up update value for + * @returns future timestamp + */ + getNextUpdateTimestamp(traderID: string): number; + /** + * Get the reset time between trader assort refreshes in seconds + * @param traderId Trader to look up + * @returns Time in seconds + */ getTraderUpdateSeconds(traderId: string): number; /** * check if an item is allowed to be sold to a trader diff --git a/Faupi-MunitionsExpert/server/types/loaders/DelayedModLoader.d.ts b/Faupi-MunitionsExpert/server/types/loaders/DelayedModLoader.d.ts deleted file mode 100644 index 2a05604..0000000 --- a/Faupi-MunitionsExpert/server/types/loaders/DelayedModLoader.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { HandbookController } from "../controllers/HandbookController"; -import { IModLoader } from "../models/spt/mod/IModLoader"; -import { ModCompilerService } from "../services/ModCompilerService"; -import { VFS } from "../utils/VFS"; -import { BundleLoader } from "./BundleLoader"; -import { InitialModLoader } from "./InitialModLoader"; -export declare class DelayedModLoader implements IModLoader { - protected bundleLoader: BundleLoader; - protected handbookController: HandbookController; - protected vfs: VFS; - protected modCompilerService: ModCompilerService; - protected initialModLoader: InitialModLoader; - constructor(bundleLoader: BundleLoader, handbookController: HandbookController, vfs: VFS, modCompilerService: ModCompilerService, initialModLoader: InitialModLoader); - getBundles(local: boolean): string; - getBundle(key: string, local: boolean): void; - getModPath(mod: string): string; - load(): void; - protected executeMods(container: DependencyContainer): void; - protected addBundles(): void; -} diff --git a/Faupi-MunitionsExpert/server/types/loaders/InitialModLoader.d.ts b/Faupi-MunitionsExpert/server/types/loaders/InitialModLoader.d.ts deleted file mode 100644 index 68e47fe..0000000 --- a/Faupi-MunitionsExpert/server/types/loaders/InitialModLoader.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { ICoreConfig } from "../models/spt/config/ICoreConfig"; -import { ModLoader } from "../models/spt/mod/IMod"; -import { IModLoader } from "../models/spt/mod/IModLoader"; -import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { ConfigServer } from "../servers/ConfigServer"; -import { ModCompilerService } from "../services/ModCompilerService"; -import { JsonUtil } from "../utils/JsonUtil"; -import { VFS } from "../utils/VFS"; -import { BundleLoader } from "./BundleLoader"; -export declare class InitialModLoader implements IModLoader { - protected logger: ILogger; - protected vfs: VFS; - protected jsonUtil: JsonUtil; - protected modCompilerService: ModCompilerService; - protected bundleLoader: BundleLoader; - protected configServer: ConfigServer; - protected static container: DependencyContainer; - protected readonly basepath = "user/mods/"; - protected imported: Record; - protected akiConfig: ICoreConfig; - constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, configServer: ConfigServer); - load(container: DependencyContainer): Promise; - getBundles(local: boolean): string; - getBundle(key: string, local: boolean): void; - /** - * Returns a list of mods with preserved load order - * @returns Array of mod names in load order - */ - getImportedModsNames(): string[]; - getModPath(mod: string): string; - protected importClass(name: string, filepath: string, container: DependencyContainer): void; - protected importMods(): Promise; - /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array - */ - protected getBrokenMods(mods: string[]): string[]; - /** - * Get packageJson data for mods - * @param mods mods to get packageJson for - * @returns dictionary - */ - protected getModsPackageData(mods: string[]): Record; - /** - * Does mod have "delayedLoad(" string in its entry class - * @param modFolderName folder name - * @param modToValidate package.json details - * @returns boolean - */ - protected isModSpt300Compatible(modFolderName: string, modToValidate: IPackageJsonData): boolean; - protected isModCombatibleWithAki(mod: IPackageJsonData): boolean; - protected executeMods(container: DependencyContainer): void; - sortModsLoadOrder(): string[]; - protected addMod(mod: string): Promise; - protected areModDependenciesFulfilled(mod: IPackageJsonData, loadedMods: Record): boolean; - protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; - protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; - protected getLoadOrder(mods: Record): Record; - getContainer(): DependencyContainer; -} diff --git a/Faupi-MunitionsExpert/server/types/loaders/PreAkiModLoader.d.ts b/Faupi-MunitionsExpert/server/types/loaders/PreAkiModLoader.d.ts index 6ded3c6..4ab1689 100644 --- a/Faupi-MunitionsExpert/server/types/loaders/PreAkiModLoader.d.ts +++ b/Faupi-MunitionsExpert/server/types/loaders/PreAkiModLoader.d.ts @@ -33,9 +33,20 @@ export declare class PreAkiModLoader implements IModLoader { protected importClass(name: string, filepath: string, container: DependencyContainer): void; protected importMods(): Promise; /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array + * Check for duplciate mods loaded, show error if duplicate mod found + * @param modPackageData dictionary of mod package.json data + */ + protected checkForDuplicateMods(modPackageData: Record): void; + /** + * Check for and return duplicate strings inside an array + * @param stringArray Array to check for duplicates + * @returns string array of duplicates, empty if none found + */ + protected getDuplicates(stringArray: string[]): string[]; + /** + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array */ protected getBrokenMods(mods: string[]): string[]; /** @@ -57,7 +68,12 @@ export declare class PreAkiModLoader implements IModLoader { protected addMod(mod: string): Promise; protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; protected getLoadOrder(mods: Record): Record; getContainer(): DependencyContainer; diff --git a/Faupi-MunitionsExpert/server/types/models/eft/common/IGlobals.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/common/IGlobals.d.ts index 9d28dbc..81e2023 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/common/IGlobals.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/common/IGlobals.d.ts @@ -1175,5 +1175,6 @@ export interface Preset { _name: string; _parent: string; _items: Item[]; + /** Default presets have this property */ _encyclopedia?: string; } diff --git a/Faupi-MunitionsExpert/server/types/models/eft/common/ILocationBase.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/common/ILocationBase.d.ts index b1dd448..78ade9a 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/common/ILocationBase.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/common/ILocationBase.d.ts @@ -137,7 +137,7 @@ export interface BotLocationModifier { VisibleDistance: number; } export interface MinMaxBot { - WildSpawnType: string; + WildSpawnType: WildSpawnType; max: number; min: number; } @@ -195,7 +195,7 @@ export interface Wave { BotPreset: string; BotSide: string; SpawnPoints: string; - WildSpawnType: string; + WildSpawnType: WildSpawnType; isPlayers: boolean; number: number; slots_max: number; @@ -203,3 +203,7 @@ export interface Wave { time_max: number; time_min: number; } +export declare enum WildSpawnType { + ASSAULT = "assault", + MARKSMAN = "marksman" +} diff --git a/Faupi-MunitionsExpert/server/types/models/eft/common/MemberCategory.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/common/MemberCategory.d.ts deleted file mode 100644 index 3bd9a21..0000000 --- a/Faupi-MunitionsExpert/server/types/models/eft/common/MemberCategory.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -export declare enum MemberCategory { - Default = 0, - Developer = 1, - UniqueId = 2, - Trader = 4, - Group = 8, - System = 16, - ChatModerator = 32, - ChatModeratorWithPermanentBan = 64, - UnitTest = 128, - Sherpa = 256, - Emissary = 512 -} diff --git a/Faupi-MunitionsExpert/server/types/models/eft/common/tables/IBotBase.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/common/tables/IBotBase.d.ts index 0ee468e..25cb861 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/common/tables/IBotBase.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/common/tables/IBotBase.d.ts @@ -28,6 +28,8 @@ export interface IBotBase { CarExtractCounts: CarExtractCounts; SurvivorClass: SurvivorClass; WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; } export interface Info { EntryPoint: string; @@ -66,13 +68,13 @@ export interface IBan { dateTime: number; } export declare enum BanType { - Chat = 0, - RagFair = 1, - Voip = 2, - Trading = 3, - Online = 4, - Friends = 5, - ChangeNickname = 6 + CHAT = 0, + RAGFAIR = 1, + VOIP = 2, + TRADING = 3, + ONLINE = 4, + FRIENDS = 5, + CHANGE_NICKNAME = 6 } export interface Customization { Head: string; @@ -312,11 +314,11 @@ export interface Notes { export interface CarExtractCounts { } export declare enum SurvivorClass { - Unknown = 0, - Neutralizer = 1, - Marauder = 2, - Paramedic = 3, - Survivor = 4 + UNKNOWN = 0, + NEUTRALIZER = 1, + MARAUDER = 2, + PARAMEDIC = 3, + SURVIVOR = 4 } export interface Quest { qid: string; diff --git a/Faupi-MunitionsExpert/server/types/models/eft/common/tables/ITemplateItem.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/common/tables/ITemplateItem.d.ts index 23a1a14..8569e61 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/common/tables/ITemplateItem.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/common/tables/ITemplateItem.d.ts @@ -34,6 +34,7 @@ export interface Props { LootExperience?: number; ExamineExperience?: number; HideEntrails?: boolean; + InsuranceDisabled?: boolean; RepairCost?: number; RepairSpeed?: number; ExtraSizeLeft?: number; @@ -79,7 +80,7 @@ export interface Props { HasShoulderContact?: boolean; SightingRange?: number; DoubleActionAccuracyPenaltyMult?: number; - ModesCount: any; + ModesCount?: any; DurabilityBurnModificator?: number; HeatFactor?: number; CoolFactor?: number; @@ -155,7 +156,7 @@ export interface Props { RigLayoutName?: string; MaxDurability?: number; armorZone?: string[]; - armorClass: any; + armorClass?: any; mousePenalty?: number; weaponErgonomicPenalty?: number; BluntThroughput?: number; @@ -206,6 +207,7 @@ export interface Props { IsOneoff?: boolean; MustBoltBeOpennedForExternalReload?: boolean; MustBoltBeOpennedForInternalReload?: boolean; + NoFiremodeOnBoltcatch?: boolean; BoltAction?: boolean; HipAccuracyRestorationDelay?: number; HipAccuracyRestorationSpeed?: number; @@ -252,8 +254,8 @@ export interface Props { foodUseTime?: number; foodEffectType?: string; StimulatorBuffs?: string; - effects_health: any; - effects_damage: any; + effects_health?: any; + effects_damage?: any; MaximumNumberOfUsage?: number; knifeHitDelay?: number; knifeHitSlashRate?: number; diff --git a/Faupi-MunitionsExpert/server/types/models/eft/common/tables/ITrader.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/common/tables/ITrader.d.ts index f0fe2b5..37b2d61 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/common/tables/ITrader.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/common/tables/ITrader.d.ts @@ -7,7 +7,7 @@ export interface ITrader { suits?: ISuit[]; } export interface ITraderBase { - refreshAssort: boolean; + refreshTraderRagfairOffers: boolean; _id: string; avatar: string; balance_dol: number; @@ -58,7 +58,7 @@ export interface Repair { quality: string; } export interface ITraderAssort { - nextResupply?: number; + nextResupply: number; items: Item[]; barter_scheme: Record; loyal_level_items: Record; @@ -67,6 +67,7 @@ export interface IBarterScheme { count: number; _tpl: string; onlyFunctional?: boolean; + sptQuestLocked?: boolean; } export interface ISuit { _id: string; diff --git a/Faupi-MunitionsExpert/server/types/models/eft/health/Effect.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/health/Effect.d.ts index 2f0adac..7eb3ffc 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/health/Effect.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/health/Effect.d.ts @@ -1,5 +1,5 @@ export declare enum Effect { - Fracture = "Fracture", - LightBleeding = "LightBleeding", - HeavyBleeding = "HeavyBleeding" + FRACTURE = "Fracture", + LIGHT_BLEEDING = "LightBleeding", + HEAVY_BLEEDING = "HeavyBleeding" } diff --git a/Faupi-MunitionsExpert/server/types/models/eft/health/IOffraidHealRequestData.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/health/IOffraidHealRequestData.d.ts index c242300..26b02bd 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/health/IOffraidHealRequestData.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/health/IOffraidHealRequestData.d.ts @@ -7,12 +7,12 @@ export interface IOffraidHealRequestData extends IBaseInteractionRequestData { time: number; } export declare enum BodyPart { - Head = 0, - Chest = 1, - Stomach = 2, - LeftArm = 3, - RightArm = 4, - LeftLeg = 5, - RightLeg = 6, - Common = 7 + HEAD = "Head", + CHEST = "Chest", + STOMACH = "Stomach", + LEFT_ARM = "LeftArm", + RIGHT_ARM = "RightArm", + LEFT_LEG = "LeftLeg", + RIGHT_LEG = "RightLeg", + COMMON = "Common" } diff --git a/Faupi-MunitionsExpert/server/types/models/eft/hideout/HideoutAreasEnum.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/hideout/HideoutAreasEnum.d.ts deleted file mode 100644 index 10f851b..0000000 --- a/Faupi-MunitionsExpert/server/types/models/eft/hideout/HideoutAreasEnum.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -export declare enum HideoutAreasEnum { - NOTSET = -1, - VENTS = 0, - SECURITY = 1, - LAVATORY = 2, - STASH = 3, - GENERATOR = 4, - HEATING = 5, - WATER_COLLECTOR = 6, - MEDSTATION = 7, - NUTRITION_UNIT = 8, - REST_SPACE = 9, - WORKBENCH = 10, - INTEL_CENTER = 11, - SHOOTING_RANGE = 12, - LIBRARY = 13, - SCAV_CASE = 14, - ILLUMINATION = 15, - PLACE_OF_FAME = 16, - AIR_FILTERING = 17, - SOLAR_POWER = 18, - BOOZE_GENERATOR = 19, - BITCOIN_FARM = 20, - CHRISTMAS_TREE = 21 -} diff --git a/Faupi-MunitionsExpert/server/types/models/eft/notifier/INotifier.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/notifier/INotifier.d.ts index 8c48260..b248636 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/notifier/INotifier.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/notifier/INotifier.d.ts @@ -1,9 +1,9 @@ export interface INotifierChannel { - "server": string; - "channel_id": string; - "url": string; - "notifierServer": string; - "ws": string; + server: string; + channel_id: string; + url: string; + notifierServer: string; + ws: string; } import { Message } from "../profile/IAkiProfile"; export interface INotification { diff --git a/Faupi-MunitionsExpert/server/types/models/eft/ragfair/IRagfairOffer.d.ts b/Faupi-MunitionsExpert/server/types/models/eft/ragfair/IRagfairOffer.d.ts index 63f655e..141b605 100644 --- a/Faupi-MunitionsExpert/server/types/models/eft/ragfair/IRagfairOffer.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/eft/ragfair/IRagfairOffer.d.ts @@ -15,6 +15,8 @@ export interface IRagfairOffer { name?: string; shortName?: string; loyaltyLevel: number; + buyRestrictionMax?: number; + buyRestrictionCurrent?: number; locked: boolean; unlimitedCount: boolean; summaryCost: number; diff --git a/Faupi-MunitionsExpert/server/types/models/enums/AmmoTypes.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/AmmoTypes.d.ts index b52ddcf..254b410 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/AmmoTypes.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/AmmoTypes.d.ts @@ -23,7 +23,7 @@ export declare enum Ammo762x54 { BT_GZH = "5e023d34e8a400319a28ed44", BS_GZH = "5e023d48186a883be655e551" } -export declare enum Ammo338Lapua { +export declare enum Ammo86x70 { TAC_X = "5fc382b6d6fa9c00c571bbc3", UCW = "5fc382c1016cce60e8341b20", AP = "5fc382a9d724d907e2077dab", @@ -85,13 +85,13 @@ export declare enum Ammo9x21 { PE_GZH = "5a26ac06c4a282000c5a90a8", BT_GZH = "5a26ac0ec4a28200741e1e18" } -export declare enum Ammo357Mag { +export declare enum Ammo9x33R { FMJ = "62330b3ed4dc74626d570b95", HOLLOW_POINT = "62330bfadc5883093563729b", SOFT_POINT = "62330c40bdd19b369e1e53d1", JACKET_HP = "62330c18744e5e31df12f516" } -export declare enum Ammo45ACP { +export declare enum Ammo1143x23ACP { MATCH_FMJ = "5e81f423763d9f754677bf2e", HYDRA_SHOK = "5efb0fc6aeb21837e749c801", LASERMATCH_FMJ = "5efb0d4f4bc50b58e81710f3", @@ -126,7 +126,7 @@ export declare enum Ammo556x45 { MK_318_MOD_0_SOST = "60194943740c5d77f6705eea", SSA_AP = "601949593ae8f707c4608daa" } -export declare enum Ammo300Blackout { +export declare enum Ammo762x35 { M62_TRACER = "619636be6db0f2477964e710", BCP_FMJ = "5fbe3ffdf8b6a877a729ea82", AP = "5fd20ff893a8961fc660a954", diff --git a/Faupi-MunitionsExpert/server/types/models/enums/BaseClasses.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/BaseClasses.d.ts index e733bca..36ebc71 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/BaseClasses.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/BaseClasses.d.ts @@ -25,6 +25,7 @@ export declare enum BaseClasses { SIGHTS = "5448fe7a4bdc2d6f028b456b", MEDS = "543be5664bdc2dd4348b4569", MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", KEY = "543be5e94bdc2df1348b4568", KEY_MECHANICAL = "5c99f98d86f7745c314214b3", KEYCARD = "5c164d2286f774194c5e69fa", @@ -66,8 +67,8 @@ export declare enum BaseClasses { LUBRICANT = "57864e4c24597754843f8723", BATTERY = "57864ee62459775490116fc1", ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", - REFLEX_SIGHT = "55818ad54bdc2ddc698b4569", TACTICAL_COMBO = "55818b164bdc2ddc698b456c", + FLASHLIGHT = "55818b084bdc2d5b648b4571", MAGAZINE = "5448bc234bdc2d3c308b4569", LIGHT_LASER = "55818b0e4bdc2dde698b456e", FLASH_HIDER = "550aa4bf4bdc2dd6348b456b", diff --git a/Faupi-MunitionsExpert/server/types/models/enums/BotAmount.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/BotAmount.d.ts index d0e1df1..9ef9cab 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/BotAmount.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/BotAmount.d.ts @@ -1,7 +1,7 @@ export declare enum BotAmount { - AsOnline = "AsOnline", - Low = "Low", - Medium = "Medium", - High = "High", - Horde = "Horde" + AS_ONLINE = "AsOnline", + LOW = "Low", + MEDIUM = "Medium", + HIGH = "High", + HORDE = "Horde" } diff --git a/Faupi-MunitionsExpert/server/types/models/enums/BotDifficulty.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/BotDifficulty.d.ts index c901bcf..80e45ad 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/BotDifficulty.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/BotDifficulty.d.ts @@ -1,8 +1,8 @@ export declare enum BotDifficulty { - AsOnline = "AsOnline", - Easy = "Easy", - Medium = "Medium", - Hard = "Hard", - Impossible = "Impossible", - Random = "Random" + AS_ONLINE = "AsOnline", + EASY = "Easy", + MEDIUM = "Medium", + HARD = "Hard", + IMPOSSIBLE = "Impossible", + RANDOM = "Random" } diff --git a/Faupi-MunitionsExpert/server/types/models/enums/ConfigTypes.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/ConfigTypes.d.ts index 61d6f99..468ece5 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/ConfigTypes.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/ConfigTypes.d.ts @@ -8,6 +8,7 @@ export declare enum ConfigTypes { IN_RAID = "aki-inraid", INSURANCE = "aki-insurance", INVENTORY = "aki-inventory", + ITEM = "aki-item", LOCALE = "aki-locale", LOCATION = "aki-location", MATCH = "aki-match", diff --git a/Faupi-MunitionsExpert/server/types/models/enums/ELocationName.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/ELocationName.d.ts index b56cc08..7ae7caa 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/ELocationName.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/ELocationName.d.ts @@ -1,5 +1,6 @@ export declare enum ELocationName { FACTORY_DAY = "factory4_day", + FACTORY_NIGHT = "factory4_night", BIGMAP = "bigmap", WOODS = "Woods", SHORELINE = "Shoreline", diff --git a/Faupi-MunitionsExpert/server/types/models/enums/MemberCategory.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/MemberCategory.d.ts index 3bd9a21..a81380e 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/MemberCategory.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/MemberCategory.d.ts @@ -1,13 +1,13 @@ export declare enum MemberCategory { - Default = 0, - Developer = 1, - UniqueId = 2, - Trader = 4, - Group = 8, - System = 16, - ChatModerator = 32, - ChatModeratorWithPermanentBan = 64, - UnitTest = 128, - Sherpa = 256, - Emissary = 512 + DEFAULT = 0, + DEVELOPER = 1, + UNIQUE_ID = 2, + TRADER = 4, + GROUP = 8, + SYSTEM = 16, + CHAT_MODERATOR = 32, + CHAT_MODERATOR_WITH_PERMANENT_BAN = 64, + UNIT_TEST = 128, + SHERPA = 256, + EMISSARY = 512 } diff --git a/Faupi-MunitionsExpert/server/types/models/enums/QuestRewardType.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/QuestRewardType.d.ts index 1d3db86..16f7e39 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/QuestRewardType.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/QuestRewardType.d.ts @@ -1,8 +1,8 @@ export declare enum QuestRewardType { - Skill = "Skill", - Experience = "Experience", - TraderStanding = "TraderStanding", - TraderUnlock = "TraderUnlock", - Item = "Item", - AssortmentUnlock = "AssortmentUnlock" + SKILL = "Skill", + EXPERIENCE = "Experience", + TRADER_STANDING = "TraderStanding", + TRADER_UNLOCK = "TraderUnlock", + ITEM = "Item", + ASSORTMENT_UNLOCK = "AssortmentUnlock" } diff --git a/Faupi-MunitionsExpert/server/types/models/enums/RaidMode.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/RaidMode.d.ts index c5a8cff..e20cf3f 100644 --- a/Faupi-MunitionsExpert/server/types/models/enums/RaidMode.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/enums/RaidMode.d.ts @@ -1,5 +1,5 @@ export declare enum RaidMode { - Online = "Online", - Local = "Local", - Coop = "Coop" + ONLINE = "Online", + LOCAL = "Local", + COOP = "Coop" } diff --git a/Faupi-MunitionsExpert/server/types/models/enums/WeaponTypes.d.ts b/Faupi-MunitionsExpert/server/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/Faupi-MunitionsExpert/server/types/models/external/mod.d.ts b/Faupi-MunitionsExpert/server/types/models/external/mod.d.ts deleted file mode 100644 index ecef460..0000000 --- a/Faupi-MunitionsExpert/server/types/models/external/mod.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DependencyContainer } from "./tsyringe"; -export interface IMod { - load: (container: DependencyContainer) => void; - delayedLoad: (container: DependencyContainer) => void; -} diff --git a/Faupi-MunitionsExpert/server/types/models/spt/bots/BotLootCache.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/bots/BotLootCache.d.ts index e185315..aedf7b0 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/bots/BotLootCache.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/bots/BotLootCache.d.ts @@ -11,13 +11,13 @@ export declare class BotLootCache { grenadeItems: ITemplateItem[]; } export declare enum LootCacheType { - Special = "Special", - Backpack = "Backpack", - Pocket = "Pocket", - Vest = "Vest", - Combined = "Combined", - HealingItems = "HealingItems", - DrugItems = "DrugItems", - StimItems = "StimItems", - GrenadeItems = "GrenadeItems" + SPECIAL = "Special", + BACKPACK = "Backpack", + POCKET = "Pocket", + VEST = "Vest", + COMBINED = "Combined", + HEALING_ITEMS = "HealingItems", + DRUG_ITEMS = "DrugItems", + STIM_ITEMS = "StimItems", + GRENADE_ITEMS = "GrenadeItems" } diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/IAirdropConfig.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/IAirdropConfig.d.ts index f4aee89..3edcbdd 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/config/IAirdropConfig.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/IAirdropConfig.d.ts @@ -1,14 +1,14 @@ +import { MinMax } from "../../common/MinMax"; import { IBaseConfig } from "./IBaseConfig"; export interface IAirdropConfig extends IBaseConfig { kind: "aki-airdrop"; airdropChancePercent: AirdropChancePercent; - airdropMinOpenHeight: number; - airdropMaxOpenHeight: number; planeMinFlyHeight: number; planeMaxFlyHeight: number; planeVolume: number; airdropMinStartTimeSeconds: number; airdropMaxStartTimeSeconds: number; + loot: AirdropLoot; } export interface AirdropChancePercent { bigmap: number; @@ -18,3 +18,13 @@ export interface AirdropChancePercent { interchange: number; reserve: number; } +export interface AirdropLoot { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; +} diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/IBotConfig.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/IBotConfig.d.ts index e171087..af8ceba 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/config/IBotConfig.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/IBotConfig.d.ts @@ -1,17 +1,31 @@ import { MinMax } from "../../common/MinMax"; import { IBaseConfig } from "./IBaseConfig"; +import { IBotDurability } from "./IBotDurability"; +import { IPmcConfig } from "./IPmcConfig"; export interface IBotConfig extends IBaseConfig { kind: "aki-bot"; + /** How many variants of each bot should be generated on raid start */ presetBatch: PresetBatch; + /** What bot types should be classified as bosses */ bosses: string[]; - durability: Durability; + /** Control weapon/armor durability min/max values for each bot type */ + durability: IBotDurability; + /** Control the weighting of how expensive an average loot item is on a PMC or Scav */ lootNValue: LootNvalue; + /** Control what bots are added to a bots revenge list key: bottype, value: bottypes to revenge on seeing their death */ revenge: Record; - pmc: PmcConfig; + /** PMC bot specific config settings */ + pmc: IPmcConfig; + /** Control how many items are allowed to spawn on a bot + * key: bottype, value: */ itemSpawnLimits: Record>; - equipment: Record; + /** Blacklist/whitelist items on a bot */ + equipment: Record; + /** Show a bots botType value after their name */ showTypeInNickname: boolean; - maxBotCap: number; + /** Max number of bots that can be spawned in a raid at any one time */ + maxBotCap: Record; + /** How many stacks of secret ammo should a bot have in its bot secure container */ secureContainerAmmoStackCount: number; } export interface PresetBatch { @@ -44,79 +58,23 @@ export interface PresetBatch { test: number; exUsec: number; } -export interface Durability { - default: DefaultDurability; - pmc: PmcDurability; - boss: BotDurability; - follower: BotDurability; - assault: BotDurability; - cursedassault: BotDurability; - marksman: BotDurability; - pmcbot: BotDurability; - exusec: BotDurability; - sectantpriest: BotDurability; - sectantwarrior: BotDurability; -} -export interface DefaultDurability { - armor: DefaultArmor; - weapon: WeaponDurability; -} -export interface DefaultArmor { - maxDelta: number; - minDelta: number; -} -export interface WeaponDurability { - lowestMax: number; - highestMax: number; - maxDelta: number; - minDelta: number; -} -export interface PmcDurability { - armor: PmcDurabilityArmor; - weapon: WeaponDurability; -} -export interface PmcDurabilityArmor { - lowestMaxPercent: number; - highestMaxPercent: number; - maxDelta: number; - minDelta: number; -} -export interface BotDurability { - armor: ArmorDurability; - weapon: WeaponDurability; -} -export interface ArmorDurability { - maxDelta: number; - minDelta: number; -} export interface LootNvalue { scav: number; pmc: number; } -export interface PmcConfig { - dynamicLoot: PmcDynamicLoot; - difficulty: string; - looseWeaponInBackpackChancePercent: number; - looseWeaponInBackpackLootMinMax: MinMax; - isUsec: number; - chanceSameSideIsHostilePercent: number; - usecType: string; - bearType: string; - maxBackpackLootTotalRub: number; - maxPocketLootTotalRub: number; - maxVestLootTotalRub: number; - convertIntoPmcChance: Record; - enemyTypes: string[]; -} -export interface PmcDynamicLoot { - whitelist: string[]; - blacklist: string[]; - moneyStackLimits: Record; -} -export interface Equipment { +export interface EquipmentFilters { + weaponModLimits: ModLimits; + randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; blacklist: EquipmentFilterDetails[]; whitelist: EquipmentFilterDetails[]; } +export interface ModLimits { + /** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */ + scopeLimit?: number; + /** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */ + lightLaserLimit?: number; +} export interface EquipmentFilterDetails { levelRange: MinMax; equipment: Record; diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/IBotDurability.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/IBotDurability.d.ts new file mode 100644 index 0000000..38a47cc --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/IBotDurability.d.ts @@ -0,0 +1,47 @@ +export interface IBotDurability { + default: DefaultDurability; + pmc: PmcDurability; + boss: BotDurability; + follower: BotDurability; + assault: BotDurability; + cursedassault: BotDurability; + marksman: BotDurability; + pmcbot: BotDurability; + exusec: BotDurability; + gifter: BotDurability; + sectantpriest: BotDurability; + sectantwarrior: BotDurability; +} +/** Durability values to be used when a more specific bot type cant be found */ +export interface DefaultDurability { + armor: DefaultArmor; + weapon: WeaponDurability; +} +export interface DefaultArmor { + maxDelta: number; + minDelta: number; +} +export interface WeaponDurability { + lowestMax: number; + highestMax: number; + maxDelta: number; + minDelta: number; +} +export interface PmcDurability { + armor: PmcDurabilityArmor; + weapon: WeaponDurability; +} +export interface PmcDurabilityArmor { + lowestMaxPercent: number; + highestMaxPercent: number; + maxDelta: number; + minDelta: number; +} +export interface BotDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface ArmorDurability { + maxDelta: number; + minDelta: number; +} diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/IHideoutConfig.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/IHideoutConfig.d.ts index 36d6246..f232052 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/config/IHideoutConfig.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/IHideoutConfig.d.ts @@ -2,6 +2,10 @@ import { IBaseConfig } from "./IBaseConfig"; export interface IHideoutConfig extends IBaseConfig { kind: "aki-hideout"; runIntervalSeconds: number; - fuelDrainRateMultipler: number; hoursForSkillCrafting: number; + generatorSpeedWithoutFuel: number; + generatorFuelFlowRate: number; + airFilterUnitFlowRate: number; + /** SEE HIDEOUTHELPER BEFORE CHANGING CONFIG */ + gpuBoostRate: number; } diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/IItemConfig.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/IItemConfig.d.ts new file mode 100644 index 0000000..5ecccc2 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/IItemConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IItemConfig extends IBaseConfig { + kind: "aki-item"; + blacklist: string[]; +} diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/IPmcConfig.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/IPmcConfig.d.ts new file mode 100644 index 0000000..9db2ba1 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/IPmcConfig.d.ts @@ -0,0 +1,26 @@ +import { MinMax } from "../../common/MinMax"; +export interface IPmcConfig { + dynamicLoot: DynamicLoot; + useDifficultyOverride: boolean; + difficulty: string; + looseWeaponInBackpackChancePercent: number; + looseWeaponInBackpackLootMinMax: MinMax; + isUsec: number; + chanceSameSideIsHostilePercent: number; + /** key: location, value: type for usec/bear */ + pmcType: Record; + maxBackpackLootTotalRub: number; + maxPocketLootTotalRub: number; + maxVestLootTotalRub: number; + convertIntoPmcChance: Record; + enemyTypes: string[]; +} +export interface PmcTypes { + usec: string; + bear: string; +} +export interface DynamicLoot { + whitelist: string[]; + blacklist: string[]; + moneyStackLimits: Record; +} diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/IQuestConfig.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/IQuestConfig.d.ts index be4a97b..45c9aae 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/config/IQuestConfig.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/IQuestConfig.d.ts @@ -4,6 +4,8 @@ export interface IQuestConfig extends IBaseConfig { kind: "aki-quest"; redeemTime: number; repeatableQuests: IRepeatableQuestConfig[]; + bearOnlyQuests: string[]; + usecOnlyQuests: string[]; } export interface IRepeatableQuestConfig { name: string; @@ -15,6 +17,10 @@ export interface IRepeatableQuestConfig { locations: Record; traderWhitelist: ITraderWhitelist[]; questConfig: IQuestConfig; + /** Item base types to block when generating rewards */ + rewardBaseTypeBlacklist: string[]; + /** Item tplIds to ignore when generating rewards */ + rewardBlacklist: string[]; } export interface IRewardScaling { levels: number[]; diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/IRagfairConfig.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/IRagfairConfig.d.ts index c24e617..c1b8763 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/config/IRagfairConfig.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/IRagfairConfig.d.ts @@ -12,6 +12,7 @@ export interface Sell { chance: Chance; time: Time; reputation: Reputation; + simulatedSellHours: number; } export interface Chance { base: number; @@ -27,11 +28,18 @@ export interface Reputation { gain: number; loss: number; } +export declare class OfferAdjustment { + maxPriceDifferenceBelowHandbookPercent: number; + handbookPriceMultipier: number; + priceThreshholdRub: number; +} export interface Dynamic { + offerAdjustment: OfferAdjustment; expiredOfferThreshold: number; offerItemCount: MinMax; price: MinMax; presetPrice: MinMax; + showDefaultPresetsOnly: boolean; endTimeSeconds: MinMax; condition: Condition; stackablePercent: MinMax; diff --git a/Faupi-MunitionsExpert/server/types/models/spt/config/ITraderConfig.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/config/ITraderConfig.d.ts index c8e8044..6b1c1e3 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/config/ITraderConfig.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/config/ITraderConfig.d.ts @@ -12,8 +12,10 @@ export interface UpdateTime { seconds: number; } export interface FenceConfig { + partialRefreshTimeSeconds: number; + partialRefreshChangePercent: number; assortSize: number; - maxPresetsCount: number; + maxPresetsPercent: number; presetPriceMult: number; blacklist: string[]; } diff --git a/Faupi-MunitionsExpert/server/types/models/spt/helpers/Traders.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/helpers/Traders.d.ts deleted file mode 100644 index e935d29..0000000 --- a/Faupi-MunitionsExpert/server/types/models/spt/helpers/Traders.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare const enum Traders { - PRAPOR = "54cb50c76803fa8b248b4571", - THERAPIST = "54cb57776803fa99248b456e", - FENCE = "579dc571d53a0658a154fbec", - SKIER = "58330581ace78e27b8b10cee", - PEACEKEEPER = "5935c25fb3acc3127c3d8cd9", - MECHANIC = "5a7c2eca46aef81a7ca2145d", - RAGMAN = "5ac3b934156ae10c4430e83c", - JAEGER = "5c0647fdd443bc2504c2d371" -} diff --git a/Faupi-MunitionsExpert/server/types/models/spt/location/AirDropLootItem.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/location/AirDropLootItem.d.ts new file mode 100644 index 0000000..da791ff --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/models/spt/location/AirDropLootItem.d.ts @@ -0,0 +1,6 @@ +export declare class AirDropLootItem { + id: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/Faupi-MunitionsExpert/server/types/models/spt/logging/LogBackgroundColor.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/logging/LogBackgroundColor.d.ts index 87e08a9..1dd369b 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/logging/LogBackgroundColor.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/logging/LogBackgroundColor.d.ts @@ -1,11 +1,11 @@ export declare enum LogBackgroundColor { - default = "", - black = "blackBG", - red = "redBG", - green = "greenBG", - yellow = "yellowBG", - blue = "blueBG", - magenta = "magentaBG", - cyan = "cyanBG", - white = "whiteBG" + DEFAULT = "", + BLACK = "blackBG", + RED = "redBG", + GREEN = "greenBG", + YELLOW = "yellowBG", + BLUE = "blueBG", + MAGENTA = "magentaBG", + CYAN = "cyanBG", + WHITE = "whiteBG" } diff --git a/Faupi-MunitionsExpert/server/types/models/spt/logging/LogTextColor.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/logging/LogTextColor.d.ts index 7147ae3..6c7abf3 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/logging/LogTextColor.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/logging/LogTextColor.d.ts @@ -1,11 +1,11 @@ export declare enum LogTextColor { - black = "black", - red = "red", - green = "green", - yellow = "yellow", - blue = "blue", - magenta = "magenta", - cyan = "cyan", - white = "white", - gray = "" + BLACK = "black", + RED = "red", + GREEN = "green", + YELLOW = "yellow", + BLUE = "blue", + MAGENTA = "magenta", + CYAN = "cyan", + WHITE = "white", + GRAY = "" } diff --git a/Faupi-MunitionsExpert/server/types/models/spt/server/ILocaleBase.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/server/ILocaleBase.d.ts index 8887c06..6e20b89 100644 --- a/Faupi-MunitionsExpert/server/types/models/spt/server/ILocaleBase.d.ts +++ b/Faupi-MunitionsExpert/server/types/models/spt/server/ILocaleBase.d.ts @@ -13,10 +13,10 @@ export interface ILocaleGlobalBase { season: Record; customization: Record; repeatableQuest: Record; - templates: ILocaleTemplateBase; - locations: ILocaleLocationsBase; - banners: ILocaleBannersBase; - trading: ILocaleTradingBase; + templates: Record; + locations: Record; + banners: Record; + trading: Record; } export interface ILocaleQuest { name: string; @@ -31,23 +31,11 @@ export interface ILocaleQuest { export interface ILocalePreset { Name: string; } -export interface ILocaleTemplateBase { - templates: Record; -} -export interface ILocaleLocationsBase { - locations: Record; -} -export interface ILocaleBannersBase { - locations: Record; -} export interface ILocaleProps { Name: string; ShortName: string; Description: string; } -export interface ILocaleTradingBase { - locations: Record; -} export interface ILocaleTradingProps { FullName: string; FirstName: string; diff --git a/Faupi-MunitionsExpert/server/types/models/spt/services/LootItem.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/services/LootItem.d.ts new file mode 100644 index 0000000..acb7606 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/models/spt/services/LootItem.d.ts @@ -0,0 +1,6 @@ +export declare class LootItem { + id?: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/Faupi-MunitionsExpert/server/types/models/spt/services/LootRequest.d.ts b/Faupi-MunitionsExpert/server/types/models/spt/services/LootRequest.d.ts new file mode 100644 index 0000000..1da8770 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/models/spt/services/LootRequest.d.ts @@ -0,0 +1,11 @@ +import { MinMax } from "../../common/MinMax"; +export declare class LootRequest { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; +} diff --git a/Faupi-MunitionsExpert/server/types/servers/DatabaseServer.d.ts b/Faupi-MunitionsExpert/server/types/servers/DatabaseServer.d.ts index aa152d0..b3d29e9 100644 --- a/Faupi-MunitionsExpert/server/types/servers/DatabaseServer.d.ts +++ b/Faupi-MunitionsExpert/server/types/servers/DatabaseServer.d.ts @@ -2,5 +2,5 @@ import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; export declare class DatabaseServer { protected tableData: IDatabaseTables; getTables(): IDatabaseTables; - setTables(any: any): void; + setTables(tableData: IDatabaseTables): void; } diff --git a/Faupi-MunitionsExpert/server/types/servers/RagfairServer.d.ts b/Faupi-MunitionsExpert/server/types/servers/RagfairServer.d.ts index bc86cdb..c93864b 100644 --- a/Faupi-MunitionsExpert/server/types/servers/RagfairServer.d.ts +++ b/Faupi-MunitionsExpert/server/types/servers/RagfairServer.d.ts @@ -1,4 +1,6 @@ import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { TraderAssortHelper } from "../helpers/TraderAssortHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; @@ -12,11 +14,18 @@ export declare class RagfairServer { protected ragfairOfferService: RagfairOfferService; protected ragfairCategoriesService: RagfairCategoriesService; protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected traderHelper: TraderHelper; + protected traderAssortHelper: TraderAssortHelper; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; - constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, configServer: ConfigServer); + constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, traderHelper: TraderHelper, traderAssortHelper: TraderAssortHelper, configServer: ConfigServer); load(): void; update(): void; + /** + * Get traders who need to be periodically refreshed + * @returns string array of traders + */ + protected getUpdateableTraders(): string[]; getAllCategories(): Record; getBespokeCategories(offers: IRagfairOffer[]): Record; /** diff --git a/Faupi-MunitionsExpert/server/types/services/BotEquipmentFilterService.d.ts b/Faupi-MunitionsExpert/server/types/services/BotEquipmentFilterService.d.ts index e49645b..632f961 100644 --- a/Faupi-MunitionsExpert/server/types/services/BotEquipmentFilterService.d.ts +++ b/Faupi-MunitionsExpert/server/types/services/BotEquipmentFilterService.d.ts @@ -1,12 +1,12 @@ import { IBotType } from "../models/eft/common/tables/IBotType"; -import { Equipment, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; +import { EquipmentFilters, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; export declare class BotEquipmentFilterService { protected logger: ILogger; protected configServer: ConfigServer; protected botConfig: IBotConfig; - protected botEquipmentFilterlists: Record; + protected botEquipmentFilterlists: Record; constructor(logger: ILogger, configServer: ConfigServer); /** * Filter a bots data to exclude equipment and cartridges defines in the botConfig @@ -22,7 +22,7 @@ export declare class BotEquipmentFilterService { * @param playerLevel Level of the player * @returns EquipmentBlacklistDetails object */ - protected getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; + getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; /** * Get the whitelist for a specific bot type that's within the players level * @param botRole Bot type diff --git a/Faupi-MunitionsExpert/server/types/services/BotGenerationCacheService.d.ts b/Faupi-MunitionsExpert/server/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..670c583 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,52 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected botHelper: BotHelper; + protected storedBots: IBotBase[]; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore + */ + storeBots(botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param role role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(role: string): IBotBase[]; + /** + * Find a bot by its index from cache + * @param indexOfBotToReturn index to find bot by + * @returns bot profile + */ + protected getBotFromCache(indexOfBotToReturn: number): IBotBase; + /** + * Remove bot profile by index from cache + * @param indexOfBotToReturn Index of bot profile to remove + */ + protected removeBotFromCache(indexOfBotToReturn: number): void; + /** + * Get index of bot profile that matches criteria + * @param role role of bot we want + * @param getPmc is requested bot a pmc + * @returns index of found bot + */ + protected getIndexOfBotToReturn(role: string, getPmc: boolean): number; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have bots + * @returns true if empty + */ + cacheIsEmpty(): boolean; +} diff --git a/Faupi-MunitionsExpert/server/types/services/BotLootCacheService.d.ts b/Faupi-MunitionsExpert/server/types/services/BotLootCacheService.d.ts index cc71eee..00ffb9c 100644 --- a/Faupi-MunitionsExpert/server/types/services/BotLootCacheService.d.ts +++ b/Faupi-MunitionsExpert/server/types/services/BotLootCacheService.d.ts @@ -34,6 +34,17 @@ export declare class BotLootCacheService { * @param isPmc Is the bot a PMC (alteres what loot is cached) */ protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; /** * Ammo/grenades have this property * @param props diff --git a/Faupi-MunitionsExpert/server/types/services/FenceService.d.ts b/Faupi-MunitionsExpert/server/types/services/FenceService.d.ts index 79058c6..23fbf52 100644 --- a/Faupi-MunitionsExpert/server/types/services/FenceService.d.ts +++ b/Faupi-MunitionsExpert/server/types/services/FenceService.d.ts @@ -11,29 +11,109 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { ItemFilterService } from "./ItemFilterService"; +/** + * Handle actions surrounding Fence + * e.g. generating or refreshing assorts / get next refresh time + */ export declare class FenceService { protected logger: ILogger; protected hashUtil: HashUtil; protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; protected randomUtil: RandomUtil; protected databaseServer: DatabaseServer; protected handbookHelper: HandbookHelper; protected itemHelper: ItemHelper; protected presetHelper: PresetHelper; + protected itemFilterService: ItemFilterService; protected configServer: ConfigServer; protected fenceAssort: ITraderAssort; protected traderConfig: ITraderConfig; - constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, configServer: ConfigServer); + protected nextMiniRefreshTimestamp: number; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, itemFilterService: ItemFilterService, configServer: ConfigServer); protected setFenceAssort(fenceAssort: ITraderAssort): void; - getFenceAssorts(): ITraderAssort; - hasExpiredCache(refreshAssort: boolean): boolean; - generateFenceAssortCache(pmcData: IPmcData): void; /** - * Get the fence level the passed in profile has + * Get assorts player can purchase + * Adjust prices based on fence level of player + * @param pmcProfile Player profile + * @returns ITraderAssort + */ + getFenceAssorts(pmcProfile: IPmcData): ITraderAssort; + /** + * Get fence assorts with no price adjustments based on fence rep + * @returns ITraderAssort + */ + getRawFenceAssorts(): ITraderAssort; + /** + * Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json + * @returns true if it needs a partial refresh + */ + needsPartialRefresh(): boolean; + /** + * Replace a percentage of fence assorts with freshly generated items + */ + performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; + /** + * Choose an item (not mod) at random and remove from assorts + */ + protected removeRandomItemFromAssorts(): void; + /** + * Get an integer rounded count of items to replace based on percentrage from traderConfig value + * @param totalItemCount total item count + * @returns rounded int of items to replace + */ + protected getCountOfItemsToReplace(totalItemCount: number): number; + /** + * Get the count of items fence offers + * @returns number + */ + getOfferCount(): number; + /** + * Create a trader assort for fence + */ + generateFenceAssortCache(): void; + /** + * Create skeleton to hold assort items + * @returns ITraderAssort object + */ + protected createBaseTraderAssortItem(): ITraderAssort; + /** + * Hydrate result parameter object with generated assorts + * @param assortCount Number of assorts to generate + * @param assorts object to add assorts to + */ + protected createAssorts(assortCount: number, assorts: ITraderAssort): void; + /** + * Get the next update timestamp for fence + * @returns future timestamp + */ + getNextFenceUpdateTimestamp(): number; + /** + * Get fence refresh time in seconds + */ + protected getFenceRefreshTime(): number; + /** + * Get fence level the passed in profile has * @param pmcData Player profile - * @returns FenceLevel + * @returns FenceLevel object */ getFenceInfo(pmcData: IPmcData): FenceLevel; + /** + * Remove an assort from fence by id + * @param assortIdToRemove assort id to remove from fence assorts + */ removeFenceOffer(assortIdToRemove: string): void; - updateFenceOffers(pmcData: IPmcData): void; } diff --git a/Faupi-MunitionsExpert/server/types/services/InsuranceService.d.ts b/Faupi-MunitionsExpert/server/types/services/InsuranceService.d.ts index 171bf10..6be8a2f 100644 --- a/Faupi-MunitionsExpert/server/types/services/InsuranceService.d.ts +++ b/Faupi-MunitionsExpert/server/types/services/InsuranceService.d.ts @@ -2,6 +2,7 @@ import { DialogueHelper } from "../helpers/DialogueHelper"; import { SecureContainerHelper } from "../helpers/SecureContainerHelper"; import { TraderHelper } from "../helpers/TraderHelper"; import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; import { Item } from "../models/eft/common/tables/IItem"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; @@ -44,8 +45,22 @@ export declare class InsuranceService { * @param mapId Id of the map player died/exited that caused the insurance to be issued on */ sendInsuredItems(pmcData: IPmcData, sessionID: string, mapId: string): void; + /** + * Store lost gear post-raid inside profile + * @param pmcData player profile to store gear in + * @param offraidData post-raid request object + * @param preRaidGear gear player wore prior to raid + * @param sessionID Session id + */ storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; - protected addGearToSend(pmcData: IPmcData, insuredItem: any, actualItem: any, sessionID: string): any; + /** + * Add gear item to InsuredItems array in player profile + * @param pmcData profile to store item in + * @param insuredItem Item to store in profile + * @param actualItem item to store + * @param sessionID Session id + */ + protected addGearToSend(pmcData: IPmcData, insuredItem: InsuredItem, actualItem: Item, sessionID: string): void; getPremium(pmcData: IPmcData, inventoryItem: Item, traderId: string): number; } diff --git a/Faupi-MunitionsExpert/server/types/services/ItemFilterService.d.ts b/Faupi-MunitionsExpert/server/types/services/ItemFilterService.d.ts new file mode 100644 index 0000000..c9c8ef3 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/services/ItemFilterService.d.ts @@ -0,0 +1,24 @@ +import { IItemConfig } from "../models/spt/config/IItemConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** Centralise the handling of blacklisting items, uses blacklist found in config/item.json */ +export declare class ItemFilterService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected blacklist: string[]; + protected itemConfig: IItemConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Check if the provided template id is blacklisted in config/item.json + * @param tpl template id + * @returns true if blacklisted + */ + isItemBlacklisted(tpl: string): boolean; + /** + * Return every template id blacklisted in config/item.json + * @returns string array of blacklisted tempalte ids + */ + getBlacklistedItems(): string[]; +} diff --git a/Faupi-MunitionsExpert/server/types/services/PmcAiService.d.ts b/Faupi-MunitionsExpert/server/types/services/PmcAiService.d.ts new file mode 100644 index 0000000..0690f1f --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/services/PmcAiService.d.ts @@ -0,0 +1,27 @@ +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +/** Storing/retreving pmcRoles set at the start of a raid - its done at that point as we know what location the player is heading to */ +export declare class PmcAiService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected usecRole: string; + protected bearRole: string; + constructor(logger: ILogger, configServer: ConfigServer); + /** + * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) + * @param pmcSide eft side (usec/bear) + * @returns pmc side as defined in config + */ + getPmcRole(pmcSide: "usec" | "bear" | string): string; + /** + * Set the roles for pmcs + * @param location map location to look up and use as pmc types + */ + setPmcRolesByLocation(location: string): void; + /** + * Clear the saved role from usec/bear PMCs + */ + clearPmcRoles(): void; +} diff --git a/Faupi-MunitionsExpert/server/types/services/ProfileFixerService.d.ts b/Faupi-MunitionsExpert/server/types/services/ProfileFixerService.d.ts index ed1dec7..9cb5a38 100644 --- a/Faupi-MunitionsExpert/server/types/services/ProfileFixerService.d.ts +++ b/Faupi-MunitionsExpert/server/types/services/ProfileFixerService.d.ts @@ -45,6 +45,11 @@ export declare class ProfileFixerService { * @param pmcProfile Profile to find and remove slots from */ protected removeResourcesFromSlotsInHideoutWithoutLocationIndexValue(pmcProfile: IPmcData): void; + /** + * Hideout slots need to be in a specific order, locationIndex in ascending order + * @param pmcProfile profile to edit + */ + protected reorderHideoutAreasWithResouceInputs(pmcProfile: IPmcData): void; /** * add in objects equal to the number of slots * @param areaType area to check diff --git a/Faupi-MunitionsExpert/server/types/services/ProfileSnapshotService.d.ts b/Faupi-MunitionsExpert/server/types/services/ProfileSnapshotService.d.ts new file mode 100644 index 0000000..445ffd0 --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/services/ProfileSnapshotService.d.ts @@ -0,0 +1,30 @@ +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class ProfileSnapshotService { + protected jsonUtil: JsonUtil; + protected storedProfileSnapshots: Record; + constructor(jsonUtil: JsonUtil); + /** + * Store a profile into an in-memory object + * @param sessionID session id - acts as the key + * @param profile - profile to save + */ + storeProfileSnapshot(sessionID: string, profile: IAkiProfile): void; + /** + * Retreve a stored profile + * @param sessionID key + * @returns A player profile object + */ + getProfileSnapshot(sessionID: string): IAkiProfile; + /** + * Does a profile exists against the provided key + * @param sessionID key + * @returns true if exists + */ + hasProfileSnapshot(sessionID: string): boolean; + /** + * Remove a stored profile by key + * @param sessionID key + */ + clearProfileSnapshot(sessionID: string): void; +} diff --git a/Faupi-MunitionsExpert/server/types/services/RagfairOfferService.d.ts b/Faupi-MunitionsExpert/server/types/services/RagfairOfferService.d.ts index 7398a8f..f9e3a34 100644 --- a/Faupi-MunitionsExpert/server/types/services/RagfairOfferService.d.ts +++ b/Faupi-MunitionsExpert/server/types/services/RagfairOfferService.d.ts @@ -24,7 +24,6 @@ export declare class RagfairOfferService { protected httpResponse: HttpResponseUtil; protected configServer: ConfigServer; protected playerOffersLoaded: boolean; - protected toUpdate: Record; protected expiredOffers: Item[]; protected offers: IRagfairOffer[]; protected ragfairConfig: IRagfairConfig; @@ -38,8 +37,6 @@ export declare class RagfairOfferService { getOffersOfType(templateId: string): IRagfairOffer[]; addOffer(offer: IRagfairOffer): void; addOfferToExpired(staleOffer: IRagfairOffer): void; - setTraderUpdateStatus(traderId: string, shouldUpdate: boolean): void; - shouldTraderBeUpdated(traderID: string): boolean; getExpiredOfferCount(): number; /** * Get an array of expired items not yet processed into new offers @@ -53,12 +50,15 @@ export declare class RagfairOfferService { * @returns offer exists - true */ doesOfferExist(offerId: string): boolean; - getTraders(): Record; - flagTraderForUpdate(expiredOfferUserId: string): void; removeOfferById(offerId: string): void; removeOfferStack(offerID: string, amount: number): void; removeAllOffersByTrader(traderId: string): void; - addTradersToUpdateList(): void; + /** + * Do the trader offers on flea need to be refreshed + * @param traderID Trader to check + * @returns true if they do + */ + traderOffersNeedRefreshing(traderID: string): boolean; addPlayerOffers(): void; expireStaleOffers(): void; /** diff --git a/Faupi-MunitionsExpert/server/types/services/RagfairPriceService.d.ts b/Faupi-MunitionsExpert/server/types/services/RagfairPriceService.d.ts index 679fe1d..466c9e3 100644 --- a/Faupi-MunitionsExpert/server/types/services/RagfairPriceService.d.ts +++ b/Faupi-MunitionsExpert/server/types/services/RagfairPriceService.d.ts @@ -27,6 +27,20 @@ export declare class RagfairPriceService { getDynamicPrice(itemTpl: string): number; getAllFleaPrices(): Record; getFleaPriceForItem(tplId: string): number; + /** + * Check to see if an items price is below its handbook price and adjust accoring to values set to config/ragfair.json + * @param itemPrice price of item + * @param itemTpl item template Id being checked + * @returns adjusted price value in roubles + */ + protected adjustPriceIfBelowHandbook(itemPrice: number, itemTpl: string): number; + /** + * Get the percentage difference between two values + * @param a numerical value a + * @param b numerical value b + * @returns different in percent + */ + protected getPriceDifference(a: number, b: number): number; getStaticPriceForItem(tplId: string): number; getBarterPrice(barterScheme: IBarterScheme[]): number; getDynamicOfferPrice(items: Item[], desiredCurrency: string): number; diff --git a/Faupi-MunitionsExpert/server/types/services/RepairService.d.ts b/Faupi-MunitionsExpert/server/types/services/RepairService.d.ts new file mode 100644 index 0000000..3e6077c --- /dev/null +++ b/Faupi-MunitionsExpert/server/types/services/RepairService.d.ts @@ -0,0 +1,75 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected itemEventRouter: ItemEventRouter; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + repairConfig: IRepairConfig; + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + * @param output IItemEventRouterResponse + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData, output: IItemEventRouterResponse): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; +} diff --git a/Faupi-MunitionsExpert/server/types/services/TraderAssortService.d.ts b/Faupi-MunitionsExpert/server/types/services/TraderAssortService.d.ts index 5ba2d05..03b4e12 100644 --- a/Faupi-MunitionsExpert/server/types/services/TraderAssortService.d.ts +++ b/Faupi-MunitionsExpert/server/types/services/TraderAssortService.d.ts @@ -2,5 +2,10 @@ import { ITraderAssort } from "../models/eft/common/tables/ITrader"; export declare class TraderAssortService { protected pristineTraderAssorts: Record; getPristineTraderAssort(traderId: string): ITraderAssort; + /** + * Store trader assorts inside a class property + * @param traderId Traderid to store assorts against + * @param assort Assorts to store + */ setPristineTraderAssort(traderId: string, assort: ITraderAssort): void; } diff --git a/Faupi-MunitionsExpert/server/types/utils/HashUtil.d.ts b/Faupi-MunitionsExpert/server/types/utils/HashUtil.d.ts index bacbf2a..a8500e1 100644 --- a/Faupi-MunitionsExpert/server/types/utils/HashUtil.d.ts +++ b/Faupi-MunitionsExpert/server/types/utils/HashUtil.d.ts @@ -4,8 +4,18 @@ import { TimeUtil } from "./TimeUtil"; export declare class HashUtil { protected timeUtil: TimeUtil; constructor(timeUtil: TimeUtil); + /** + * Create a 24 character id using the sha256 algorithm + current timestamp + * @returns 24 character hash + */ generate(): string; generateMd5ForData(data: string): string; generateSha1ForData(data: string): string; + /** + * Create a hash for the data parameter + * @param algorithm algorithm to use to hash + * @param data data to be hashed + * @returns hash value + */ generateHashForData(algorithm: string, data: crypto.BinaryLike): string; } diff --git a/Faupi-MunitionsExpert/server/types/utils/RandomUtil.d.ts b/Faupi-MunitionsExpert/server/types/utils/RandomUtil.d.ts index c24dd60..633e472 100644 --- a/Faupi-MunitionsExpert/server/types/utils/RandomUtil.d.ts +++ b/Faupi-MunitionsExpert/server/types/utils/RandomUtil.d.ts @@ -136,7 +136,7 @@ export declare class RandomUtil { * Drawing can be with or without replacement * @param {array} list The array we want to draw randomly from * @param {integer} count The number of times we want to draw - * @param {boolean} replacement Draw with ot without replacement from the input array + * @param {boolean} replacement Draw with or without replacement from the input array * @return {array} Array consisting of N random elements */ drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; @@ -150,4 +150,10 @@ export declare class RandomUtil { */ drawRandomFromDict(dict: any, count?: number, replacement?: boolean): any[]; getBiasedRandomNumber(min: number, max: number, shift: number, n: number): number; + /** + * Fisher-Yates shuffle an array + * @param array Array to shuffle + * @returns Shuffled array + */ + shuffle(array: Array): Array; } diff --git a/Faupi-MunitionsExpert/server/types/utils/TimeUtil.d.ts b/Faupi-MunitionsExpert/server/types/utils/TimeUtil.d.ts index eed4e6d..1367e26 100644 --- a/Faupi-MunitionsExpert/server/types/utils/TimeUtil.d.ts +++ b/Faupi-MunitionsExpert/server/types/utils/TimeUtil.d.ts @@ -1,9 +1,16 @@ +/** + * Utility class to handle time related problems + */ export declare class TimeUtil { static readonly oneHourAsSeconds = 3600; formatTime(date: Date): string; formatDate(date: Date): string; getDate(): string; getTime(): string; + /** + * Get timestamp in seconds + * @returns + */ getTimestamp(): number; /** * mail in eft requires time be in a specific format @@ -15,4 +22,10 @@ export declare class TimeUtil { * @returns current date in format: 00.00.0000 (dd.mm.yyyy) */ getDateMailFormat(): string; + /** + * Convert hours into seconds + * @param hours hours to convert to seconds + * @returns number + */ + getHoursAsSeconds(hours: number): number; } diff --git a/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/bepInEx/plugins/KcY-SeeItemValue.dll b/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/bepInEx/plugins/KcY-SeeItemValue.dll deleted file mode 100644 index 203b8f6dab7f8077a10692ac646f8abedebf373b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9216 zcmeHMeQX@Zb$_#WyLUYDj@&zvk}O&}>LaF2>P%9yB_)!~Z;2Ku$s{F979DCyE~&Nd zZcn>=l4wB+l@B9=KM=un5f^n^1x{-R1**VFW2bRpw=Uo`4PrMOL1kZ44N=!dzU$4jHVMr+cwqLZiv9L?u``crtOQF~B{8YHgxb~7UoBU%IjK9>+3 z`2vgbf8`mF%tEPw-o1?U5M|jBOUn_WI_79 zDqV8?h>gIC(M@ZVw(BJVdslXbNX7cYNSzcL9){tkS9ABX;DuB5&8Y^xKH1Qg<}P#= zHiUhFq++*%*L+2!bY1VbnVdN6i?pp_X4_i8R8mj2p+kFJRkx_UUTUI$jq42^QN6wm zu8+|_M{UH7mQ97DHiBA9sZkr_fuSijENM?g^hn2bdgOE)#4!d@rcRI8H-c)u5^5LC zsg$1TSWbF4kO>-(9nRjB3S(}VWqT^BM;ot%QjL0J$7a%_r*A4LyP~9;^rntR?(eg+ zx^|d*w#NyR;qr^yKtdBhd#XmS>8R6dPPbPKXx5uM>REx$4aQYjI;O{X+-3SQ9yfNn zqiWpc`f`6-xG9_n3 zSXG@~*OAiePTzb@=j-(AI<}BrXCoWMoQ+u5)$8mo;9zy*;UQ2&Y9+M$z4etggkmM_ zSjqNOT#xgVTlAKWDbnM()owkdqb(?``e2Q@d0|Vp4EE4O)h+>eeDVpMGVu9H^mdrr zSh7CUp=tDa2`@`{Nm-$#XoT}M{g?8Eutq-&-KA<|O1MVC+a!Ek!dDe;{f5@4#wezK z2NoVyzJtEI=m)?T3i{rPX32NgaS1 zUWwS+pAlQWQfMUJN&?&GcjSNx*y6&tk+K3b%enVr-Y#E#GeC(L@VH}fVa})bP_Uk zWYfMhTl~9}4nKp|UrXw~<(E}~IE%LWZ3E#KM3_2|W>~U8`&*&XxTG#D|E2np(8!Y1 zebHyse*kqnpk7q}3Dms-^%;>85&CREorjJH-5*eAA}JB2hXd-th>Ew+-}fnLOAS3C zsTar={~~JW4M|;~$0Gj*>g_5?>{_HPB44tOdL_k@KNod0Dk*<{^>naGvYs9-OTH`W z>8n+eNxD=enWVSMlB$xV-&9F9k%p{DbdFw!H=F1dN%`Y7(GE%ZK5L@euWB2Y)aTIW zGpHOx4H=(_trGT1I4t2E z5+0J!knjSapc-*mZK7d7L5Bca5NnJdr+c(5z+VwPbRL}D_<*>q9t7SP{xo2VV$wPp zm+NGVu9N=g2xK-ZHrjqg_mdT9+oSw7Ezo;p(mC-{^+no5JHkJv^WsVEHM$^9sz0Si z#lG-m@P9?`K;}7Yx8t-tqGH#4RWtzp0iyC5`dXwxJWp?iTg7+jTj0M;v2X_PlE{cx z=x?+JVNt8HSzHw3V!L=!^oDnew`A*2=&;r*-lgYQk9bquA>NRE-;k}(i%DUK?}|SR z&xuXa=8Gbx6rkr_bwTLTKf3r2#EK#DZBk~NoO_09X@!!Z6s-bWNjCtlr6Is}+6%am z9s~RoJq6fLe+jsoz6Uri`G*0INDT(fK#xJk=pU6C$yt=}oaCRA{EHI5DDmec{+fg& zxNlm*wc<3rs`N;_U&132J||q3Q5Y^t_?m=k=>i=V_aJj1gz4{89Wnf%Xac+tX;KvA zDb9ouKn1&91zrQFAU8*V*8*mc&Bkz^ejXY7_e6M+BOcw$WdrsA{>$Z}c&dz7kVmm= zxMy|QEqN+>^Ir2ykq^=(a#<;duRbXfqOZ$mBc8+bpE#Xr#a>#5+Jd?c^+wcg)DhGJ zLZQ#0ei8K{)Zf7>Z-plLDzURaYq)NA=cZ2DwqxtmROb|s-r3n<&&(Y#vPE;pbimv( z1LQ~-4Hfeb{*@N)4Txx3XQdZPcDEX3ZVAM98@_wv)A{X>e#FGn_wR<~`e47_sNA z85&=3VRxqA&Sp(Hpqtrg=1m7pgFK^N53fkmMb8|bB}|g0tXbMtK(o2y*wj>?F>?$r zP(zlP1v^*FdR8H8na;Iswqwm(c_TY&oVuoQr|J0`#_VE#maLK^F#|%|gyGDa-l*vv z1r2OU4o_|wo0_unu4m+DOxcVfb`{1<*Dg90&QjXS6?1!vxoOkcJGb98=1rd6n2~4X zq;bro!8|V%P1pl=k&&@t-m`M%#6rQ`W#nhUVbeejId(4K>@jj>_7e9ESZ*O}EN}<% zr_yJ*zP%G>4o#j(?C&zso6Ff{0u8>%fH_^9pEsR8$3E$@f#V+c?6-3TD{DG(>A;vR zFB|ziSad0`N=v1w*LBU@bar9F@~V6IYcPacHuI$I9IMC=p7PARi$JZgN-Bn6(E-zW z|Hk3`obBWc8RFRwlJAV8R6sAnSgfB9NI8$n&s3$6V3v{ z#+N+7$pY)+Vz(Jt>t3_887Gc9rZJ0sMZL$Y%$PYBY|V@`pZUSA4eZMV{^OPj+c$=G zI%eLOHDwp_bAgYuF+Rp2=40dLOwlpnZO^c<`GZb|ca%oV6K3|Bd1Pj@SsAW!vj*m1 z%M^3eXBLL@`?5vscH$7Y0hQUK1+*?Hbn8&7f zu)MY->C!50=pR37IEAXtnO&Y&kg1`Pp=A1~BFD_*Mbq{CjqG45$jX#q<$&@53#x{M zOEEFD$~nR3CG!U?V?K`vvu4~9tF%mh*qY9`>6}0Ub%VW$WyAV_yec2LRE|TJ`m8+1 z!%)`1$0`Sf@0HAc&&s;Qj**8F^%arEJs*d$GloaFq&>EG`W_^An#GYqgQqNyb`|!S zNRD}rN_mlOv-3WuU|8~$s_+KvdC!=y&_lL8JAhB;V-*(M!;w{Cj9atj;M^PruJA_9 z+1*wZJ!bM)SFv`R3l(|H;e_dUeozgbl51FXlE_7@re)yr{vNVU(E##>zh~vqUpq$o z@g<(7XVYT+&3H#TNvG&$a`6Ug;;qyJ%+U!la8pnOj;p!V^Wf)Yi$im0nE}6>I%x|{ z0g^r;`xMZ_kWxI(Lw_~($HiY#@54JASNy5*5xby z60wNVl2?V6s7nbQnaYJ z$Xi9sKcr}N@JN*LyBQdYCJB=X3r%&5-81RdsHj1N0(NW@Y zbqC{iWx8>dhInVbB#2;-U$C%^Gj=WmEt%?*?i#h|xhaDiY%cfx{jN(SM)xVeA3~kr z-@5p>x1g}{6zUDAucPhtsx}tkySeHzHa;-E$Ex4D{^kBX4_tnI@SWehJ}EV&qON|HelYX7Q~kCxki}~>j#v3!Z<_Kj4*I;e9%`1l=W2Z)D~fN>h;Y-pc(qyn zO)g^Y8a~VILOs~y-^nt~r6Giic{+e^=qbQKe0`4NOK&gj0X+;jVq)aEy7XNP(P4hW}Q%gtRe(1|lL5{J285y8Vsed<4rbDy=+W9OS z4$d;R*FVcx=ys{2Wc>i-T=ZgF3XreZ`oGcDiKHdU_8)*Q2iht+y72wqjoK+IkKF`$ z_86bC4xVgTWd^@(%nZ#!o^SAp+T_ZOK+n9?!d@xhCW&V*S_ufYt+h2!$&}qY>BK+r7&4O@?^V`><6SpUVuGX>CgBAY~-Zj|Qz3?x;spJq5 lSI>G<| diff --git a/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/bepInEx/plugins/KcY-SeeItemValue.dll b/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/bepInEx/plugins/KcY-SeeItemValue.dll new file mode 100644 index 0000000000000000000000000000000000000000..cfe2eaa1d96220a9467040a331db6fda3ed7f038 GIT binary patch literal 10240 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 K_v(Ks0{;ygj|PeW literal 0 HcmV?d00001 diff --git a/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/LICENSE.txt b/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/LICENSE.txt similarity index 100% rename from KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/LICENSE.txt rename to KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/LICENSE.txt diff --git a/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/package.json b/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/package.json similarity index 95% rename from KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/package.json rename to KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/package.json index 5d2e658..2315f8e 100644 --- a/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/package.json +++ b/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/package.json @@ -1,10 +1,10 @@ { "name": "SeeItemValue", "author": "KcY", - "version": "1.4.3", + "version": "1.4.4", "license": "NCSA Open Source", "main": "src/mod.js", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "UpdatedBy": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/src/config.json b/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/src/config.json similarity index 100% rename from KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/src/config.json rename to KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/src/config.json diff --git a/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/src/mod.ts b/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/src/mod.ts similarity index 51% rename from KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/src/mod.ts rename to KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/src/mod.ts index cc7a0ac..95d43ef 100644 --- a/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.3/user/mods/KcY-SeeItemValue 1.4.3/src/mod.ts +++ b/KcY-SeeItemValue/itemValue/Built/KcY-SeeItemValue 1.4.4/user/mods/KcY-SeeItemValue 1.4.4/src/mod.ts @@ -8,32 +8,29 @@ import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil" import { IDatabaseTables } from "@spt-aki/models/spt/server/IDatabaseTables"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { IHandbookBase } from "@spt-aki/models/eft/common/tables/IHandbookBase"; +import { ITraderBase } from "@spt-aki/models/eft/common/tables/ITrader"; class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod { - - private pkg; private logger: ILogger; - private database: DatabaseServer; private router: DynamicRouterModService; private http: HttpResponseUtil; private items: Record; private table: IDatabaseTables; private livePrice; private handbookTable: IHandbookBase; - private therapist; - private ragman; - private jaeger; - private mechanic; - private prapor; - private peacekeeper; - private skier; - private fence; - private tradersArr; + private therapist: ITraderBase; + private ragman: ITraderBase; + private jaeger: ITraderBase; + private mechanic: ITraderBase; + private prapor: ITraderBase; + private peacekeeper: ITraderBase; + private skier: ITraderBase; + private fence: ITraderBase; + private tradersArr: ITraderBase[]; private cfg; public preAkiLoad(container: DependencyContainer): void { - this.pkg = require("../package.json"); this.router = container.resolve("DynamicRouterModService"); this.logger = container.resolve("WinstonLogger"); this.http = container.resolve("HttpResponseUtil"); @@ -43,8 +40,8 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod } public postAkiLoad(container: DependencyContainer): void { - this.database = container.resolve("DatabaseServer"); - this.table = this.database.getTables(); + this.table = container.resolve("DatabaseServer").getTables(); + this.items = this.table.templates.items; this.livePrice = this.table.templates.prices; this.handbookTable = this.table.templates.handbook; @@ -87,134 +84,123 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod private getIdPrice(id: string): any { - let sPrice = 1; - let sMutli = 1; - let parentId = ""; - let origiMax = 1; - let result = { multiplier: 1, price: 1, - originalMax: 1 + originalMax: 1, + traderName: "Default" }; + // if ID is roubles - return 1 if (id === "5449016a4bdc2d6f028b456f") { - this.debugMode("Item was Roubles - returning 1 as price", "yellow"); + this.debugMode("Item was Roubles - returning 1 as price"); return result; } - if (this.cfg.TraderPrice === false) + // if config is set to false (live price) + if (!this.cfg.TraderPrice) { - result.multiplier = 1; - result.price = this.livePrice[id]; - result.originalMax = 1; + result.traderName = "Flea"; + // return price if it exists else return 1 if (this.livePrice[id]) { - this.debugMode("Config setting false for traders - returning livePrice AVG", "yellow"); - return result - } - } + result.price = this.livePrice[id]; - for (const i in this.handbookTable.Items) - { - if (this.handbookTable.Items[i].Id === id) - { - parentId = this.handbookTable.Items[i].ParentId; - this.debugMode(`ID was found in handbook - parentID = ${parentId}`, "yellow"); - - sMutli = this.getBestTraderMulti(parentId); - this.debugMode(`Multi returned from getBestTraderMulti method was = ${sMutli}`, "yellow"); - - sPrice = this.handbookTable.Items[i].Price; - this.debugMode(`Price taken from handbook.items = ${sPrice}`, "yellow"); - - origiMax = this.getOrigiDura(id); - this.debugMode(`Original max is: ${origiMax}`, "yellow"); - - result.multiplier = sMutli; - result.price = sPrice; - result.originalMax = origiMax; - - this.debugMode(`Object built to return to client = ${result.multiplier} and ${result.price}`, "yellow"); + this.debugMode(`Config setting false for traders - returning livePrice AVG found`); return result; - } + } + else + { + this.debugMode(`Config setting false for traders - unable to find livePrice - returning 1`); + return result; + } } - this.debugMode(`No item found in handbook, returning default ${sPrice}`, "yellow"); - return result; - } - - private getBestTraderMulti(parentId: string): number - { - let traderSellCat = ""; - let altTraderSellCat = ""; - let altAltTraderSellCat = ""; - - for (const i in this.handbookTable.Categories) + // if config is set to true (trader prices) + if (this.cfg.TraderPrice) { - if (this.handbookTable.Categories[i].Id === parentId) + // search through all items in handbook + let item = this.handbookTable.Items.find(x => x.Id === id); + + // if ID is found in handbook else returns default result object + if (item) { - this.debugMode("Found category from item parent ID", "yellow"); - - traderSellCat = this.handbookTable.Categories[i].Id; - this.debugMode(`Storing trader sell category = ${traderSellCat}`, "yellow"); - - altTraderSellCat = this.handbookTable.Categories[i].ParentId; - this.debugMode(`Storing trader Alt sell category = ${altTraderSellCat}`, "yellow"); - - for (const a in this.handbookTable.Categories) + // gets price of item from handbook else return 1 + if (item.Price) { - if (this.handbookTable.Categories[a].Id === altTraderSellCat) - { - altAltTraderSellCat = this.handbookTable.Categories[a].ParentId; - this.debugMode(`Alt sell category has parent, storing that = ${altAltTraderSellCat}`, "yellow"); - - break; - } + result.price = item.Price; + this.debugMode(`Price found in handbook - ${result.price}`); } - break; + else + { + result.price = 1; + this.debugMode(`unable to find price in handbook for ID - ${id}`); + } + + // gets parent of ID from handbook and trader multiplier else returns "" and 1 + if (item.ParentId) + { + this.debugMode(`ParentID found in handbook - ${item.ParentId}`); + + const { k1, k2 } = this.getBestTraderMulti(item.ParentId); + + result.multiplier = k1; + result.traderName = k2; + + this.debugMode(`Best multiplier is ${result.multiplier}`); + this.debugMode(`Best Trader name is ${result.traderName}`); + } + else + { + result.multiplier = 1; + this.debugMode(`Unable to find ParentID in handbook for ID - ${id}`); + this.debugMode(`Returning 1 for multiplier`); + } + + // gets original max durability of resource type for item + result.originalMax = this.getOrigiDura(id); + this.debugMode(`Original max is ${result.originalMax}`); + + return result; + } + else + { + this.debugMode(`No item found in handbook, returning default result`); + return result; } } - - for (let iter = 0; iter < this.tradersArr.length; iter++) - { - if (this.tradersArr[iter].sell_category.includes(traderSellCat)) - { - this.debugMode(`base sell category found for trader number ${iter} - category is = ${traderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - - if (this.tradersArr[iter].sell_category.includes(altTraderSellCat)) - { - this.debugMode(`alt sell category found for trader number ${iter} - category is = ${altTraderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - - if (this.tradersArr[iter].sell_category.includes(altAltTraderSellCat)) - { - this.debugMode(`alt alt sell category found for trader number ${iter} - category is = ${altAltTraderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - } - return 1; } - private getBestTraderInfo(trader: number): number + private getBestTraderMulti(parentId: string): any { - let traderMulti = 0.54; - let traderName = ""; + let firstCat = this.handbookTable.Categories.find(x => x.Id === parentId); + let secondCat = firstCat.ParentId + let thirdCat = this.handbookTable.Categories.find(x => x.Id === secondCat).ParentId; - traderMulti = (100 - this.tradersArr[trader].loyaltyLevels[0].buy_price_coef) / 100; - this.debugMode(`Trader mutli for above is = ${traderMulti}`, "yellow"); - traderName = this.tradersArr[trader].nickname; - this.debugMode(`Trader name is = ${traderName}`, "yellow"); + if (firstCat.Id || secondCat || thirdCat) + { + for (let i in this.tradersArr) + { + if (this.tradersArr[i].sell_category.includes(firstCat.Id) || + this.tradersArr[i].sell_category.includes(secondCat) || + this.tradersArr[i].sell_category.includes(thirdCat)) + { + let multi = (100 - this.tradersArr[i].loyaltyLevels[0].buy_price_coef) / 100; + let name = this.tradersArr[i].nickname; - return traderMulti; + return {k1: multi, k2: name}; + } + } + } + else + { + return 1; + } } - private debugMode(text: string, color: string): void + private debugMode(text: string, color: string = `yellow`): void { if (this.cfg.DebugMode) { @@ -248,6 +234,7 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod { return this.items[item]._props.MaxRepairResource; } + return 1; } } diff --git a/KcY-SeeItemValue/itemValue/Program.cs b/KcY-SeeItemValue/itemValue/Program.cs index a1d70a3..039f4dc 100644 --- a/KcY-SeeItemValue/itemValue/Program.cs +++ b/KcY-SeeItemValue/itemValue/Program.cs @@ -2,7 +2,7 @@ namespace itemValueMod { - [BepInPlugin("com.KcY.SeeItemValue", "KcY-SeeItemValue", "1.4.2")] + [BepInPlugin("com.KcY.SeeItemValue", "KcY-SeeItemValue", "1.4.4")] public class Plugin : BaseUnityPlugin { private void Awake() diff --git a/KcY-SeeItemValue/itemValue/itemValueMod.cs b/KcY-SeeItemValue/itemValue/itemValueMod.cs index c7104be..823ab92 100644 --- a/KcY-SeeItemValue/itemValue/itemValueMod.cs +++ b/KcY-SeeItemValue/itemValue/itemValueMod.cs @@ -3,9 +3,11 @@ using Aki.Common.Utils; using EFT.InventoryLogic; using System; using System.Collections.Generic; -using UnityEngine; using System.Reflection; using ItemAttribute = GClass2197; +using System.Net; +using System.Threading; +using UnityEngine; namespace itemValueMod { @@ -16,54 +18,116 @@ namespace itemValueMod var atts = new List(); atts.AddRange(__instance.Attributes); __instance.Attributes = atts; - ItemAttribute attr = new ItemAttribute(EItemAttributeId.MoneySum) + + ItemAttribute attr1 = new ItemAttribute(EItemAttributeId.MoneySum) { - StringValue = new Func(__instance.ValueStr), - Name = "RUB ₽", + StringValue = new Func(__instance.TraderPrice), + FullStringValue = new Func(__instance.TraderName), + Name = "TRADER", DisplayType = new Func(() => EItemAttributeDisplayType.Compact) }; - __instance.Attributes.Add(attr); + + __instance.Attributes.Add(attr1); } } public static class ValueExtension { - static public Dictionary dict = new Dictionary(); + static public Dictionary itemDictionary = new Dictionary(); static object lockObject = new object(); - public static double Value(this Item item) + public static JsonClass GetData(String itemId) { - var template = item.Template; - string itemId = template._id; + var json = RequestHandler.GetJson($"/cwx/seeitemvalue/{itemId}"); + var jsonClass = Json.Deserialize(json); + + itemDictionary.Add(itemId, jsonClass); + + return jsonClass; + } + + public static string TraderPrice(this Item item) + { + string itemId = item.Template._id; JsonClass jsonClass; - double _price; - double editedPrice; - double editedMulti; - double originalMax; + bool lockWasTaken = false; - lock (lockObject) + try { - if (!dict.TryGetValue(template._id, out jsonClass)) - { - var json = RequestHandler.GetJson($"/cwx/seeitemvalue/{itemId}"); - jsonClass = Json.Deserialize(json); + Monitor.Enter(lockObject, ref lockWasTaken); - dict.Add(template._id, jsonClass); + if(!itemDictionary.TryGetValue(itemId, out jsonClass)) + { + jsonClass = GetData(item.Template._id); + } + } + catch (WebException) + { + return $"[SeeItemValue] Issue happened whilst getting Item from server"; + } + finally + { + if (lockWasTaken) + { + Monitor.Exit(lockObject); } } - editedPrice = jsonClass.price; - editedMulti = jsonClass.multiplier; - originalMax = jsonClass.originalMax; - //Debug.LogError($" editedPrice: {editedPrice}"); - //Debug.LogError($" editedMulti: {editedMulti}"); - //Debug.LogError($" originalMax: {originalMax}"); + + double alteredPrice = DurabilityCheck(item, jsonClass); + + Debug.LogError($"price: {alteredPrice}"); + + double _price = alteredPrice * jsonClass.multiplier; + + Debug.LogError($"price: {jsonClass.multiplier}"); + Debug.LogError($"price: {_price}"); + + return Math.Round(_price).ToString(); + } + + public static string TraderName(this Item item) + { + string itemId = item.Template._id; + JsonClass jsonClass; + bool lockWasTaken = false; + + try + { + Monitor.Enter(lockObject, ref lockWasTaken); + + if (!itemDictionary.TryGetValue(itemId, out jsonClass)) + { + jsonClass = GetData(item.Template._id); + } + } + catch (WebException) + { + return $"[SeeItemValue] Issue happened whilst getting Item from server"; + } + finally + { + if (lockWasTaken) + { + Monitor.Exit(lockObject); + } + } + + return jsonClass.traderName; + } + + public static double DurabilityCheck(this Item item, JsonClass jsonClass) + { + double editedPrice = jsonClass.price; + double originalMax = jsonClass.originalMax; + + Debug.LogError($"price: {jsonClass.price}"); + var medKit = item.GetItemComponent(); if (medKit != null && medKit.HpResource != 0 && medKit.MaxHpResource != 0) { editedPrice *= medKit.HpResource / medKit.MaxHpResource; - //Debug.LogError($" MedKitComponent: {editedPrice}"); } var repair = item.GetItemComponent(); @@ -72,7 +136,6 @@ namespace itemValueMod if (repair.Durability > 0) { editedPrice *= repair.Durability / originalMax; - //Debug.LogError($" RepairableComponent: {editedPrice}"); } else { @@ -84,7 +147,6 @@ namespace itemValueMod if (dogtag != null && dogtag.Level != 0) { editedPrice *= dogtag.Level; - //Debug.LogError($" DogtagComponent: {editedPrice}"); } var repairKit = item.GetItemComponent(); @@ -93,7 +155,6 @@ namespace itemValueMod if (repairKit.Resource > 0) { editedPrice *= repairKit.Resource / originalMax; - //Debug.LogError($" RepairKitComponent: {editedPrice}"); } else { @@ -104,11 +165,8 @@ namespace itemValueMod var resource = item.GetItemComponent(); if (resource != null && resource.Value != 0 && resource.MaxResource != 0) { - //Debug.LogError($" ResourceComponent.value: {resource.Value}"); - //Debug.LogError($" ResourceComponent.MaxResource: {resource.MaxResource}"); editedPrice *= resource.Value / resource.MaxResource; - //Debug.LogError($" ResourceComponent: {editedPrice}"); } var foodDrink = item.GetItemComponent(); @@ -117,7 +175,6 @@ namespace itemValueMod GInterface208 ginterface208_0 = (GInterface208)foodDrink.GetType().GetField("ginterface208_0", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(foodDrink); editedPrice *= foodDrink.HpPercent / ginterface208_0.MaxResource; - //Debug.LogError($" FoodDrinkComponent: {editedPrice}"); } var keys = item.GetItemComponent(); @@ -131,7 +188,6 @@ namespace itemValueMod double multi = totalMinusUsed / ginterface212_0.MaximumNumberOfUsage; editedPrice *= multi; - //Debug.LogError($" KeyComponent: {editedPrice}"); } } @@ -139,20 +195,11 @@ namespace itemValueMod if (sideEffect != null && sideEffect.Value != 0) { editedPrice *= sideEffect.Value / sideEffect.MaxResource; - //Debug.LogError($" SideEffectComponent: {editedPrice}"); } - _price = editedPrice * editedMulti; - //Debug.LogError($"ENDING PRICE: {_price}"); + Debug.LogError($"price: {jsonClass.price}"); - return _price; - } - public static string ValueStr(this Item item) - { - var result = Math.Round(item.Value()).ToString(); - //Debug.LogError($"price, rounded to string: {result}"); - - return result; + return editedPrice; } } } \ No newline at end of file diff --git a/KcY-SeeItemValue/itemValue/itemValueMod.csproj b/KcY-SeeItemValue/itemValue/itemValueMod.csproj index aaf274c..4d65b13 100644 --- a/KcY-SeeItemValue/itemValue/itemValueMod.csproj +++ b/KcY-SeeItemValue/itemValue/itemValueMod.csproj @@ -2,7 +2,7 @@ net472 - 1.2.0 + 1.4.4 KcY-SeeItemValue diff --git a/KcY-SeeItemValue/itemValue/jsonClass.cs b/KcY-SeeItemValue/itemValue/jsonClass.cs index 069be3e..a650af9 100644 --- a/KcY-SeeItemValue/itemValue/jsonClass.cs +++ b/KcY-SeeItemValue/itemValue/jsonClass.cs @@ -5,5 +5,6 @@ public double multiplier { get; set; } public int price { get; set; } public int originalMax { get; set; } + public string traderName { get; set; } } } diff --git a/KcY-SeeItemValue/itemValue/server/dist/package.json b/KcY-SeeItemValue/itemValue/server/dist/package.json index 5d2e658..2315f8e 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/package.json +++ b/KcY-SeeItemValue/itemValue/server/dist/package.json @@ -1,10 +1,10 @@ { "name": "SeeItemValue", "author": "KcY", - "version": "1.4.3", + "version": "1.4.4", "license": "NCSA Open Source", "main": "src/mod.js", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "UpdatedBy": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/KcY-SeeItemValue/itemValue/server/dist/src/mod.ts b/KcY-SeeItemValue/itemValue/server/dist/src/mod.ts index cc7a0ac..95d43ef 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/src/mod.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/src/mod.ts @@ -8,32 +8,29 @@ import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil" import { IDatabaseTables } from "@spt-aki/models/spt/server/IDatabaseTables"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { IHandbookBase } from "@spt-aki/models/eft/common/tables/IHandbookBase"; +import { ITraderBase } from "@spt-aki/models/eft/common/tables/ITrader"; class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod { - - private pkg; private logger: ILogger; - private database: DatabaseServer; private router: DynamicRouterModService; private http: HttpResponseUtil; private items: Record; private table: IDatabaseTables; private livePrice; private handbookTable: IHandbookBase; - private therapist; - private ragman; - private jaeger; - private mechanic; - private prapor; - private peacekeeper; - private skier; - private fence; - private tradersArr; + private therapist: ITraderBase; + private ragman: ITraderBase; + private jaeger: ITraderBase; + private mechanic: ITraderBase; + private prapor: ITraderBase; + private peacekeeper: ITraderBase; + private skier: ITraderBase; + private fence: ITraderBase; + private tradersArr: ITraderBase[]; private cfg; public preAkiLoad(container: DependencyContainer): void { - this.pkg = require("../package.json"); this.router = container.resolve("DynamicRouterModService"); this.logger = container.resolve("WinstonLogger"); this.http = container.resolve("HttpResponseUtil"); @@ -43,8 +40,8 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod } public postAkiLoad(container: DependencyContainer): void { - this.database = container.resolve("DatabaseServer"); - this.table = this.database.getTables(); + this.table = container.resolve("DatabaseServer").getTables(); + this.items = this.table.templates.items; this.livePrice = this.table.templates.prices; this.handbookTable = this.table.templates.handbook; @@ -87,134 +84,123 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod private getIdPrice(id: string): any { - let sPrice = 1; - let sMutli = 1; - let parentId = ""; - let origiMax = 1; - let result = { multiplier: 1, price: 1, - originalMax: 1 + originalMax: 1, + traderName: "Default" }; + // if ID is roubles - return 1 if (id === "5449016a4bdc2d6f028b456f") { - this.debugMode("Item was Roubles - returning 1 as price", "yellow"); + this.debugMode("Item was Roubles - returning 1 as price"); return result; } - if (this.cfg.TraderPrice === false) + // if config is set to false (live price) + if (!this.cfg.TraderPrice) { - result.multiplier = 1; - result.price = this.livePrice[id]; - result.originalMax = 1; + result.traderName = "Flea"; + // return price if it exists else return 1 if (this.livePrice[id]) { - this.debugMode("Config setting false for traders - returning livePrice AVG", "yellow"); - return result - } - } + result.price = this.livePrice[id]; - for (const i in this.handbookTable.Items) - { - if (this.handbookTable.Items[i].Id === id) - { - parentId = this.handbookTable.Items[i].ParentId; - this.debugMode(`ID was found in handbook - parentID = ${parentId}`, "yellow"); - - sMutli = this.getBestTraderMulti(parentId); - this.debugMode(`Multi returned from getBestTraderMulti method was = ${sMutli}`, "yellow"); - - sPrice = this.handbookTable.Items[i].Price; - this.debugMode(`Price taken from handbook.items = ${sPrice}`, "yellow"); - - origiMax = this.getOrigiDura(id); - this.debugMode(`Original max is: ${origiMax}`, "yellow"); - - result.multiplier = sMutli; - result.price = sPrice; - result.originalMax = origiMax; - - this.debugMode(`Object built to return to client = ${result.multiplier} and ${result.price}`, "yellow"); + this.debugMode(`Config setting false for traders - returning livePrice AVG found`); return result; - } + } + else + { + this.debugMode(`Config setting false for traders - unable to find livePrice - returning 1`); + return result; + } } - this.debugMode(`No item found in handbook, returning default ${sPrice}`, "yellow"); - return result; - } - - private getBestTraderMulti(parentId: string): number - { - let traderSellCat = ""; - let altTraderSellCat = ""; - let altAltTraderSellCat = ""; - - for (const i in this.handbookTable.Categories) + // if config is set to true (trader prices) + if (this.cfg.TraderPrice) { - if (this.handbookTable.Categories[i].Id === parentId) + // search through all items in handbook + let item = this.handbookTable.Items.find(x => x.Id === id); + + // if ID is found in handbook else returns default result object + if (item) { - this.debugMode("Found category from item parent ID", "yellow"); - - traderSellCat = this.handbookTable.Categories[i].Id; - this.debugMode(`Storing trader sell category = ${traderSellCat}`, "yellow"); - - altTraderSellCat = this.handbookTable.Categories[i].ParentId; - this.debugMode(`Storing trader Alt sell category = ${altTraderSellCat}`, "yellow"); - - for (const a in this.handbookTable.Categories) + // gets price of item from handbook else return 1 + if (item.Price) { - if (this.handbookTable.Categories[a].Id === altTraderSellCat) - { - altAltTraderSellCat = this.handbookTable.Categories[a].ParentId; - this.debugMode(`Alt sell category has parent, storing that = ${altAltTraderSellCat}`, "yellow"); - - break; - } + result.price = item.Price; + this.debugMode(`Price found in handbook - ${result.price}`); } - break; + else + { + result.price = 1; + this.debugMode(`unable to find price in handbook for ID - ${id}`); + } + + // gets parent of ID from handbook and trader multiplier else returns "" and 1 + if (item.ParentId) + { + this.debugMode(`ParentID found in handbook - ${item.ParentId}`); + + const { k1, k2 } = this.getBestTraderMulti(item.ParentId); + + result.multiplier = k1; + result.traderName = k2; + + this.debugMode(`Best multiplier is ${result.multiplier}`); + this.debugMode(`Best Trader name is ${result.traderName}`); + } + else + { + result.multiplier = 1; + this.debugMode(`Unable to find ParentID in handbook for ID - ${id}`); + this.debugMode(`Returning 1 for multiplier`); + } + + // gets original max durability of resource type for item + result.originalMax = this.getOrigiDura(id); + this.debugMode(`Original max is ${result.originalMax}`); + + return result; + } + else + { + this.debugMode(`No item found in handbook, returning default result`); + return result; } } - - for (let iter = 0; iter < this.tradersArr.length; iter++) - { - if (this.tradersArr[iter].sell_category.includes(traderSellCat)) - { - this.debugMode(`base sell category found for trader number ${iter} - category is = ${traderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - - if (this.tradersArr[iter].sell_category.includes(altTraderSellCat)) - { - this.debugMode(`alt sell category found for trader number ${iter} - category is = ${altTraderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - - if (this.tradersArr[iter].sell_category.includes(altAltTraderSellCat)) - { - this.debugMode(`alt alt sell category found for trader number ${iter} - category is = ${altAltTraderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - } - return 1; } - private getBestTraderInfo(trader: number): number + private getBestTraderMulti(parentId: string): any { - let traderMulti = 0.54; - let traderName = ""; + let firstCat = this.handbookTable.Categories.find(x => x.Id === parentId); + let secondCat = firstCat.ParentId + let thirdCat = this.handbookTable.Categories.find(x => x.Id === secondCat).ParentId; - traderMulti = (100 - this.tradersArr[trader].loyaltyLevels[0].buy_price_coef) / 100; - this.debugMode(`Trader mutli for above is = ${traderMulti}`, "yellow"); - traderName = this.tradersArr[trader].nickname; - this.debugMode(`Trader name is = ${traderName}`, "yellow"); + if (firstCat.Id || secondCat || thirdCat) + { + for (let i in this.tradersArr) + { + if (this.tradersArr[i].sell_category.includes(firstCat.Id) || + this.tradersArr[i].sell_category.includes(secondCat) || + this.tradersArr[i].sell_category.includes(thirdCat)) + { + let multi = (100 - this.tradersArr[i].loyaltyLevels[0].buy_price_coef) / 100; + let name = this.tradersArr[i].nickname; - return traderMulti; + return {k1: multi, k2: name}; + } + } + } + else + { + return 1; + } } - private debugMode(text: string, color: string): void + private debugMode(text: string, color: string = `yellow`): void { if (this.cfg.DebugMode) { @@ -248,6 +234,7 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod { return this.items[item]._props.MaxRepairResource; } + return 1; } } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/callbacks/RepairCallbacks.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/callbacks/RepairCallbacks.d.ts index 63733fa..14edeeb 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/callbacks/RepairCallbacks.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/callbacks/RepairCallbacks.d.ts @@ -6,6 +6,20 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa export declare class RepairCallbacks { protected repairController: RepairController; constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/context/ContextVariable.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/context/ContextVariable.d.ts index e438947..0fe0a63 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/context/ContextVariable.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/context/ContextVariable.d.ts @@ -4,7 +4,7 @@ export declare class ContextVariable { private timestamp; private type; constructor(value: any, type: ContextVariableType); - getValue(): any; + getValue(): T; getTimestamp(): Date; getType(): ContextVariableType; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/controllers/BotController.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/controllers/BotController.d.ts index 5e6f05d..a5111d5 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/controllers/BotController.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/controllers/BotController.d.ts @@ -1,3 +1,4 @@ +import { ApplicationContext } from "../context/ApplicationContext"; import { BotGenerator } from "../generators/BotGenerator"; import { BotHelper } from "../helpers/BotHelper"; import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; @@ -5,15 +6,22 @@ import { IBotBase } from "../models/eft/common/tables/IBotBase"; import { IBotCore } from "../models/eft/common/tables/IBotCore"; import { Difficulty } from "../models/eft/common/tables/IBotType"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { PmcAiService } from "../services/PmcAiService"; export declare class BotController { + protected logger: ILogger; protected databaseServer: DatabaseServer; protected botGenerator: BotGenerator; protected botHelper: BotHelper; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; protected botConfig: IBotConfig; - constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); /** * Return the number of bot loadout varieties to be generated * @param type bot Type we want the loadout gen count for @@ -29,7 +37,18 @@ export declare class BotController { * @returns Difficulty object */ getBotDifficulty(type: string, difficulty: string): Difficulty; - protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty; + protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ getBotCap(): number; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/controllers/GameController.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/controllers/GameController.d.ts index d374453..2d00898 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/controllers/GameController.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/controllers/GameController.d.ts @@ -7,11 +7,13 @@ import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { IHttpConfig } from "../models/spt/config/IHttpConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { LocaleService } from "../services/LocaleService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { Watermark } from "../utils/Watermark"; export declare class GameController { protected logger: ILogger; + protected databaseServer: DatabaseServer; protected watermark: Watermark; protected httpServerHelper: HttpServerHelper; protected localeService: LocaleService; @@ -20,8 +22,12 @@ export declare class GameController { protected configServer: ConfigServer; protected httpConfig: IHttpConfig; protected coreConfig: ICoreConfig; - constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; protected logProfileDetails(fullProfile: IAkiProfile): void; getGameConfig(sessionID: string): IGameConfigResponse; getServer(): any[]; diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/controllers/MatchController.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/controllers/MatchController.d.ts index cb40023..07f6a89 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/controllers/MatchController.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/controllers/MatchController.d.ts @@ -15,8 +15,10 @@ import { IMatchConfig } from "../models/spt/config/IMatchConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; import { BotLootCacheService } from "../services/BotLootCacheService"; import { MatchLocationService } from "../services/MatchLocationService"; +import { PmcAiService } from "../services/PmcAiService"; import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; export declare class MatchController { protected logger: ILogger; @@ -27,11 +29,13 @@ export declare class MatchController { protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; protected profileSnapshotService: ProfileSnapshotService; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected applicationContext: ApplicationContext; protected matchConfig: IMatchConfig; protected inraidConfig: IInRaidConfig; protected botConfig: IBotConfig; - constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, applicationContext: ApplicationContext); + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); getEnabled(): boolean; getProfile(info: IGetProfileRequestData): IPmcData[]; createGroup(sessionID: string, info: ICreateGroupRequestData): any; diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/controllers/RepairController.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/controllers/RepairController.d.ts index 0e78ef6..ae54a53 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/controllers/RepairController.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/controllers/RepairController.d.ts @@ -8,9 +8,9 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa import { IRepairConfig } from "../models/spt/config/IRepairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; -import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; export declare class RepairController { protected logger: ILogger; protected itemEventRouter: ItemEventRouter; @@ -19,23 +19,23 @@ export declare class RepairController { protected traderHelper: TraderHelper; protected paymentService: PaymentService; protected repairHelper: RepairHelper; - protected configServer: ConfigServer; + protected repairService: RepairService; protected repairConfig: IRepairConfig; - constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); /** * Repair with trader - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; /** * Repair with repair kit - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotGenerator.d.ts index 7d58f95..2ac51db 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotGenerator.d.ts @@ -9,6 +9,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { PmcAiService } from "../services/PmcAiService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; @@ -30,9 +31,10 @@ export declare class BotGenerator { protected botEquipmentFilterService: BotEquipmentFilterService; protected botHelper: BotHelper; protected gameEventHelper: GameEventHelper; + protected pmcAiService: PmcAiService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, pmcAiService: PmcAiService, configServer: ConfigServer); /** * Generate a player scav bot object * @param role e.g. assault / pmcbot @@ -41,13 +43,13 @@ export declare class BotGenerator { * @returns */ generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; - generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; /** - * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check - * @param botRole the bot role to check if should be a pmc - * @returns true if should be a pmc + * Generate an array of bot objects for populate a raid with + * @param sessionId session id + * @param info request object + * @returns bot array */ - protected shouldBotBePmc(botRole: string): boolean; + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; /** * Get a randomised PMC side based on bot config value 'isUsec' * @returns pmc side as string @@ -58,12 +60,30 @@ export declare class BotGenerator { * @returns IBotBase object */ protected getCloneOfBotBase(): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param role botRole bot will use + * @param node Bot template from db/bots/x.json + * @param isPmc Is bot to be a PMC + * @param isPlayerScav is bot to be a p scav bot + * @returns IBotBase object + */ protected generateBot(sessionId: string, bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; /** * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client */ protected logPmcGeneratedCount(output: IBotBase[]): void; - protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult; + /** + * Return a randomised bot level and exp value + * @param role botRole being generated for + * @param min Min exp value + * @param max Max exp value + * @returns IRandomisedBotLevelResult object + */ + protected generateRandomLevel(role: string, min: number, max: number): BotGenerator.IRandomisedBotLevelResult; /** * Converts health object to the required format * @param healthObj health object from bot json @@ -72,19 +92,23 @@ export declare class BotGenerator { */ protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; protected generateSkills(skillsObj: Skills): Skills; - /** - * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) - * @param pmcSide eft side (usec/bear) - * @returns pmc side as defined in config - */ - protected getPmcRole(pmcSide: string): string; /** * Iterate through bots inventory and loot to find and remove christmas items (as defined in GameEventHelper) * @param nodeInventory Bots inventory to iterate over */ protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ protected generateId(bot: IBotBase): IBotBase; protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ protected getPMCDifficulty(requestedDifficulty: string): string; /** * Add a side-specific (usec/bear) dogtag item to a bots inventory diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotInventoryGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotInventoryGenerator.d.ts index 73f8ece..c5ed545 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotInventoryGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotInventoryGenerator.d.ts @@ -1,13 +1,16 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; -import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType"; +import { Chances, Generation, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; -import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; -import { BotWeaponGenerator } from "./BotWeaponGenerator"; import { BotLootGenerator } from "./BotLootGenerator"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; export declare class BotInventoryGenerator { protected logger: ILogger; protected hashUtil: HashUtil; @@ -17,8 +20,14 @@ export declare class BotInventoryGenerator { protected botLootGenerator: BotLootGenerator; protected botGeneratorHelper: BotGeneratorHelper; protected weightedRandomHelper: WeightedRandomHelper; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper); - generateInventory(sessionId: string, templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer); + generateInventory(sessionId: string, templateInventory: Inventory, equipmentChances: Chances, itemGenerationLimitsMinMax: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation): void; protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void; protected generateInventoryBase(): PmcInventory; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotLootGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotLootGenerator.d.ts index 5a2d144..c1f5310 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotLootGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotLootGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { HandbookHelper } from "../helpers/HandbookHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; @@ -20,10 +21,11 @@ export declare class BotLootGenerator { protected handbookHelper: HandbookHelper; protected botGeneratorHelper: BotGeneratorHelper; protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botLootCacheService: BotLootCacheService, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer); generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; protected getRandomisedCount(min: number, max: number, nValue: number): number; /** diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotWeaponGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotWeaponGenerator.d.ts index 49fa7bf..487901b 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotWeaponGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/BotWeaponGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { MinMax } from "../models/common/MinMax"; @@ -14,6 +15,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; export declare class BotWeaponGenerator { protected jsonUtil: JsonUtil; protected logger: ILogger; @@ -24,9 +26,11 @@ export declare class BotWeaponGenerator { protected botGeneratorHelper: BotGeneratorHelper; protected randomUtil: RandomUtil; protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected inventoryMagGenComponents: IInventoryMagGen[]; protected readonly modMagazineSlotId = "mod_magazine"; protected botConfig: IBotConfig; - constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer); + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, inventoryMagGenComponents: IInventoryMagGen[]); /** * Pick a random weapon based on weightings and generate a functional weapon * @param equipmentSlot Primary/secondary/holster @@ -67,7 +71,7 @@ export declare class BotWeaponGenerator { * @param botRole for durability values * @returns Base weapon item in array */ - constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; /** * Get the mods necessary to kit out a weapon to its preset level * @param weaponTpl weapon to find preset for @@ -85,36 +89,12 @@ export declare class BotWeaponGenerator { /** * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. * Additionally, adds extra bullets to SecuredContainer - * @param weaponMods mods to attach to weapon - * @param weaponTemplate db template for weapon - * @param magCounts magazine count to add to inventory - * @param ammoTpl ammo templateId to add to magazines - * @param inventory inventory to add magazines to - * @param botRole the bot type we're getting generating extra mags for - * @returns + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for */ - addExtraMagazinesToInventory(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory, botRole: string): void; - /** - * Create a magazine using the parameters given - * @param magazineTpl Tpl of the magazine to create - * @param ammoTpl Ammo to add to magazine - * @param magTemplate template object of magazine - * @returns Item array - */ - protected createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; - /** - * Get a randomised number of bullets for a specific magazine - * @param magCounts min and max count of magazines - * @param magTemplate magazine to generate bullet count for - * @returns bullet count number - */ - protected getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; - /** - * Get a randomised count of magazines - * @param magCounts min and max value returned value can be between - * @returns numberical value of magazine count - */ - protected getRandomisedMagazineCount(magCounts: MinMax): number; + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; /** * Add ammo to the secure container * @param stackCount How many stacks of ammo to add @@ -131,13 +111,6 @@ export declare class BotWeaponGenerator { * @returns magazine tpl string */ protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; - /** - * Get a weapons default magazine template id - * @param weaponTemplate weapon to get default magazine for - * @returns tpl of magazine - */ - protected getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; - protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void; /** * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) * @param ammo a list of ammo tpls the weapon can use diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/LootGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/LootGenerator.d.ts index fdefa6d..bbc1915 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/generators/LootGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/LootGenerator.d.ts @@ -6,14 +6,16 @@ import { LootRequest } from "../models/spt/services/LootRequest"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { ItemFilterService } from "../services/ItemFilterService"; +import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; export declare class LootGenerator { protected logger: ILogger; + protected hashUtil: HashUtil; protected databaseServer: DatabaseServer; protected randomUtil: RandomUtil; protected itemHelper: ItemHelper; protected itemFilterService: ItemFilterService; - constructor(logger: ILogger, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, itemFilterService: ItemFilterService); + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, itemFilterService: ItemFilterService); /** * Generate a list of items based on options passed in * @param options parameters to adjust what loot is generated @@ -33,13 +35,14 @@ export declare class LootGenerator { * Find a random item in items.json and add to result array * @param items items to choose from * @param itemTypeCounts item limit counts + * @param options item filters * @param result array to add found item to * @returns true if item was valid and added to pool */ protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, result: LootItem[]): boolean; + }>, options: LootRequest, result: LootItem[]): boolean; /** * * Find a random item in items.json and add to result array diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/RagfairAssortGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/RagfairAssortGenerator.d.ts index cbdd7f2..db4811d 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/generators/RagfairAssortGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/RagfairAssortGenerator.d.ts @@ -1,5 +1,8 @@ import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -8,18 +11,40 @@ export declare class RagfairAssortGenerator { protected hashUtil: HashUtil; protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; protected generatedAssortItems: Item[]; - constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer); + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); /** * Get an array of unique items that can be sold on the flea * @returns array of unique items */ getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ protected assortsAreGenerated(): boolean; /** * Generate an array of items the flea can sell * @returns array of unique items */ protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ protected createRagfairAssortItem(tplId: string, id?: string): Item; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/InventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..4fcb1e2 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,14 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotGeneratorHelper.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotGeneratorHelper.d.ts index eb0d215..5e3e501 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotGeneratorHelper.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotGeneratorHelper.d.ts @@ -1,8 +1,7 @@ import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; -import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; -import { Grid, ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -12,11 +11,23 @@ import { ItemFilterService } from "../services/ItemFilterService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGeneratorHelper } from "./BotWeaponGeneratorHelper"; import { ContainerHelper } from "./ContainerHelper"; import { InventoryHelper } from "./InventoryHelper"; import { ItemHelper } from "./ItemHelper"; import { ProbabilityHelper } from "./ProbabilityHelper"; import { ProfileHelper } from "./ProfileHelper"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} export declare class BotGeneratorHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; @@ -31,11 +42,11 @@ export declare class BotGeneratorHelper { protected botEquipmentFilterService: BotEquipmentFilterService; protected itemFilterService: ItemFilterService; protected profileHelper: ProfileHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, configServer: ConfigServer); + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, configServer: ConfigServer); /** - * TODO - very similar to generateModsForWeapon * Check mods are compatible and add to array * @param equipment Equipment item to add mods to * @param modPool Mod list to choose frm @@ -46,18 +57,51 @@ export declare class BotGeneratorHelper { */ generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; /** - * TODO - very similar to generateModsForEquipment * @param sessionId session id * @param weapon Weapon to add mods to - * @param modPool pool of compatible mods to attach to gun + * @param modPool Pool of compatible mods to attach to weapon * @param weaponParentId parentId of weapon - * @param parentTemplate - * @param modSpawnChances - * @param ammoTpl ammo tpl to use when generating magazines/cartridges - * @param botRole role of bot weapon is generated for - * @returns Weapon with mods + * @param parentWeaponTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @returns Weapon + mods array */ - generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string): Item[]; + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentWeaponTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string): Item[]; + /** + * + * @param modSlot + * @param isRandomisableSlot + * @param modsParent + * @param botEquipBlacklist + * @param itemModPool + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate + * @returns + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, modsParent: Slot, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Check if mod item is on limited list + has surpassed the limit set for it + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @returns true if over item limit + */ + protected modHasReachedItemLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits): boolean; + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + protected initModLimits(botRole: string): BotModLimits; /** * Generate a pool of mods for this bots mod type if bot has values inside `randomisedWeaponModSlots` array found in bot.json/equipment[botrole] * @param allowedMods Mods to be added to mod pool @@ -65,10 +109,24 @@ export declare class BotGeneratorHelper { * @param modSlot Slot to generate mods for * @param itemModPool base mod pool to replace values of */ - protected generateDynamicModPool(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string, itemModPool: Record): void; + protected generateDynamicWeaponModPool(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string, itemModPool: Record): void; + /** + * Find all compatible mods for equipment item and add to modPool + * @param itemDetails item to find mods for + * @param modPool ModPool to add mods to + */ + generateDynamicModPool(itemDetails: ITemplateItem, modPool: Mods): void; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; /** * Check if the specific item type on the weapon has reached the set limit - * @param modTpl item to check is limited + * @param modTpl log mod tpl if over type limit * @param currentCount current number of this item on gun * @param maxLimit mod limit allowed * @param botRole role of bot we're checking weapon of @@ -78,16 +136,14 @@ export declare class BotGeneratorHelper { count: number; }, maxLimit: number, botRole: string): boolean; /** - * log errors if mod is not valid for a slot - * @param modTpl - * @param found - * @param itemSlot - * @param modTemplate - * @param modSlot - * @param parentTemplate + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate tempalte of the mods parent item * @returns true if valid */ - protected isModValidForSlot(modTpl: string, found: boolean, itemSlot: Slot, modTemplate: ITemplateItem, modSlot: string, parentTemplate: ITemplateItem): boolean; + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; /** * Create a mod item with parameters as properties * @param modId _id @@ -98,12 +154,6 @@ export declare class BotGeneratorHelper { * @returns Item object */ protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem): Item; - /** - * Is this magazine cylinder related (revolvers and grenade launchers) - * @param magazineParentName the name of the magazines parent - * @returns true if it is cylinder related - */ - magazineIsCylinderRelated(magazineParentName: string): boolean; /** * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot * never return true for an item that has 0% spawn chance @@ -115,7 +165,7 @@ export declare class BotGeneratorHelper { protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; /** * Get a list of containers that hold ammo - * e.g. mod_magazine + * e.g. mod_magazine / patron_in_weapon_000 * @returns string array */ protected getAmmoContainers(): string[]; @@ -168,6 +218,14 @@ export declare class BotGeneratorHelper { * @returns Repairable object */ protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; + /** + * Get a random mod from an items compatible mods Filter array + * @param modTpl + * @param parentSlot + * @param modSlot + * @param items + * @returns item tpl + */ protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** * Can an item be added to an item without issue @@ -177,23 +235,6 @@ export declare class BotGeneratorHelper { * @returns true if possible */ isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean; - /** - * Adds an item with all its childern into specified equipmentSlots, wherever it fits. - * @param equipmentSlots - * @param parentId - * @param parentTpl - * @param itemWithChildren - * @param inventory - * @returns a `boolean` indicating item was added - */ - addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean; - /** - * is the provided item allowed inside a container - * @param slot location item wants to be placed in - * @param itemTpl item being placed - * @returns true if allowed - */ - protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; } /** TODO - move into own class */ export declare class ExhaustableArray { diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotHelper.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotHelper.d.ts index 9b89481..18738e5 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotHelper.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotHelper.d.ts @@ -13,11 +13,34 @@ export declare class BotHelper { protected configServer: ConfigServer; protected botConfig: IBotConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retreive difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ getBotTemplate(role: string): IBotType; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ getPmcDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; /** * Randomise the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent * @param difficultySettings pmc difficulty settings */ randomisePmcHostility(difficultySettings: Difficulty): void; @@ -31,7 +54,7 @@ export declare class BotHelper { */ addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; /** - * Add a bot to the ENEMY_BOT_TYPES array + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list * @param difficultySettings bot settings to alter * @param typesToAdd bot type to add to enemy list */ @@ -42,4 +65,10 @@ export declare class BotHelper { * @param typesToAdd bot type to add to revenge list */ addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..7e25f56 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,78 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper); + /** + * Get a randomised number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomised count of magazines + * @param magCounts min and max value returned value can be between + * @returns numberical value of magazine count + */ + getRandomisedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartrdiges to a bots inventory (vest/pocket) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + */ + addBulletsToVestAndPockets(ammoTpl: string, cartridgeCount: number, inventory: Inventory): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * Adds an item with all its childern into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/ItemHelper.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/ItemHelper.d.ts index de10892..0effaf2 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/ItemHelper.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/ItemHelper.d.ts @@ -20,7 +20,7 @@ declare class ItemHelper { protected databaseServer: DatabaseServer; constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer); /** - * Checks if a id is a valid item. Valid meaning that it's an item that be stored in stash + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash * @param {string} tpl the template id / tpl * @returns boolean; true for items that may be in player posession and not quest items */ @@ -79,6 +79,11 @@ declare class ItemHelper { * @returns {array} The array of StackSlotItems */ generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; /** * Gets item data from items.json * @param tpl items template id to look up diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/RepairHelper.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/RepairHelper.d.ts index 9a3ab29..5b09320 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/helpers/RepairHelper.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/helpers/RepairHelper.d.ts @@ -14,8 +14,17 @@ export declare class RepairHelper { protected configServer: ConfigServer; protected repairConfig: IRepairConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); - updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit?: boolean, applyRandomDegradation?: boolean): Item; - protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number): number; - protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, armorMax: number): number; + /** + * + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; isWeaponTemplate(tpl: string): boolean; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/loaders/PreAkiModLoader.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/loaders/PreAkiModLoader.d.ts index d310ae2..4ab1689 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/loaders/PreAkiModLoader.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/loaders/PreAkiModLoader.d.ts @@ -44,9 +44,9 @@ export declare class PreAkiModLoader implements IModLoader { */ protected getDuplicates(stringArray: string[]): string[]; /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array */ protected getBrokenMods(mods: string[]): string[]; /** @@ -68,7 +68,12 @@ export declare class PreAkiModLoader implements IModLoader { protected addMod(mod: string): Promise; protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; protected getLoadOrder(mods: Record): Record; getContainer(): DependencyContainer; diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/IGlobals.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/IGlobals.d.ts index 9d28dbc..81e2023 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/IGlobals.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/IGlobals.d.ts @@ -1175,5 +1175,6 @@ export interface Preset { _name: string; _parent: string; _items: Item[]; + /** Default presets have this property */ _encyclopedia?: string; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/tables/IBotBase.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/tables/IBotBase.d.ts index 64166f4..25cb861 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/tables/IBotBase.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/tables/IBotBase.d.ts @@ -28,6 +28,8 @@ export interface IBotBase { CarExtractCounts: CarExtractCounts; SurvivorClass: SurvivorClass; WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; } export interface Info { EntryPoint: string; diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts index 6b2fa8f..8569e61 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/eft/common/tables/ITemplateItem.d.ts @@ -80,7 +80,7 @@ export interface Props { HasShoulderContact?: boolean; SightingRange?: number; DoubleActionAccuracyPenaltyMult?: number; - ModesCount: any; + ModesCount?: any; DurabilityBurnModificator?: number; HeatFactor?: number; CoolFactor?: number; @@ -156,7 +156,7 @@ export interface Props { RigLayoutName?: string; MaxDurability?: number; armorZone?: string[]; - armorClass: any; + armorClass?: any; mousePenalty?: number; weaponErgonomicPenalty?: number; BluntThroughput?: number; @@ -254,8 +254,8 @@ export interface Props { foodUseTime?: number; foodEffectType?: string; StimulatorBuffs?: string; - effects_health: any; - effects_damage: any; + effects_health?: any; + effects_damage?: any; MaximumNumberOfUsage?: number; knifeHitDelay?: number; knifeHitSlashRate?: number; diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/enums/BaseClasses.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/enums/BaseClasses.d.ts index 37c1398..36ebc71 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/enums/BaseClasses.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/enums/BaseClasses.d.ts @@ -25,6 +25,7 @@ export declare enum BaseClasses { SIGHTS = "5448fe7a4bdc2d6f028b456b", MEDS = "543be5664bdc2dd4348b4569", MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", KEY = "543be5e94bdc2df1348b4568", KEY_MECHANICAL = "5c99f98d86f7745c314214b3", KEYCARD = "5c164d2286f774194c5e69fa", @@ -66,7 +67,6 @@ export declare enum BaseClasses { LUBRICANT = "57864e4c24597754843f8723", BATTERY = "57864ee62459775490116fc1", ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", - REFLEX_SIGHT = "55818ad54bdc2ddc698b4569", TACTICAL_COMBO = "55818b164bdc2ddc698b456c", FLASHLIGHT = "55818b084bdc2d5b648b4571", MAGAZINE = "5448bc234bdc2d3c308b4569", diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/enums/WeaponTypes.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IAirdropConfig.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IAirdropConfig.d.ts index 8b7fffc..3edcbdd 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IAirdropConfig.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IAirdropConfig.d.ts @@ -25,4 +25,6 @@ export interface AirdropLoot { itemTypeWhitelist: string[]; /** key: item base type: value: max count */ itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IBotConfig.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IBotConfig.d.ts index f15fa73..af8ceba 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IBotConfig.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IBotConfig.d.ts @@ -24,7 +24,7 @@ export interface IBotConfig extends IBaseConfig { /** Show a bots botType value after their name */ showTypeInNickname: boolean; /** Max number of bots that can be spawned in a raid at any one time */ - maxBotCap: number; + maxBotCap: Record; /** How many stacks of secret ammo should a bot have in its bot secure container */ secureContainerAmmoStackCount: number; } @@ -65,6 +65,7 @@ export interface LootNvalue { export interface EquipmentFilters { weaponModLimits: ModLimits; randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; blacklist: EquipmentFilterDetails[]; whitelist: EquipmentFilterDetails[]; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IPmcConfig.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IPmcConfig.d.ts index 655b58d..9db2ba1 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IPmcConfig.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IPmcConfig.d.ts @@ -7,14 +7,18 @@ export interface IPmcConfig { looseWeaponInBackpackLootMinMax: MinMax; isUsec: number; chanceSameSideIsHostilePercent: number; - usecType: string; - bearType: string; + /** key: location, value: type for usec/bear */ + pmcType: Record; maxBackpackLootTotalRub: number; maxPocketLootTotalRub: number; maxVestLootTotalRub: number; convertIntoPmcChance: Record; enemyTypes: string[]; } +export interface PmcTypes { + usec: string; + bear: string; +} export interface DynamicLoot { whitelist: string[]; blacklist: string[]; diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IRagfairConfig.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IRagfairConfig.d.ts index 3088717..c1b8763 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IRagfairConfig.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/config/IRagfairConfig.d.ts @@ -39,6 +39,7 @@ export interface Dynamic { offerItemCount: MinMax; price: MinMax; presetPrice: MinMax; + showDefaultPresetsOnly: boolean; endTimeSeconds: MinMax; condition: Condition; stackablePercent: MinMax; diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/location/AirDropLootItem.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/location/AirDropLootItem.d.ts new file mode 100644 index 0000000..da791ff --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/location/AirDropLootItem.d.ts @@ -0,0 +1,6 @@ +export declare class AirDropLootItem { + id: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/services/LootItem.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/services/LootItem.d.ts index 2838472..acb7606 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/services/LootItem.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/services/LootItem.d.ts @@ -1,4 +1,5 @@ export declare class LootItem { + id?: string; tpl: string; isPreset: boolean; stackCount: number; diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/services/LootRequest.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/services/LootRequest.d.ts index 64b4e5c..1da8770 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/services/LootRequest.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/models/spt/services/LootRequest.d.ts @@ -6,4 +6,6 @@ export declare class LootRequest { itemTypeWhitelist: string[]; /** key: item base type: value: max count */ itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/servers/DatabaseServer.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/servers/DatabaseServer.d.ts index aa152d0..b3d29e9 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/servers/DatabaseServer.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/servers/DatabaseServer.d.ts @@ -2,5 +2,5 @@ import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; export declare class DatabaseServer { protected tableData: IDatabaseTables; getTables(): IDatabaseTables; - setTables(any: any): void; + setTables(tableData: IDatabaseTables): void; } diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/services/BotGenerationCacheService.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..670c583 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,52 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected botHelper: BotHelper; + protected storedBots: IBotBase[]; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore + */ + storeBots(botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param role role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(role: string): IBotBase[]; + /** + * Find a bot by its index from cache + * @param indexOfBotToReturn index to find bot by + * @returns bot profile + */ + protected getBotFromCache(indexOfBotToReturn: number): IBotBase; + /** + * Remove bot profile by index from cache + * @param indexOfBotToReturn Index of bot profile to remove + */ + protected removeBotFromCache(indexOfBotToReturn: number): void; + /** + * Get index of bot profile that matches criteria + * @param role role of bot we want + * @param getPmc is requested bot a pmc + * @returns index of found bot + */ + protected getIndexOfBotToReturn(role: string, getPmc: boolean): number; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have bots + * @returns true if empty + */ + cacheIsEmpty(): boolean; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/services/BotLootCacheService.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/services/BotLootCacheService.d.ts index cc71eee..00ffb9c 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/services/BotLootCacheService.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/services/BotLootCacheService.d.ts @@ -34,6 +34,17 @@ export declare class BotLootCacheService { * @param isPmc Is the bot a PMC (alteres what loot is cached) */ protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; /** * Ammo/grenades have this property * @param props diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/services/FenceService.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/services/FenceService.d.ts index c940507..23fbf52 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/services/FenceService.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/services/FenceService.d.ts @@ -55,6 +55,17 @@ export declare class FenceService { * Replace a percentage of fence assorts with freshly generated items */ performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; /** * Choose an item (not mod) at random and remove from assorts */ diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/services/PmcAiService.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/services/PmcAiService.d.ts new file mode 100644 index 0000000..0690f1f --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/services/PmcAiService.d.ts @@ -0,0 +1,27 @@ +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +/** Storing/retreving pmcRoles set at the start of a raid - its done at that point as we know what location the player is heading to */ +export declare class PmcAiService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected usecRole: string; + protected bearRole: string; + constructor(logger: ILogger, configServer: ConfigServer); + /** + * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) + * @param pmcSide eft side (usec/bear) + * @returns pmc side as defined in config + */ + getPmcRole(pmcSide: "usec" | "bear" | string): string; + /** + * Set the roles for pmcs + * @param location map location to look up and use as pmc types + */ + setPmcRolesByLocation(location: string): void; + /** + * Clear the saved role from usec/bear PMCs + */ + clearPmcRoles(): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/services/RepairService.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/services/RepairService.d.ts new file mode 100644 index 0000000..3e6077c --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/dist/types/services/RepairService.d.ts @@ -0,0 +1,75 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected itemEventRouter: ItemEventRouter; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + repairConfig: IRepairConfig; + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + * @param output IItemEventRouterResponse + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData, output: IItemEventRouterResponse): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; +} diff --git a/KcY-SeeItemValue/itemValue/server/dist/types/utils/RandomUtil.d.ts b/KcY-SeeItemValue/itemValue/server/dist/types/utils/RandomUtil.d.ts index e35d21f..633e472 100644 --- a/KcY-SeeItemValue/itemValue/server/dist/types/utils/RandomUtil.d.ts +++ b/KcY-SeeItemValue/itemValue/server/dist/types/utils/RandomUtil.d.ts @@ -136,7 +136,7 @@ export declare class RandomUtil { * Drawing can be with or without replacement * @param {array} list The array we want to draw randomly from * @param {integer} count The number of times we want to draw - * @param {boolean} replacement Draw with ot without replacement from the input array + * @param {boolean} replacement Draw with or without replacement from the input array * @return {array} Array consisting of N random elements */ drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; diff --git a/KcY-SeeItemValue/itemValue/server/package.json b/KcY-SeeItemValue/itemValue/server/package.json index 5d2e658..2315f8e 100644 --- a/KcY-SeeItemValue/itemValue/server/package.json +++ b/KcY-SeeItemValue/itemValue/server/package.json @@ -1,10 +1,10 @@ { "name": "SeeItemValue", "author": "KcY", - "version": "1.4.3", + "version": "1.4.4", "license": "NCSA Open Source", "main": "src/mod.js", - "akiVersion": "3.2.2", + "akiVersion": "3.2.3", "UpdatedBy": "CWX", "scripts": { "setup:environment": "npm i", diff --git a/KcY-SeeItemValue/itemValue/server/src/mod.ts b/KcY-SeeItemValue/itemValue/server/src/mod.ts index cc7a0ac..95d43ef 100644 --- a/KcY-SeeItemValue/itemValue/server/src/mod.ts +++ b/KcY-SeeItemValue/itemValue/server/src/mod.ts @@ -8,32 +8,29 @@ import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil" import { IDatabaseTables } from "@spt-aki/models/spt/server/IDatabaseTables"; import { ITemplateItem } from "@spt-aki/models/eft/common/tables/ITemplateItem"; import { IHandbookBase } from "@spt-aki/models/eft/common/tables/IHandbookBase"; +import { ITraderBase } from "@spt-aki/models/eft/common/tables/ITrader"; class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod { - - private pkg; private logger: ILogger; - private database: DatabaseServer; private router: DynamicRouterModService; private http: HttpResponseUtil; private items: Record; private table: IDatabaseTables; private livePrice; private handbookTable: IHandbookBase; - private therapist; - private ragman; - private jaeger; - private mechanic; - private prapor; - private peacekeeper; - private skier; - private fence; - private tradersArr; + private therapist: ITraderBase; + private ragman: ITraderBase; + private jaeger: ITraderBase; + private mechanic: ITraderBase; + private prapor: ITraderBase; + private peacekeeper: ITraderBase; + private skier: ITraderBase; + private fence: ITraderBase; + private tradersArr: ITraderBase[]; private cfg; public preAkiLoad(container: DependencyContainer): void { - this.pkg = require("../package.json"); this.router = container.resolve("DynamicRouterModService"); this.logger = container.resolve("WinstonLogger"); this.http = container.resolve("HttpResponseUtil"); @@ -43,8 +40,8 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod } public postAkiLoad(container: DependencyContainer): void { - this.database = container.resolve("DatabaseServer"); - this.table = this.database.getTables(); + this.table = container.resolve("DatabaseServer").getTables(); + this.items = this.table.templates.items; this.livePrice = this.table.templates.prices; this.handbookTable = this.table.templates.handbook; @@ -87,134 +84,123 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod private getIdPrice(id: string): any { - let sPrice = 1; - let sMutli = 1; - let parentId = ""; - let origiMax = 1; - let result = { multiplier: 1, price: 1, - originalMax: 1 + originalMax: 1, + traderName: "Default" }; + // if ID is roubles - return 1 if (id === "5449016a4bdc2d6f028b456f") { - this.debugMode("Item was Roubles - returning 1 as price", "yellow"); + this.debugMode("Item was Roubles - returning 1 as price"); return result; } - if (this.cfg.TraderPrice === false) + // if config is set to false (live price) + if (!this.cfg.TraderPrice) { - result.multiplier = 1; - result.price = this.livePrice[id]; - result.originalMax = 1; + result.traderName = "Flea"; + // return price if it exists else return 1 if (this.livePrice[id]) { - this.debugMode("Config setting false for traders - returning livePrice AVG", "yellow"); - return result - } - } + result.price = this.livePrice[id]; - for (const i in this.handbookTable.Items) - { - if (this.handbookTable.Items[i].Id === id) - { - parentId = this.handbookTable.Items[i].ParentId; - this.debugMode(`ID was found in handbook - parentID = ${parentId}`, "yellow"); - - sMutli = this.getBestTraderMulti(parentId); - this.debugMode(`Multi returned from getBestTraderMulti method was = ${sMutli}`, "yellow"); - - sPrice = this.handbookTable.Items[i].Price; - this.debugMode(`Price taken from handbook.items = ${sPrice}`, "yellow"); - - origiMax = this.getOrigiDura(id); - this.debugMode(`Original max is: ${origiMax}`, "yellow"); - - result.multiplier = sMutli; - result.price = sPrice; - result.originalMax = origiMax; - - this.debugMode(`Object built to return to client = ${result.multiplier} and ${result.price}`, "yellow"); + this.debugMode(`Config setting false for traders - returning livePrice AVG found`); return result; - } + } + else + { + this.debugMode(`Config setting false for traders - unable to find livePrice - returning 1`); + return result; + } } - this.debugMode(`No item found in handbook, returning default ${sPrice}`, "yellow"); - return result; - } - - private getBestTraderMulti(parentId: string): number - { - let traderSellCat = ""; - let altTraderSellCat = ""; - let altAltTraderSellCat = ""; - - for (const i in this.handbookTable.Categories) + // if config is set to true (trader prices) + if (this.cfg.TraderPrice) { - if (this.handbookTable.Categories[i].Id === parentId) + // search through all items in handbook + let item = this.handbookTable.Items.find(x => x.Id === id); + + // if ID is found in handbook else returns default result object + if (item) { - this.debugMode("Found category from item parent ID", "yellow"); - - traderSellCat = this.handbookTable.Categories[i].Id; - this.debugMode(`Storing trader sell category = ${traderSellCat}`, "yellow"); - - altTraderSellCat = this.handbookTable.Categories[i].ParentId; - this.debugMode(`Storing trader Alt sell category = ${altTraderSellCat}`, "yellow"); - - for (const a in this.handbookTable.Categories) + // gets price of item from handbook else return 1 + if (item.Price) { - if (this.handbookTable.Categories[a].Id === altTraderSellCat) - { - altAltTraderSellCat = this.handbookTable.Categories[a].ParentId; - this.debugMode(`Alt sell category has parent, storing that = ${altAltTraderSellCat}`, "yellow"); - - break; - } + result.price = item.Price; + this.debugMode(`Price found in handbook - ${result.price}`); } - break; + else + { + result.price = 1; + this.debugMode(`unable to find price in handbook for ID - ${id}`); + } + + // gets parent of ID from handbook and trader multiplier else returns "" and 1 + if (item.ParentId) + { + this.debugMode(`ParentID found in handbook - ${item.ParentId}`); + + const { k1, k2 } = this.getBestTraderMulti(item.ParentId); + + result.multiplier = k1; + result.traderName = k2; + + this.debugMode(`Best multiplier is ${result.multiplier}`); + this.debugMode(`Best Trader name is ${result.traderName}`); + } + else + { + result.multiplier = 1; + this.debugMode(`Unable to find ParentID in handbook for ID - ${id}`); + this.debugMode(`Returning 1 for multiplier`); + } + + // gets original max durability of resource type for item + result.originalMax = this.getOrigiDura(id); + this.debugMode(`Original max is ${result.originalMax}`); + + return result; + } + else + { + this.debugMode(`No item found in handbook, returning default result`); + return result; } } - - for (let iter = 0; iter < this.tradersArr.length; iter++) - { - if (this.tradersArr[iter].sell_category.includes(traderSellCat)) - { - this.debugMode(`base sell category found for trader number ${iter} - category is = ${traderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - - if (this.tradersArr[iter].sell_category.includes(altTraderSellCat)) - { - this.debugMode(`alt sell category found for trader number ${iter} - category is = ${altTraderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - - if (this.tradersArr[iter].sell_category.includes(altAltTraderSellCat)) - { - this.debugMode(`alt alt sell category found for trader number ${iter} - category is = ${altAltTraderSellCat}`, "yellow"); - return this.getBestTraderInfo(iter); - } - } - return 1; } - private getBestTraderInfo(trader: number): number + private getBestTraderMulti(parentId: string): any { - let traderMulti = 0.54; - let traderName = ""; + let firstCat = this.handbookTable.Categories.find(x => x.Id === parentId); + let secondCat = firstCat.ParentId + let thirdCat = this.handbookTable.Categories.find(x => x.Id === secondCat).ParentId; - traderMulti = (100 - this.tradersArr[trader].loyaltyLevels[0].buy_price_coef) / 100; - this.debugMode(`Trader mutli for above is = ${traderMulti}`, "yellow"); - traderName = this.tradersArr[trader].nickname; - this.debugMode(`Trader name is = ${traderName}`, "yellow"); + if (firstCat.Id || secondCat || thirdCat) + { + for (let i in this.tradersArr) + { + if (this.tradersArr[i].sell_category.includes(firstCat.Id) || + this.tradersArr[i].sell_category.includes(secondCat) || + this.tradersArr[i].sell_category.includes(thirdCat)) + { + let multi = (100 - this.tradersArr[i].loyaltyLevels[0].buy_price_coef) / 100; + let name = this.tradersArr[i].nickname; - return traderMulti; + return {k1: multi, k2: name}; + } + } + } + else + { + return 1; + } } - private debugMode(text: string, color: string): void + private debugMode(text: string, color: string = `yellow`): void { if (this.cfg.DebugMode) { @@ -248,6 +234,7 @@ class SeeItemValue implements IPreAkiLoadMod, IPostAkiLoadMod { return this.items[item]._props.MaxRepairResource; } + return 1; } } diff --git a/KcY-SeeItemValue/itemValue/server/types/callbacks/RepairCallbacks.d.ts b/KcY-SeeItemValue/itemValue/server/types/callbacks/RepairCallbacks.d.ts index 63733fa..14edeeb 100644 --- a/KcY-SeeItemValue/itemValue/server/types/callbacks/RepairCallbacks.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/callbacks/RepairCallbacks.d.ts @@ -6,6 +6,20 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa export declare class RepairCallbacks { protected repairController: RepairController; constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; } diff --git a/KcY-SeeItemValue/itemValue/server/types/context/ContextVariable.d.ts b/KcY-SeeItemValue/itemValue/server/types/context/ContextVariable.d.ts index e438947..0fe0a63 100644 --- a/KcY-SeeItemValue/itemValue/server/types/context/ContextVariable.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/context/ContextVariable.d.ts @@ -4,7 +4,7 @@ export declare class ContextVariable { private timestamp; private type; constructor(value: any, type: ContextVariableType); - getValue(): any; + getValue(): T; getTimestamp(): Date; getType(): ContextVariableType; } diff --git a/KcY-SeeItemValue/itemValue/server/types/controllers/BotController.d.ts b/KcY-SeeItemValue/itemValue/server/types/controllers/BotController.d.ts index 5e6f05d..a5111d5 100644 --- a/KcY-SeeItemValue/itemValue/server/types/controllers/BotController.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/controllers/BotController.d.ts @@ -1,3 +1,4 @@ +import { ApplicationContext } from "../context/ApplicationContext"; import { BotGenerator } from "../generators/BotGenerator"; import { BotHelper } from "../helpers/BotHelper"; import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; @@ -5,15 +6,22 @@ import { IBotBase } from "../models/eft/common/tables/IBotBase"; import { IBotCore } from "../models/eft/common/tables/IBotCore"; import { Difficulty } from "../models/eft/common/tables/IBotType"; import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { PmcAiService } from "../services/PmcAiService"; export declare class BotController { + protected logger: ILogger; protected databaseServer: DatabaseServer; protected botGenerator: BotGenerator; protected botHelper: BotHelper; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; protected botConfig: IBotConfig; - constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, configServer: ConfigServer, applicationContext: ApplicationContext); /** * Return the number of bot loadout varieties to be generated * @param type bot Type we want the loadout gen count for @@ -29,7 +37,18 @@ export declare class BotController { * @returns Difficulty object */ getBotDifficulty(type: string, difficulty: string): Difficulty; - protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty; + protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ getBotCap(): number; } diff --git a/KcY-SeeItemValue/itemValue/server/types/controllers/GameController.d.ts b/KcY-SeeItemValue/itemValue/server/types/controllers/GameController.d.ts index d374453..2d00898 100644 --- a/KcY-SeeItemValue/itemValue/server/types/controllers/GameController.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/controllers/GameController.d.ts @@ -7,11 +7,13 @@ import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { IHttpConfig } from "../models/spt/config/IHttpConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { LocaleService } from "../services/LocaleService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { Watermark } from "../utils/Watermark"; export declare class GameController { protected logger: ILogger; + protected databaseServer: DatabaseServer; protected watermark: Watermark; protected httpServerHelper: HttpServerHelper; protected localeService: LocaleService; @@ -20,8 +22,12 @@ export declare class GameController { protected configServer: ConfigServer; protected httpConfig: IHttpConfig; protected coreConfig: ICoreConfig; - constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer); gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; protected logProfileDetails(fullProfile: IAkiProfile): void; getGameConfig(sessionID: string): IGameConfigResponse; getServer(): any[]; diff --git a/KcY-SeeItemValue/itemValue/server/types/controllers/MatchController.d.ts b/KcY-SeeItemValue/itemValue/server/types/controllers/MatchController.d.ts index cb40023..07f6a89 100644 --- a/KcY-SeeItemValue/itemValue/server/types/controllers/MatchController.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/controllers/MatchController.d.ts @@ -15,8 +15,10 @@ import { IMatchConfig } from "../models/spt/config/IMatchConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; import { BotLootCacheService } from "../services/BotLootCacheService"; import { MatchLocationService } from "../services/MatchLocationService"; +import { PmcAiService } from "../services/PmcAiService"; import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; export declare class MatchController { protected logger: ILogger; @@ -27,11 +29,13 @@ export declare class MatchController { protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; protected profileSnapshotService: ProfileSnapshotService; + protected pmcAiService: PmcAiService; + protected botGenerationCacheService: BotGenerationCacheService; protected applicationContext: ApplicationContext; protected matchConfig: IMatchConfig; protected inraidConfig: IInRaidConfig; protected botConfig: IBotConfig; - constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, applicationContext: ApplicationContext); + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, pmcAiService: PmcAiService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); getEnabled(): boolean; getProfile(info: IGetProfileRequestData): IPmcData[]; createGroup(sessionID: string, info: ICreateGroupRequestData): any; diff --git a/KcY-SeeItemValue/itemValue/server/types/controllers/RepairController.d.ts b/KcY-SeeItemValue/itemValue/server/types/controllers/RepairController.d.ts index 0e78ef6..ae54a53 100644 --- a/KcY-SeeItemValue/itemValue/server/types/controllers/RepairController.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/controllers/RepairController.d.ts @@ -8,9 +8,9 @@ import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepa import { IRepairConfig } from "../models/spt/config/IRepairConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ItemEventRouter } from "../routers/ItemEventRouter"; -import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; export declare class RepairController { protected logger: ILogger; protected itemEventRouter: ItemEventRouter; @@ -19,23 +19,23 @@ export declare class RepairController { protected traderHelper: TraderHelper; protected paymentService: PaymentService; protected repairHelper: RepairHelper; - protected configServer: ConfigServer; + protected repairService: RepairService; protected repairConfig: IRepairConfig; - constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); /** * Repair with trader - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; /** * Repair with repair kit - * @param pmcData player profile - * @param body endpoint request data * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile * @returns item event router action */ - repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; } diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/BotGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/BotGenerator.d.ts index 7d58f95..2ac51db 100644 --- a/KcY-SeeItemValue/itemValue/server/types/generators/BotGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/generators/BotGenerator.d.ts @@ -9,6 +9,7 @@ import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { PmcAiService } from "../services/PmcAiService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; @@ -30,9 +31,10 @@ export declare class BotGenerator { protected botEquipmentFilterService: BotEquipmentFilterService; protected botHelper: BotHelper; protected gameEventHelper: GameEventHelper; + protected pmcAiService: PmcAiService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, pmcAiService: PmcAiService, configServer: ConfigServer); /** * Generate a player scav bot object * @param role e.g. assault / pmcbot @@ -41,13 +43,13 @@ export declare class BotGenerator { * @returns */ generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; - generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; /** - * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check - * @param botRole the bot role to check if should be a pmc - * @returns true if should be a pmc + * Generate an array of bot objects for populate a raid with + * @param sessionId session id + * @param info request object + * @returns bot array */ - protected shouldBotBePmc(botRole: string): boolean; + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; /** * Get a randomised PMC side based on bot config value 'isUsec' * @returns pmc side as string @@ -58,12 +60,30 @@ export declare class BotGenerator { * @returns IBotBase object */ protected getCloneOfBotBase(): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param role botRole bot will use + * @param node Bot template from db/bots/x.json + * @param isPmc Is bot to be a PMC + * @param isPlayerScav is bot to be a p scav bot + * @returns IBotBase object + */ protected generateBot(sessionId: string, bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase; /** * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client */ protected logPmcGeneratedCount(output: IBotBase[]): void; - protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult; + /** + * Return a randomised bot level and exp value + * @param role botRole being generated for + * @param min Min exp value + * @param max Max exp value + * @returns IRandomisedBotLevelResult object + */ + protected generateRandomLevel(role: string, min: number, max: number): BotGenerator.IRandomisedBotLevelResult; /** * Converts health object to the required format * @param healthObj health object from bot json @@ -72,19 +92,23 @@ export declare class BotGenerator { */ protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; protected generateSkills(skillsObj: Skills): Skills; - /** - * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) - * @param pmcSide eft side (usec/bear) - * @returns pmc side as defined in config - */ - protected getPmcRole(pmcSide: string): string; /** * Iterate through bots inventory and loot to find and remove christmas items (as defined in GameEventHelper) * @param nodeInventory Bots inventory to iterate over */ protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ protected generateId(bot: IBotBase): IBotBase; protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ protected getPMCDifficulty(requestedDifficulty: string): string; /** * Add a side-specific (usec/bear) dogtag item to a bots inventory diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/BotInventoryGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/BotInventoryGenerator.d.ts index 73f8ece..c5ed545 100644 --- a/KcY-SeeItemValue/itemValue/server/types/generators/BotInventoryGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/generators/BotInventoryGenerator.d.ts @@ -1,13 +1,16 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; -import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType"; +import { Chances, Generation, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; -import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; -import { BotWeaponGenerator } from "./BotWeaponGenerator"; import { BotLootGenerator } from "./BotLootGenerator"; -import { ILogger } from "../models/spt/utils/ILogger"; -import { DatabaseServer } from "../servers/DatabaseServer"; -import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; export declare class BotInventoryGenerator { protected logger: ILogger; protected hashUtil: HashUtil; @@ -17,8 +20,14 @@ export declare class BotInventoryGenerator { protected botLootGenerator: BotLootGenerator; protected botGeneratorHelper: BotGeneratorHelper; protected weightedRandomHelper: WeightedRandomHelper; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper); - generateInventory(sessionId: string, templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer); + generateInventory(sessionId: string, templateInventory: Inventory, equipmentChances: Chances, itemGenerationLimitsMinMax: Generation, botRole: string, isPmc: boolean): PmcInventory; + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation): void; protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void; protected generateInventoryBase(): PmcInventory; } diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/BotLootGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/BotLootGenerator.d.ts index 5a2d144..c1f5310 100644 --- a/KcY-SeeItemValue/itemValue/server/types/generators/BotLootGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/generators/BotLootGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { HandbookHelper } from "../helpers/HandbookHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; @@ -20,10 +21,11 @@ export declare class BotLootGenerator { protected handbookHelper: HandbookHelper; protected botGeneratorHelper: BotGeneratorHelper; protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected botLootCacheService: BotLootCacheService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botLootCacheService: BotLootCacheService, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer); generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances): void; protected getRandomisedCount(min: number, max: number, nValue: number): number; /** diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/BotWeaponGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/BotWeaponGenerator.d.ts index 49fa7bf..487901b 100644 --- a/KcY-SeeItemValue/itemValue/server/types/generators/BotWeaponGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/generators/BotWeaponGenerator.d.ts @@ -1,4 +1,5 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; import { MinMax } from "../models/common/MinMax"; @@ -14,6 +15,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; export declare class BotWeaponGenerator { protected jsonUtil: JsonUtil; protected logger: ILogger; @@ -24,9 +26,11 @@ export declare class BotWeaponGenerator { protected botGeneratorHelper: BotGeneratorHelper; protected randomUtil: RandomUtil; protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected inventoryMagGenComponents: IInventoryMagGen[]; protected readonly modMagazineSlotId = "mod_magazine"; protected botConfig: IBotConfig; - constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer); + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, inventoryMagGenComponents: IInventoryMagGen[]); /** * Pick a random weapon based on weightings and generate a functional weapon * @param equipmentSlot Primary/secondary/holster @@ -67,7 +71,7 @@ export declare class BotWeaponGenerator { * @param botRole for durability values * @returns Base weapon item in array */ - constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; /** * Get the mods necessary to kit out a weapon to its preset level * @param weaponTpl weapon to find preset for @@ -85,36 +89,12 @@ export declare class BotWeaponGenerator { /** * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. * Additionally, adds extra bullets to SecuredContainer - * @param weaponMods mods to attach to weapon - * @param weaponTemplate db template for weapon - * @param magCounts magazine count to add to inventory - * @param ammoTpl ammo templateId to add to magazines - * @param inventory inventory to add magazines to - * @param botRole the bot type we're getting generating extra mags for - * @returns + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for */ - addExtraMagazinesToInventory(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory, botRole: string): void; - /** - * Create a magazine using the parameters given - * @param magazineTpl Tpl of the magazine to create - * @param ammoTpl Ammo to add to magazine - * @param magTemplate template object of magazine - * @returns Item array - */ - protected createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; - /** - * Get a randomised number of bullets for a specific magazine - * @param magCounts min and max count of magazines - * @param magTemplate magazine to generate bullet count for - * @returns bullet count number - */ - protected getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; - /** - * Get a randomised count of magazines - * @param magCounts min and max value returned value can be between - * @returns numberical value of magazine count - */ - protected getRandomisedMagazineCount(magCounts: MinMax): number; + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; /** * Add ammo to the secure container * @param stackCount How many stacks of ammo to add @@ -131,13 +111,6 @@ export declare class BotWeaponGenerator { * @returns magazine tpl string */ protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; - /** - * Get a weapons default magazine template id - * @param weaponTemplate weapon to get default magazine for - * @returns tpl of magazine - */ - protected getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; - protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void; /** * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) * @param ammo a list of ammo tpls the weapon can use diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/LootGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/LootGenerator.d.ts index fdefa6d..bbc1915 100644 --- a/KcY-SeeItemValue/itemValue/server/types/generators/LootGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/generators/LootGenerator.d.ts @@ -6,14 +6,16 @@ import { LootRequest } from "../models/spt/services/LootRequest"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { ItemFilterService } from "../services/ItemFilterService"; +import { HashUtil } from "../utils/HashUtil"; import { RandomUtil } from "../utils/RandomUtil"; export declare class LootGenerator { protected logger: ILogger; + protected hashUtil: HashUtil; protected databaseServer: DatabaseServer; protected randomUtil: RandomUtil; protected itemHelper: ItemHelper; protected itemFilterService: ItemFilterService; - constructor(logger: ILogger, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, itemFilterService: ItemFilterService); + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, itemFilterService: ItemFilterService); /** * Generate a list of items based on options passed in * @param options parameters to adjust what loot is generated @@ -33,13 +35,14 @@ export declare class LootGenerator { * Find a random item in items.json and add to result array * @param items items to choose from * @param itemTypeCounts item limit counts + * @param options item filters * @param result array to add found item to * @returns true if item was valid and added to pool */ protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, result: LootItem[]): boolean; + }>, options: LootRequest, result: LootItem[]): boolean; /** * * Find a random item in items.json and add to result array diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/RagfairAssortGenerator.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/RagfairAssortGenerator.d.ts index cbdd7f2..db4811d 100644 --- a/KcY-SeeItemValue/itemValue/server/types/generators/RagfairAssortGenerator.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/generators/RagfairAssortGenerator.d.ts @@ -1,5 +1,8 @@ import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; @@ -8,18 +11,40 @@ export declare class RagfairAssortGenerator { protected hashUtil: HashUtil; protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; protected generatedAssortItems: Item[]; - constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer); + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); /** * Get an array of unique items that can be sold on the flea * @returns array of unique items */ getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ protected assortsAreGenerated(): boolean; /** * Generate an array of items the flea can sell * @returns array of unique items */ protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ protected createRagfairAssortItem(tplId: string, id?: string): Item; } diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/IInventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/InventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..4fcb1e2 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,14 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/helpers/BotGeneratorHelper.d.ts b/KcY-SeeItemValue/itemValue/server/types/helpers/BotGeneratorHelper.d.ts index eb0d215..5e3e501 100644 --- a/KcY-SeeItemValue/itemValue/server/types/helpers/BotGeneratorHelper.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/helpers/BotGeneratorHelper.d.ts @@ -1,8 +1,7 @@ import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; -import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; -import { Grid, ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -12,11 +11,23 @@ import { ItemFilterService } from "../services/ItemFilterService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGeneratorHelper } from "./BotWeaponGeneratorHelper"; import { ContainerHelper } from "./ContainerHelper"; import { InventoryHelper } from "./InventoryHelper"; import { ItemHelper } from "./ItemHelper"; import { ProbabilityHelper } from "./ProbabilityHelper"; import { ProfileHelper } from "./ProfileHelper"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} export declare class BotGeneratorHelper { protected logger: ILogger; protected jsonUtil: JsonUtil; @@ -31,11 +42,11 @@ export declare class BotGeneratorHelper { protected botEquipmentFilterService: BotEquipmentFilterService; protected itemFilterService: ItemFilterService; protected profileHelper: ProfileHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, configServer: ConfigServer); + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, configServer: ConfigServer); /** - * TODO - very similar to generateModsForWeapon * Check mods are compatible and add to array * @param equipment Equipment item to add mods to * @param modPool Mod list to choose frm @@ -46,18 +57,51 @@ export declare class BotGeneratorHelper { */ generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[]; /** - * TODO - very similar to generateModsForEquipment * @param sessionId session id * @param weapon Weapon to add mods to - * @param modPool pool of compatible mods to attach to gun + * @param modPool Pool of compatible mods to attach to weapon * @param weaponParentId parentId of weapon - * @param parentTemplate - * @param modSpawnChances - * @param ammoTpl ammo tpl to use when generating magazines/cartridges - * @param botRole role of bot weapon is generated for - * @returns Weapon with mods + * @param parentWeaponTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @returns Weapon + mods array */ - generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string): Item[]; + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentWeaponTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string): Item[]; + /** + * + * @param modSlot + * @param isRandomisableSlot + * @param modsParent + * @param botEquipBlacklist + * @param itemModPool + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate + * @returns + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, modsParent: Slot, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Check if mod item is on limited list + has surpassed the limit set for it + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @returns true if over item limit + */ + protected modHasReachedItemLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits): boolean; + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + protected initModLimits(botRole: string): BotModLimits; /** * Generate a pool of mods for this bots mod type if bot has values inside `randomisedWeaponModSlots` array found in bot.json/equipment[botrole] * @param allowedMods Mods to be added to mod pool @@ -65,10 +109,24 @@ export declare class BotGeneratorHelper { * @param modSlot Slot to generate mods for * @param itemModPool base mod pool to replace values of */ - protected generateDynamicModPool(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string, itemModPool: Record): void; + protected generateDynamicWeaponModPool(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string, itemModPool: Record): void; + /** + * Find all compatible mods for equipment item and add to modPool + * @param itemDetails item to find mods for + * @param modPool ModPool to add mods to + */ + generateDynamicModPool(itemDetails: ITemplateItem, modPool: Mods): void; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; /** * Check if the specific item type on the weapon has reached the set limit - * @param modTpl item to check is limited + * @param modTpl log mod tpl if over type limit * @param currentCount current number of this item on gun * @param maxLimit mod limit allowed * @param botRole role of bot we're checking weapon of @@ -78,16 +136,14 @@ export declare class BotGeneratorHelper { count: number; }, maxLimit: number, botRole: string): boolean; /** - * log errors if mod is not valid for a slot - * @param modTpl - * @param found - * @param itemSlot - * @param modTemplate - * @param modSlot - * @param parentTemplate + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate tempalte of the mods parent item * @returns true if valid */ - protected isModValidForSlot(modTpl: string, found: boolean, itemSlot: Slot, modTemplate: ITemplateItem, modSlot: string, parentTemplate: ITemplateItem): boolean; + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; /** * Create a mod item with parameters as properties * @param modId _id @@ -98,12 +154,6 @@ export declare class BotGeneratorHelper { * @returns Item object */ protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem): Item; - /** - * Is this magazine cylinder related (revolvers and grenade launchers) - * @param magazineParentName the name of the magazines parent - * @returns true if it is cylinder related - */ - magazineIsCylinderRelated(magazineParentName: string): boolean; /** * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot * never return true for an item that has 0% spawn chance @@ -115,7 +165,7 @@ export declare class BotGeneratorHelper { protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; /** * Get a list of containers that hold ammo - * e.g. mod_magazine + * e.g. mod_magazine / patron_in_weapon_000 * @returns string array */ protected getAmmoContainers(): string[]; @@ -168,6 +218,14 @@ export declare class BotGeneratorHelper { * @returns Repairable object */ protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; + /** + * Get a random mod from an items compatible mods Filter array + * @param modTpl + * @param parentSlot + * @param modSlot + * @param items + * @returns item tpl + */ protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; /** * Can an item be added to an item without issue @@ -177,23 +235,6 @@ export declare class BotGeneratorHelper { * @returns true if possible */ isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean; - /** - * Adds an item with all its childern into specified equipmentSlots, wherever it fits. - * @param equipmentSlots - * @param parentId - * @param parentTpl - * @param itemWithChildren - * @param inventory - * @returns a `boolean` indicating item was added - */ - addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean; - /** - * is the provided item allowed inside a container - * @param slot location item wants to be placed in - * @param itemTpl item being placed - * @returns true if allowed - */ - protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; } /** TODO - move into own class */ export declare class ExhaustableArray { diff --git a/KcY-SeeItemValue/itemValue/server/types/helpers/BotHelper.d.ts b/KcY-SeeItemValue/itemValue/server/types/helpers/BotHelper.d.ts index 9b89481..18738e5 100644 --- a/KcY-SeeItemValue/itemValue/server/types/helpers/BotHelper.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/helpers/BotHelper.d.ts @@ -13,11 +13,34 @@ export declare class BotHelper { protected configServer: ConfigServer; protected botConfig: IBotConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retreive difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ getBotTemplate(role: string): IBotType; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ getPmcDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; /** * Randomise the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent * @param difficultySettings pmc difficulty settings */ randomisePmcHostility(difficultySettings: Difficulty): void; @@ -31,7 +54,7 @@ export declare class BotHelper { */ addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; /** - * Add a bot to the ENEMY_BOT_TYPES array + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list * @param difficultySettings bot settings to alter * @param typesToAdd bot type to add to enemy list */ @@ -42,4 +65,10 @@ export declare class BotHelper { * @param typesToAdd bot type to add to revenge list */ addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; } diff --git a/KcY-SeeItemValue/itemValue/server/types/helpers/BotWeaponGeneratorHelper.d.ts b/KcY-SeeItemValue/itemValue/server/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..7e25f56 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,78 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper); + /** + * Get a randomised number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomised count of magazines + * @param magCounts min and max value returned value can be between + * @returns numberical value of magazine count + */ + getRandomisedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartrdiges to a bots inventory (vest/pocket) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + */ + addBulletsToVestAndPockets(ammoTpl: string, cartridgeCount: number, inventory: Inventory): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * Adds an item with all its childern into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/helpers/ItemHelper.d.ts b/KcY-SeeItemValue/itemValue/server/types/helpers/ItemHelper.d.ts index de10892..0effaf2 100644 --- a/KcY-SeeItemValue/itemValue/server/types/helpers/ItemHelper.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/helpers/ItemHelper.d.ts @@ -20,7 +20,7 @@ declare class ItemHelper { protected databaseServer: DatabaseServer; constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer); /** - * Checks if a id is a valid item. Valid meaning that it's an item that be stored in stash + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash * @param {string} tpl the template id / tpl * @returns boolean; true for items that may be in player posession and not quest items */ @@ -79,6 +79,11 @@ declare class ItemHelper { * @returns {array} The array of StackSlotItems */ generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; /** * Gets item data from items.json * @param tpl items template id to look up diff --git a/KcY-SeeItemValue/itemValue/server/types/helpers/RepairHelper.d.ts b/KcY-SeeItemValue/itemValue/server/types/helpers/RepairHelper.d.ts index 9a3ab29..5b09320 100644 --- a/KcY-SeeItemValue/itemValue/server/types/helpers/RepairHelper.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/helpers/RepairHelper.d.ts @@ -14,8 +14,17 @@ export declare class RepairHelper { protected configServer: ConfigServer; protected repairConfig: IRepairConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); - updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit?: boolean, applyRandomDegradation?: boolean): Item; - protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number): number; - protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, armorMax: number): number; + /** + * + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; isWeaponTemplate(tpl: string): boolean; } diff --git a/KcY-SeeItemValue/itemValue/server/types/loaders/PreAkiModLoader.d.ts b/KcY-SeeItemValue/itemValue/server/types/loaders/PreAkiModLoader.d.ts index d310ae2..4ab1689 100644 --- a/KcY-SeeItemValue/itemValue/server/types/loaders/PreAkiModLoader.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/loaders/PreAkiModLoader.d.ts @@ -44,9 +44,9 @@ export declare class PreAkiModLoader implements IModLoader { */ protected getDuplicates(stringArray: string[]): string[]; /** - * - * @param mods Get an array of broken/invalid mods by name - * @returns Mod names array + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array */ protected getBrokenMods(mods: string[]): string[]; /** @@ -68,7 +68,12 @@ export declare class PreAkiModLoader implements IModLoader { protected addMod(mod: string): Promise; protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; - protected validMod(mod: string): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; protected getLoadOrder(mods: Record): Record; getContainer(): DependencyContainer; diff --git a/KcY-SeeItemValue/itemValue/server/types/models/eft/common/IGlobals.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/eft/common/IGlobals.d.ts index 9d28dbc..81e2023 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/eft/common/IGlobals.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/eft/common/IGlobals.d.ts @@ -1175,5 +1175,6 @@ export interface Preset { _name: string; _parent: string; _items: Item[]; + /** Default presets have this property */ _encyclopedia?: string; } diff --git a/KcY-SeeItemValue/itemValue/server/types/models/eft/common/tables/IBotBase.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/eft/common/tables/IBotBase.d.ts index 64166f4..25cb861 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/eft/common/tables/IBotBase.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/eft/common/tables/IBotBase.d.ts @@ -28,6 +28,8 @@ export interface IBotBase { CarExtractCounts: CarExtractCounts; SurvivorClass: SurvivorClass; WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; } export interface Info { EntryPoint: string; diff --git a/KcY-SeeItemValue/itemValue/server/types/models/eft/common/tables/ITemplateItem.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/eft/common/tables/ITemplateItem.d.ts index 6b2fa8f..8569e61 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/eft/common/tables/ITemplateItem.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/eft/common/tables/ITemplateItem.d.ts @@ -80,7 +80,7 @@ export interface Props { HasShoulderContact?: boolean; SightingRange?: number; DoubleActionAccuracyPenaltyMult?: number; - ModesCount: any; + ModesCount?: any; DurabilityBurnModificator?: number; HeatFactor?: number; CoolFactor?: number; @@ -156,7 +156,7 @@ export interface Props { RigLayoutName?: string; MaxDurability?: number; armorZone?: string[]; - armorClass: any; + armorClass?: any; mousePenalty?: number; weaponErgonomicPenalty?: number; BluntThroughput?: number; @@ -254,8 +254,8 @@ export interface Props { foodUseTime?: number; foodEffectType?: string; StimulatorBuffs?: string; - effects_health: any; - effects_damage: any; + effects_health?: any; + effects_damage?: any; MaximumNumberOfUsage?: number; knifeHitDelay?: number; knifeHitSlashRate?: number; diff --git a/KcY-SeeItemValue/itemValue/server/types/models/enums/BaseClasses.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/enums/BaseClasses.d.ts index 37c1398..36ebc71 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/enums/BaseClasses.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/enums/BaseClasses.d.ts @@ -25,6 +25,7 @@ export declare enum BaseClasses { SIGHTS = "5448fe7a4bdc2d6f028b456b", MEDS = "543be5664bdc2dd4348b4569", MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", KEY = "543be5e94bdc2df1348b4568", KEY_MECHANICAL = "5c99f98d86f7745c314214b3", KEYCARD = "5c164d2286f774194c5e69fa", @@ -66,7 +67,6 @@ export declare enum BaseClasses { LUBRICANT = "57864e4c24597754843f8723", BATTERY = "57864ee62459775490116fc1", ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", - REFLEX_SIGHT = "55818ad54bdc2ddc698b4569", TACTICAL_COMBO = "55818b164bdc2ddc698b456c", FLASHLIGHT = "55818b084bdc2d5b648b4571", MAGAZINE = "5448bc234bdc2d3c308b4569", diff --git a/KcY-SeeItemValue/itemValue/server/types/models/enums/WeaponTypes.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IAirdropConfig.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IAirdropConfig.d.ts index 8b7fffc..3edcbdd 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IAirdropConfig.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IAirdropConfig.d.ts @@ -25,4 +25,6 @@ export interface AirdropLoot { itemTypeWhitelist: string[]; /** key: item base type: value: max count */ itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; } diff --git a/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IBotConfig.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IBotConfig.d.ts index f15fa73..af8ceba 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IBotConfig.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IBotConfig.d.ts @@ -24,7 +24,7 @@ export interface IBotConfig extends IBaseConfig { /** Show a bots botType value after their name */ showTypeInNickname: boolean; /** Max number of bots that can be spawned in a raid at any one time */ - maxBotCap: number; + maxBotCap: Record; /** How many stacks of secret ammo should a bot have in its bot secure container */ secureContainerAmmoStackCount: number; } @@ -65,6 +65,7 @@ export interface LootNvalue { export interface EquipmentFilters { weaponModLimits: ModLimits; randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; blacklist: EquipmentFilterDetails[]; whitelist: EquipmentFilterDetails[]; } diff --git a/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IPmcConfig.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IPmcConfig.d.ts index 655b58d..9db2ba1 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IPmcConfig.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IPmcConfig.d.ts @@ -7,14 +7,18 @@ export interface IPmcConfig { looseWeaponInBackpackLootMinMax: MinMax; isUsec: number; chanceSameSideIsHostilePercent: number; - usecType: string; - bearType: string; + /** key: location, value: type for usec/bear */ + pmcType: Record; maxBackpackLootTotalRub: number; maxPocketLootTotalRub: number; maxVestLootTotalRub: number; convertIntoPmcChance: Record; enemyTypes: string[]; } +export interface PmcTypes { + usec: string; + bear: string; +} export interface DynamicLoot { whitelist: string[]; blacklist: string[]; diff --git a/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IRagfairConfig.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IRagfairConfig.d.ts index 3088717..c1b8763 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IRagfairConfig.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/spt/config/IRagfairConfig.d.ts @@ -39,6 +39,7 @@ export interface Dynamic { offerItemCount: MinMax; price: MinMax; presetPrice: MinMax; + showDefaultPresetsOnly: boolean; endTimeSeconds: MinMax; condition: Condition; stackablePercent: MinMax; diff --git a/KcY-SeeItemValue/itemValue/server/types/models/spt/location/AirDropLootItem.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/spt/location/AirDropLootItem.d.ts new file mode 100644 index 0000000..da791ff --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/models/spt/location/AirDropLootItem.d.ts @@ -0,0 +1,6 @@ +export declare class AirDropLootItem { + id: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/models/spt/services/LootItem.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/spt/services/LootItem.d.ts index 2838472..acb7606 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/spt/services/LootItem.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/spt/services/LootItem.d.ts @@ -1,4 +1,5 @@ export declare class LootItem { + id?: string; tpl: string; isPreset: boolean; stackCount: number; diff --git a/KcY-SeeItemValue/itemValue/server/types/models/spt/services/LootRequest.d.ts b/KcY-SeeItemValue/itemValue/server/types/models/spt/services/LootRequest.d.ts index 64b4e5c..1da8770 100644 --- a/KcY-SeeItemValue/itemValue/server/types/models/spt/services/LootRequest.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/models/spt/services/LootRequest.d.ts @@ -6,4 +6,6 @@ export declare class LootRequest { itemTypeWhitelist: string[]; /** key: item base type: value: max count */ itemLimits: Record; + armorLevelWhitelist: number[]; + moneyStackLimits: Record; } diff --git a/KcY-SeeItemValue/itemValue/server/types/servers/DatabaseServer.d.ts b/KcY-SeeItemValue/itemValue/server/types/servers/DatabaseServer.d.ts index aa152d0..b3d29e9 100644 --- a/KcY-SeeItemValue/itemValue/server/types/servers/DatabaseServer.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/servers/DatabaseServer.d.ts @@ -2,5 +2,5 @@ import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; export declare class DatabaseServer { protected tableData: IDatabaseTables; getTables(): IDatabaseTables; - setTables(any: any): void; + setTables(tableData: IDatabaseTables): void; } diff --git a/KcY-SeeItemValue/itemValue/server/types/services/BotGenerationCacheService.d.ts b/KcY-SeeItemValue/itemValue/server/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..670c583 --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,52 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected botHelper: BotHelper; + protected storedBots: IBotBase[]; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore + */ + storeBots(botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param role role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(role: string): IBotBase[]; + /** + * Find a bot by its index from cache + * @param indexOfBotToReturn index to find bot by + * @returns bot profile + */ + protected getBotFromCache(indexOfBotToReturn: number): IBotBase; + /** + * Remove bot profile by index from cache + * @param indexOfBotToReturn Index of bot profile to remove + */ + protected removeBotFromCache(indexOfBotToReturn: number): void; + /** + * Get index of bot profile that matches criteria + * @param role role of bot we want + * @param getPmc is requested bot a pmc + * @returns index of found bot + */ + protected getIndexOfBotToReturn(role: string, getPmc: boolean): number; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have bots + * @returns true if empty + */ + cacheIsEmpty(): boolean; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/services/BotLootCacheService.d.ts b/KcY-SeeItemValue/itemValue/server/types/services/BotLootCacheService.d.ts index cc71eee..00ffb9c 100644 --- a/KcY-SeeItemValue/itemValue/server/types/services/BotLootCacheService.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/services/BotLootCacheService.d.ts @@ -34,6 +34,17 @@ export declare class BotLootCacheService { * @param isPmc Is the bot a PMC (alteres what loot is cached) */ protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; /** * Ammo/grenades have this property * @param props diff --git a/KcY-SeeItemValue/itemValue/server/types/services/FenceService.d.ts b/KcY-SeeItemValue/itemValue/server/types/services/FenceService.d.ts index c940507..23fbf52 100644 --- a/KcY-SeeItemValue/itemValue/server/types/services/FenceService.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/services/FenceService.d.ts @@ -55,6 +55,17 @@ export declare class FenceService { * Replace a percentage of fence assorts with freshly generated items */ performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; /** * Choose an item (not mod) at random and remove from assorts */ diff --git a/KcY-SeeItemValue/itemValue/server/types/services/PmcAiService.d.ts b/KcY-SeeItemValue/itemValue/server/types/services/PmcAiService.d.ts new file mode 100644 index 0000000..0690f1f --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/services/PmcAiService.d.ts @@ -0,0 +1,27 @@ +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +/** Storing/retreving pmcRoles set at the start of a raid - its done at that point as we know what location the player is heading to */ +export declare class PmcAiService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected usecRole: string; + protected bearRole: string; + constructor(logger: ILogger, configServer: ConfigServer); + /** + * Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType) + * @param pmcSide eft side (usec/bear) + * @returns pmc side as defined in config + */ + getPmcRole(pmcSide: "usec" | "bear" | string): string; + /** + * Set the roles for pmcs + * @param location map location to look up and use as pmc types + */ + setPmcRolesByLocation(location: string): void; + /** + * Clear the saved role from usec/bear PMCs + */ + clearPmcRoles(): void; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/services/RepairService.d.ts b/KcY-SeeItemValue/itemValue/server/types/services/RepairService.d.ts new file mode 100644 index 0000000..3e6077c --- /dev/null +++ b/KcY-SeeItemValue/itemValue/server/types/services/RepairService.d.ts @@ -0,0 +1,75 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected itemEventRouter: ItemEventRouter; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + repairConfig: IRepairConfig; + constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + * @param output IItemEventRouterResponse + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData, output: IItemEventRouterResponse): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; +} diff --git a/KcY-SeeItemValue/itemValue/server/types/utils/RandomUtil.d.ts b/KcY-SeeItemValue/itemValue/server/types/utils/RandomUtil.d.ts index e35d21f..633e472 100644 --- a/KcY-SeeItemValue/itemValue/server/types/utils/RandomUtil.d.ts +++ b/KcY-SeeItemValue/itemValue/server/types/utils/RandomUtil.d.ts @@ -136,7 +136,7 @@ export declare class RandomUtil { * Drawing can be with or without replacement * @param {array} list The array we want to draw randomly from * @param {integer} count The number of times we want to draw - * @param {boolean} replacement Draw with ot without replacement from the input array + * @param {boolean} replacement Draw with or without replacement from the input array * @return {array} Array consisting of N random elements */ drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; diff --git a/Shared/EFT/Aki.Build.dll b/Shared/EFT/Aki.Build.dll new file mode 100644 index 0000000000000000000000000000000000000000..9c9d1b1cfe544956e6e6ab17f247699de69dd5c8 GIT binary patch literal 3584 zcmeHJO>7%Q6#h1Ge%jK|^p94EvL&essTOXdo%Mk6HmW|P5=qE8#jO@_L4FR*M>z-_uc(zA3j=lY4?&gerb1c-tzUj=T<$l zrdLeIaRa?9bg$v)mZRs774(`rD~ydB*AGUfCl3MRS|=*c8Xv^FUBNy21}zD6Qz9Gb z+#Z6?mSF=nsc}c>w-iKbz#6v3OVIlh68y}?S{!xoH0CM zyHu3EVunrHQVjcuGQdbYj{B1`uO#VP2f8q+1J{@bO$z@7jT9aq(W2FI`!i`HX$&Wa zhYm<%U9gF18Xq_ZTwpKTKq2rfr|L_M4EL5H4jeBa&#^qZfya)I<=Gd>zbp9>+by$~ z#4xp{B;JK*wA=9}r@C<+IZ9qv z_^ZNEg+k%i3Wtc&T4+l~ybi}{xu4jLoy7IHkGKg#3J)mEDjZYzguq+r$Dfu^4+ncNA?Q${fbDO=ThC4oBOmOYESC^xEAvuulOz#}O)0)edWi(1)UC|beI#D^_gObgGqTxa!~ zF=x*8YG%Mm)Bannoa@Y4)rP0^T1Ikit!~*$I3;ZJtQz^P`Pi{Zj{#MJ)e||lzTjEa z`I}DF>ZY^MS~Jyf0;?wEp4_Kw*;ddt+su$LYuhL+_<^VyQ)12*6&V|hO5l32Ja3s* z$MplN;>V)Mx)FvXyn^t~SQX(%3FqDCp^%Me^VQ8=-yHcW_sYlTw|x22#l1-An%3K? zL+j$8zhAO_y`MZ^n%;JJ)q`E~78X0UKk1qEqpox4Y(>*7nM#FfLwv>j@jYqiQVdH!?|d^ek?Z)O=jc1o zCMM-pvuqaz*_y>Uys7ej?qy4`_9S{ZXd_js+xV$MzVLZDb@BW2f8<^q`}W!|KTiKF z-(3EoQeb+g-7`@DC4N|Vt^E?eKBssrrKV>kw|uG;YdIoFKagro8ui&S3ZvQ7{`(Pa z^ZQ7&jSR&}O)uHsz5nVL!BtU+N~QF!CdaxQt){r7hBGH~u9vs%3Da`ICntouMQZlO z9vWF0@@k9!nM700>vHK%?fprcnDJ* zjj^H~B|km_rp`FlHZ1YiNC9Gp@W|cHg)M(X&M>`h3DS|c~%)wRjgR1%! zIcrktbKXQiJ(pZaA0`gcs79XxYFU(5Z(?bO(n%uzrBUV>xR>@d)?pVl)YTpfjL0O% zcSOqKG;IP0S$DOj-8^S~RMdX;W&VWv20zXX6^(p1Nj~b<+G(!!xVja?5UYQ(+2me* z)R$QZl&(X6>^84f?_uzL+Wdi9+qia|>#Ay%jI53Y+`Zz8s6z%j`;D;**kGn5ngVN~_#W(uPYv8_ZkK7EPSvl{xEX9Lv|N%v>vP{GUqY pILo~HjJ?LwwHdX}o3%XKtu->|w;1W+zln?cZ?U-k59c3c;4i7)&SL-o literal 0 HcmV?d00001 diff --git a/Shared/EFT/Aki.Common.dll b/Shared/EFT/Aki.Common.dll new file mode 100644 index 0000000000000000000000000000000000000000..245fbc6746b8b7d426d4b92091ea9965dac50d40 GIT binary patch literal 13824 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 literal 0 HcmV?d00001 diff --git a/Shared/EFT/Aki.Reflection.dll b/Shared/EFT/Aki.Reflection.dll new file mode 100644 index 0000000000000000000000000000000000000000..ea1490c752c66d98a3774a07f90331ef06395a91 GIT binary patch literal 13824 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 SShuk4X8u_1|F8dZ9{6u!yFgU{ literal 0 HcmV?d00001 diff --git a/Shared/EFT/Assembly-CSharp.dll b/Shared/EFT/Assembly-CSharp.dll index 0f38c66369110e5ada73c806aeb6966f6073dec0..8276d5851e8b3a0c8e9f6127da9e17a700064748 100644 GIT binary patch delta 2183877 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%0DY*{}UY$+|@}jA31;p0?KXh-ij9 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
tX~xT&?Q0L)SV9Orr*( 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 C)Me)Ep{iYYT6_mQSjb6l+{ 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 jAzIjPuPWY_S;}E=ICwsNiloeY+55O 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

6M^Zarfqgic=PPDAGF`goVrvnaOfa`wLjB|=H zl^@`yip}tHl42}mqBd2uGy2t$vBB#D@oZ%~<3l2Dm(|YGbiH_yd&xx*ymrPWlFA7O zNwS$>FDc1RCYZE%lUzIFC=*Ol)I1p_n52>@%b28+D9beME72)3@R*$M(iFCY9R5?saVEIvDbU!sSC|jiN&nIdE>1bRcl1>^MNGIc&N6>q>@O3o|CYVBaooQENHWN&tb>OO- zahV8BQHCi*&l>gWqanA9^)S>n2K6bh9!3k+s4~{mc#4R;BMoEL%SdH{NsXnhw~?46 zgQ#{N^fp>D!Fg5MVBFi7+yF&x&)?hlm5AH(_cqjAS+NDO-3M1RBb22LTmyUMs`|k* zsmaowyA~@d6H)idWy1FgB~hB>O+dmV;u@wMpPHXVid2J}=A<)4-hMY$FZYCi+ ze|rL5i%4Qaj97+vx4P`ipED{GQRNIas6JuYo%sjMWg z0O@C>GQmnR3rK(CC=)CKSW^cWcZj&PaG=M7Dwnwy?g7VxjPi|TSX2=oY+PuXGjxNE zyF}ap-wqcWP?tH`PHAx8EZIaRKT&k*AnY1}*>YTT5r-0!~+HSTMMhU8Eg%g<2b zK_;qsA8Irwa>l2YD~1{=L^4DqQsgf_ul;s)zX%uwTcA1DPt#~e#4T5*(T|9mIHqw{ zYP6pQYocs@Axz`($0&Z(PObpUrY8a4125q|n=SBD<=cm4eGVFLlZ$k19}uh>L1Tfm zp)HOSxYD~pBOEy7uL0}2#``U0;zeL%W(6Rx7;A{QD-UCh0j*@Z?2R~AAit`@1|&?L zbfaRjbo@T78=ybwMhzybX34#e79*w^yP2H)C!dJD5hG?8 z&Dx-=EP*5$NT#vWLq-94+emzZHDM5~1T@!}s}PW%fy_4&+q#BI-HZ_*88bbkBan}c z*c4Z@8OTz@^pIOXJ~vwaQxO6*UAzO`)cxJz!Z~hn(?yRp(8aa@w9+_7&fLPF)o zB5tm4GCuJToI2ZNtR<4I4Q?AJW+p*HZ)}!Cz+PV(d~N<0jn)PI$`&FeDr!T>^=z}z znTT6THXDggqcgXI+U$u<-&>wV#cwmcvkg^>Pw0lq8!Ff48u ziT%*tbfLi;-2x&liDU|Ga10fmgT_cEM^j>%)a{S1GR3(RjS9~}<1Ujq9rF=6WW)}T znmw%f$>_&qN4T*x^s`ZNpcLt_KfgmUA$~TtGWm2(0W$Qn@x>siX*v&1N5M@^hm9Rf zTHlQ&%@IQkmYM-i#S=N|$s1XAj~VqygZU5B?daJt10n%`*@b@nK2}t0;P;U0EfYkw z9At1X7m2F?_uXQf5w#Q7;srQw3~LC-mF2ik*2EJz86{m8`74S?!1S+Cq}F#%D^jRZ zq|ZN4`|+K=J4jD+7nZI48kqqP+FgVU#LnZaQFaK%T#f+_!7$~lQGYcwO` zZaX+BS8{pULkX@(kFVpDBu%*v)W4- zKe*H`@-~=@mZ1EmddvGY@&h~ws}fYmtThr{$P$zafh=T>W`gfIND7-fnBc4K1|UVu z$^n_~s%a`_USgs~JjG0*=hPH8=bDm4w`>+Smoid@N|+~tEaGjQB|K>)D|1Qn5@|BD zYWHGkj;o|uErhNzv<6H{nf;iY7$Mi3?lWUwmYPRfhvgSx?lYT?CM4<%le-A-GrKam z|0h|Z?#tu-eJ1z>f7yl9*G}#;dDB3`;#Gc8qp@GyrxHA&jJgQxi=GtnH)pymB8ne$Z?- zmI48nr^;!Fhs;9hl3<}ka}Sx#m|*e2QvZ;G~?I zBy%E>Grrm>CL9}Y>K6^nW^bVAjPEx+PAn#}nTYFsLvt??w>4_$3G_}sB=GSQ@gi+q ztY~CjC26L3Vppta*bL@*Rf*TOPlQn>kS6BMspw^vDE45ic%H};(~!7cHuHG!RD5cs zM#^z>b0A4w$IZ>$j$3*hf9Q4G%G{jGajQIzTYDVe1IJ+%$ToSTDQ4RAoDoUMqj}0) zkxTPb9!*E{P%ceJSEF`vb}`lVE0q*L;JYT?bnN0f<6TqTRO=E={cdK;TR8*WEsv{b zJ+9iyOncT`n#`&?O4M3**8ipn{1=)T{~HbGT+n>~eVLEI(Ep?fgZIt;ClP3R{ui3T|AofL zr3wFAsMU@tHy6i}Gq)uOnQ8;9tC`5AVRTD_TV>f>K4y}}ldWNMZLSb0XI{_LyNm1D z*8jp);_Ux9gTlG1S;!oj$Jsa{-T+PdFEq3BX!5;{0g`swPls!voB;zxIfA$h}WK_pu!zowY&Sws6S@U?4-`5GhG9YrrE<#bs0quyd6xO?d#9J3xF84sM4n`5?= zM5y)6cg(I#{%$5ee*KP_%A{&@N#>ew5=j@8`pEf!dFH1~w(gM2e)G(A(iL@Aw9Y=y z{FRXW0AXrNznEvWOK;Ac>U`<6J zvxszJO^;LYVlI&R=CiCB24n$|eyq8((Jwx38TN|>=1>+D*yI1Y`PzsL!2r?d+W`cAEP~Y$H96t_=zMqRkRbXC0}p;Oe8~Ghh$j@8_zbG zrI$zzP9E*~#3#Nn8xYA5?H+;U=2m`@Wwu}qPAAO+@~zpK$wv)gJ_)`5&b+`#ZJ7Da zEVfjdRvTu%Gutyc8HtpJu=h-t-x}IxzC#Z(#Ll_$?$zz)W+oGVms=sfH+M0)3@a>{ z?K{jPOkUV1Ta%q;<4@7c3^8g1Y$AYyu*+=8qzi18NAiQ2!el|OruoEg5S`uT8Ai(& z!FDiM8`@)DW%4bouM|u6iyzIopGnh^CGgD&AbZWt%OttETwcDm-#o(Pi^z;J5I=S2 z(LuBE3YiqR3#|h-ivh5e20kJ%O5nqC*lr74w}EP9kqAupm~Q$ zp@y(|4P$fAOjs$sUoaZ>5kevyGVdee8v4mI!|>t*5O!J$0qM^?!{DxF95$PgW7*GP zojh#TT!kLEhbRx5xfeEEjXFem*sM>kGPHUf;%O`VVY3^PvEe8RGJ2w(Y)B59%b4_J za>P8#WPD?(Ick>wlJZ8I&E%NbgGmPJ2=3kwK8cg`<9+U66#m{(bP2}u6O{XqU^scgDo3CfIHO*x^dmit$;C=vL+ zYNTu;r2EXCvQax_7FkPCh}MbIW+f({LE>OGo-tFHU@^ry@tbK9;Vm){h_hyd2~Hv7 ziq$!DF%xVTFreqm2iHlz-VD!^P1t#}Ga>k@Ff7w^6pM>#iZZPd=#-i%u8RRhOShLd{r*BNO&xK77bgqKh5&l@{#%o{GVp- zO~ikijY%V4yG}w%{i&8K;y#B3Q>=lPqNFNVMshhy@OX8z=I}K$PO0&5;-TGxsl~z( zxUC5TafKgb`wqbV0!aqu^74wgf=D)<)<$zz%`HS^>w&?#rtAn6tm{#tf_1~S6XtN; zG@0sn1WNI7WihyyT5!P5H zC%eMA1Vlb-C8KEp_{xVudF2(1l%q!(MsHh=G-TGNLa@ ziPlCY=fd!17Hq>4t+RyEg*wYn&MLoOX8hhJvM7|ZdJxGFbGOL1&vMoUCJW)x+940Z zc@@h#kTVS)vZfGmbMPT+uGDA;O27_oJiYLcwU5#7B_t_t6+B3Wv~SzQh|X}1xq{W2 z$pI!6tq_x2yYT!m95AuQGb!|gJbqlsYJ5oAX_^KnCE%Q5WveBTbnU4$xFQ;lNLRMn zv8Y%|g7|Z9jHqIDVNn$zoBgpsda>rp6u&6d)-V2JJ#k$cwDGzDj=nrK)AH zrYL`4rm8iWHOV%7uoZ_g)vTE;>Iew4qnhJ zrm;2qh;;Rf=@+e1VA;>w$0TkEd)}rsrme?7%>^hqt$UW@L3(y zBwMXdN<*rhOtw}M$q>8G$`YJx_4`F?u;u)|9b9T=RsL04Zq*ag3k^MPWf77a^SeFi z2NHW)I>YyjeLz}UW6w&0?->_>w6T^jIT?BNKd>pI_*}UGsja8RuZ0KH_f=R*`e)v;3mrUqISh_cOt!{tl21Rz)Tl-q`kV z`oXHjgx1*~1k}kBuHjXoHG{nf@@EzNv};pA*2AurcAgSQdyYvrt2vYG3G#$zcdHGN zbZs{fEWh2Yp;7~-wL&#mV|L&}9DTvpXRQn6!t_En(|8*owO(?F@*Lx=fa5$@$E|R!1g@;dXNRVX*ZaqaV4M9c&F|avTUI z*I+9s2{lhUAc#Y(eUgaJzz#MmX;$zuc`sgkN!H@w*1*3cX*N=l5mw_XNU(W|?5dGk zl&Z@^Kf_ITR_CiytF9#uSXY@mSs6}yL%|PN<~6D5^>(blwnVosF&TAAhQhEaTt|&t zmP}8&%h9iC)g}!d1nyHawHRHIu&Se9SRQG5O{z2>%AalU6CQV3UZ)YVW|Dij-vjQL zS_Hm@tVK+QX2A`xnLZ$EnWVoJM~Cb~R2O zGR-P?2c_;YvFTP46Ks?#c80lfYci1xu?G?yJCW(u+eF+K*Xf?3BTLzIYawZ{ls#4_ zwHUO(UFuMovfwAWDS4)4-opU6t<_AAsSO|vcYze^2?u90Y5WYYL~-+hi~=${N^bY? zi=L1ebE0GoC(pbn83FyI2AcPy1W^PmFN%_+a2_<`_1vPLCgvui zx56%Buc5f&n_y}#2Z2l#Yk@3Qp2a1C=4c_9-QN72!BF=7>v&lM?D zCqWa9!O$0q#QoJbzqkvAqNI?jy(^WbkgBULQS~`W;-DmksVGKKAyuJQMGYP13hfeA zp*H_q;k)Q6w&LO5oHE%avVgb$x*3jL!PQ3=|dudTZI$c1>mZ-RIX$TwChlP=JM z+d#HhJ7T0prD?WRIaZQ-P;*y2m2h6M3OL?r9naZM2d$4Kp|8~J0L?*< zKeF~8vMxxCmJO#DFux92l@rL0b|}o~Co7dvpVm_Jvo({+OH2-1JD4o~4}6=tn_nEU zV)IKwUokmqHDS_rmTb3=S*?hqYtI6~X8V}ck2Tl3^^~IH)=(BDz=0|h9k)y=qPW%o z&rVo}BoXB{!E)D(eBu|YS^@H2ET1RO?EdPBeW@fEI^k#y3*0Gdd_k1DW3$s%wZf99 zEyky<#zf?aNzvUe&RFsj67D4Rd5;G(z=P=M`*+WSZSa6@he`z-7xLKn(<3d`z+>Z* z=RsR|P(>{^Ubf_A zZ*2Mo$W3cB5%;a>w)HL(9MkRw&24Kj6E!Py$GXG>-yN_J-mz{mQ7=Sytk@Fh7kvLO z4DUZUZo6X*W`r*fX!@@8E)nfzqZM43Py9*b z8`g{ff|`G(LL)hi_QWO&mcL)nvP%yHNw8Yn&*I^M%dS+ zM*MYMPS*JB`Xy!F)CCQuhtKZ7myyn!b&RD0 zAU=CpIjO+}ehfU#XQw_SiAvx&JEejoG&2X9IJ=w^Vz_IM_5{SM!8nFSAv*hgx+&US*cBKF)mIh_@?vzUN0a#hS;@GxpJ zHM6EBeg{{@?2n1K0V-y%AtHAk6nz#orR$=rGd{Eveh^Rz+nrC8rMsjJ3i!(|R03j; zN0?o*Fb{e0b3ZNrx|&X(CFCOWSI6Zd3lGPNk@$Ts*O|Ret|OPU$59wFG`!MjYun22~#T zLvVEF(gU|0E@^9zpgAN39))HO+rK7|%J7vnMq%kH{q^F9G?8NaH4`fg3|2pFRqU8h8?J z9XzOF-)t%$;7K?n|FOqDip2eNRnb%??WLCmpOJxRY(K^1 zfyl+?sSSLCB9&S|u~R*CQ+sg-bm8`;P3;mL$%as?7ftQXMAC&?1!-!_xp;S5LsNSM zYgF&r)SkmcHU8iilcp)WF4NS`>Lk6#-t|*Rqo%gmSrVL@!&GZ#ck3dF+Op8xPGfR1 zQs^-#1L_)?mUi%IDa8eRbllRO#srt*k+ib6GQn$Put+7_e-m+QX|mm{E81~e%4B;c zk&_9x;QQU!b+ykz@pCJngFOSZQ$nZRvcvb{$c!Zr^|PO|+I zlT>cj`@$6IFhmuzw_yAvQ!#wuH4FRcKP| z$6u9BcUbhK+I5(ZHx7{hn5Utm;eLw@mB5`2};p2?(> zmS6aS@HH!Y8I#uKU?vTcwwry$qq)DJ5YO5Vq)N~B-1ZAeS}}RYh!GV@lg8wkeUa4U z)QZ06BH?663#{c=!E8@^SRXVZOD7IVd)uQW5q&DkdCOG$3=<3<7NJ!878CTS2Y8ff z7k!TGP|cmvXm?7(6~I8Ax6czv*W$x4 zCHDlOD}>G@l!eznoPZl(-(gWzAoz|pz>e)tNukZ|BsBx=f=oUDf|`MLX(DHQs^=MG zzr+OJ+AviH*|Ujc`^NqgnbbP9Vu`u!;zVJePYjNZka|ZpwT6Uz5Q2vx9%?UtK4(G> z^(16`8&1gSAbr8!KvJ3Um;l4K(+rP(D1U`SohhTCO{xSkDnow2LocD-D#M%ayWxf&5o9F;{;64x~jZbZVgb&*PK zm#A)NL>}))*gbN2|B~G|m-jE_arKft-gPCn(vGzGW~XSvj^sWsJK775v?sG^mAfPJ zm>y|wbxqSmcfkH3SAYUJT!k_51NPNi&UE`uE@yfUXXr||%MZ+%Wrkgqh?`|b9#@9l z-s=j^f(X;@n#-AK2Z_kS_&IoH+TTc`RasI%tOH`(+li!Wb%AUmvX_Wk86EpDYgA=) z>{C+16%B?uLA&7~jK>+D%KM-_l8MUupna4GHV@rXpxO+6ANoeP#x`U>Iv5>~*Tw;9 zLZmg34DICwnn(unvfZ9FGl4uwq&sWMZq!6qAfxO)MAEgYKzb7yOvH`NXnTaxgt=`Q zZ3m?&+HQ=oFA&L&#%7FNdZ>(_ip?0iJCST(eeew1pD}sz=@ol`)I@84*d9g%a~GBt zu;B^kaTd0x=5jXH&Wt*fuEu)WAldr<8~Ku4!Ih@-HBmbi&MDX%nVf%L3yTJXvKjS( zgl$e_7n85RSsNk;m=plgfygl?&j9I8&h_*@;9lMYp%(#hfRgpxR+3DR34H4{5({e;xem}cse$cu`;vU1#Z`q1xL{6ux?RnpxM?Msyk+-c(y^MHWu9RVVp4pG+%+@9 z9?rx{lOdg9TSU^eH-TVCXV|YuBDyrJCbxIYv?ohvqVXp(LuT4XY?-t^xG@5q&9qMi zCFvQt24Rnm=x61b;hJUl3!&64r?Wgouv16aB~jyEyjcI7Uu06BKUPdH|N3Fryq<$p zDhTTsKxRiZ1%d1VGRIy<9%PEWk*~m9bk_P^k3W|?rZ#A#<^|ugE03noQ#NB!dCyKF zk}YuNA^vY9?Z==dThxy9>Es#ZF0ix0Ipedy{o;ajD*pQ=KoT*=E zKbrCo5qtyg7mO7j+Uv=j`(F8x8u`RkECx%sec^jaQG)ZBGtyvrJW7gz24nC^l=#A& zNiLcWA1jOL2Oofpie`dYbhb1~hQafkWPWo^+&>aEyD5n7-rP^^vog?P18Y9@TdiI??k%-(uj)C54?;zqX#Ba0zmad|8Xq#R3HL|Qd-Cw>i zZL=#8$@Wzk2K%3J#Ij8dkbNqy+oR-TXzlUtlJBGBzAmxiFa&Bxlq^^$?d-CfvFR^v z!0vF+{9uok-ix!5zFoN%Vu9Xk@0x(&%J!)(rhDy!MC4ne)Z8TEuAuF;TTet+?vmx+ zJVj$)wDLUnMLsdLzhAhddl*9cND8b++TF-dhEOs7*-m_&5=yA}9kx@6xXF9eHl-$- zyhrU3=W|}Pf7E_UYP1Q^Q{h|eQBO5+?#-2Ep!xGuwJ+)^e)n1;p7f-_nXMC!i`Q1*LE{SSof4678 zC5bOG=owD|x@h}n;RAOf^P*jg2{z*g2KdEA+m|UdY9jMbyD<}7#qtk?!v%J&h}7Ub zX0IW!;);Eb3C?5U36E=b;n`ACq%!P@l&Bmd_2GbPc1t2>eA6Q}pY=>_-m)9dLDy$| zs)f5{FJ_`zxLaJ8&iGWjc*{QD&$HAh?ZPEeud@0<*uD1O-H|B zf7ecYFQ;dB^LXZJlxKJC%H+!R?5@W%>DS+OlC+F|B~j)3+diAiv%m9r=4zHjiuFuw zTSXPnf9$L8V@S{VRB`k!T;o5?Ow zH6YHJORiuG#%pk2(_e5&niKaS+L2w#3!Qu--brLqA`E>BP8w>?%Z$_{zUJhfsMDO! zNaL0k&Dlo8O;e47=oXd)=MZV!!jjPCeU+)X>?TBSwYCH8HJtol4!WmbTicI!p>DD zxX~0z5vTfMj7Nr6p?w@JycTtmnA8M<1-fXSR4kT*(CO)7&PZ~WDH`mJ6;BR=wOHpT zHnhNup}C`y&PgKUwU2?|0q>H|dDfu!n2DvFznGx+*ejHB?l9@H2rd)`%lA1kA7h}$ zYXg9M7A91XP=@xw2zgZCey1dhJ_UmDxZf$qnkx^-QpG6kRAEhAU3vbqv{Q#Q(-+CD zm1UeqiDV~?Xf2P)mvP!jjpzV}5a_dLWt^7?W%-U}X<{`5sEjk7NT#R>qMby3lZK-A z#693t{RHD7KPOWd5*S{{U(13^rinjEPuMfPZ%pfX*eBS z-{VLcPWl(}u?llUX_gbo5~?^QIopY3YpN6`Ij4xEi(+kLxlD3mmtovtu{+F5(n(Gt zA-7RTaw-#XhzFA zl$o9&B6|PS@{QC+_U6v!l~gE2hsU9HfV)wfJ6DOw{_GHt7EbCashJkp)*ptZ0+JP9 z09t!IzXuOs2V8CCHM5h$mdSqkZLAw#3$o4D68M~UI6D>I@c?v~}({v4L+(MD! zF?SBV+Z!n~0Lt}?=b@u(D8y4v?lRlnc~#obO1@b@ybX!n-kC(iEwk;N`9#vi1a3>) z=Lt)DXKx-?(L#*lIZTxH|Kj~!a+aZ~h_`ootj!tm_RjA_+}hCIxkAK^czaL8m0!cj z@~dKc{YagGsTISj3U+j+uR|Zwwc`-wMewhV&TL7<1&(0HJbre}6XpMoq^(E4vJx(Y zrzp=1LT>tYbS4vV)A!#@yM2X>U`MC?W;Fe(*z&s&Z@&n~iJTTh++^wGNtQ^*L8%qn zsYK}P1WD`q**Q-HJ3Bja+3W1Fw{{Q|EM=~X)9Y&tjGISYoac#TX%{%+U7Q#4XaYps zr0C*I&7+Cr(c~#uU7XKJG(B31yEtDmsl(;Ei?bn*p?yT$H0Y8i4Z1jWzo86_w&_ZP zT|3WAb#Yqf5%nPAjhPI!J0j@f*m*R0V?Q&GWlt5BV@MSuZ{i=%WBRW=hVo{ae~XN3 z%c%v#c_>j`oMudBe;q3druoIw&SoOgFB(I3&6BTP^VIXM&a!W*d}vxLP1FHHU7brz znrFm`E<`*rqxPa}p6tkF8J7)nAtKQN!VS;AX>!-6u1;Du2GPy3u6Y^(2y_n35cEEG zGIn)hzN5HCr&_u?1&N&WjWJ+zI>q%S5qU>!q2ZVwxm|VhRJP_Xcsh;lo(BdzXoTDO z(!s_vPI#;9^Ls#^b*2%KU&h3HpL%#4?^KTGLA&3}DZd>Z%gN=BhQawh=V>PRW`>$n zkK?MtJVAQS^PmqrptXnd5P-hUY_j17pr5mqh%7<3LDSzkluPrxQ}la^i1y+``9Caw5!Vuycu#(^MK7;#AuqO~1-ysMALh$}b$fzu=@1 z$@bwFV=>i+Ijf~ctOU#0m%Zq0XEGdS#$JLTzUb_gM0*(*M)9>M&B?cuJQJ@$sL@%P zQfH1$}1PQre4m&M>a^tlMG-I94L|jd}vx11*sgCoM^$Ekd ztnUEFuR14kIUet{{Fyw^TEccYTzPxV2{P%(B*W>zAAv6hbN45}&IIRE(qwBL`^$5R z6P%Uo>ZcL%3v3gdos!7?>SxK>RYLMe+$SxCc*ALOn7kL`!80s=Z#aFJsJZJmoUugQ z3D`HBX-CkNJ5&9J^DYs$gPH8Cmqg279xe;$67Y-3&Q(SamX~CTQ|qXVJ=V~-LGz|F zkjV)qQ=PY&;I?Yqcs|XUPb6K#FXiI!f12|NYlg+c2{*7a-T8twPCS(L&k5~dQFVT^ zdCNJ@WF?RYyuiNYBp#CidSzvTzy;j5ob^l&-cAq~z|IUOi%7cm8<49+cC#j%Z~mI; zlsGQ!6o*4Z&teUo=_E0F9wxsq9y6U6m^?TjK~&ZKKt>bEPEa{L(|MhV%ITTTT1qgT<~h4P z1U2tEoqv^@hbzX4mIhp5=NvjE$))g}1oD2N)9o}O`RcRbZMY83nMNc-pfe)&v|6{4}!xy0nv>j`2CXg+mX|3(^Zq`Fwm8P8{- ziNy2#g0;*UeHNX$P2w`=5D|A;eVJpPM~z!|mwD>06X3RKBTU*XcWmk?W!r@0izvai z3CRj)ESZzveE1p2%BTkCAiHD5+G*fybNwI>i|bb2XlE`R#VpV#Ei$M8dq zCnnqmr`qo_nWjQrZe#hyMyDT>1xz+Mvzhd{laDIgW@k5(5lp^z;x3RK>Jz$xoo}4x zl87Q&f*20uJEt>~|Afybh&KUkb>=ZDTog`lLbcfDEMqblG{T01g3j2BXd2daA*Mxu z>~QW9$q+AJlG{9XI^F&t@5OiBO^!olfGP(hhy>7(LtR)Vd^{_5CDP zTn5v-obgOn7ApXg$gp7NEc1{uKz2Jvn9MnoA10Y#ecvg3S=#ybm;9o5V_3~|N;5$X zl6_7!BJjP?Z+%Ik893YTbYsyhD1Nu$#s7e_hKYLPKjg&zB~3Srj4@$UrWTP7IZ0RW zf!m%Qa*~O-KV@xl|Csz406*aqw`Dmx?bNzPk<+d*IpYjuauu3;?Am^F z<}xY7cT${n_Av=pl$vu+!Ryk_JSOLz)Fc^g*@)lYm@yZZg4&jG8OXz&ohP^3{Y^aeBxv zt~%?P4458E-H)_Vyt!L=!w$tMuNwBh`t2@qFCUp5BqJNy=Jt@LEfW#L}6xGQP zo+LmL8*J>85Sg&l1TL7b4SxkT|%l`!qbL5L}#qQu)!T`$oeoZ}3ijN$?vy)qzwE z7A+tNeuD>38&?muBr;y$;ROstjo=X`c#R;E+QEed(G?`uG)d|PFEFVSUMNxhVBJDe zG-I_-Oajju2KN!k@}c zDeyAP%iV+5);gPQP zN~Z+(dZc)F^_w2)J+E|Hu+;-O12EkqZ99hFxUp@S8Jz2pVm4$3UuJ@>4K~pckK_5^ z7&8A`_=zUX+rh8P=Jalk$3>x6)C)cspBHSL=t}Q{`&Zr#PGo}K;f*Zsc^nS`$5DUg z2YuyS$C$1QJkrlW+7A1fa$&#tFc|Vkn*jMJIGu=m1;A1HqTo^@?t1Iu;3*~tB4xv# zt9TX%bFZ;34&Hna!vfznTO`+E7YD^dM50&mEDm;JqORgu>FPS#V)_H+fL{xkuU;q>yp1%AZB>LnE^+kgW)At>8Mu zZ_up_K2=c?>Tw|Bz6_=@!K#RLXLayBc7;_D?W_r|Bn^D>7Y1B-C)!$10Ay8M8$4MF zEoUe64)Yy0YlDR=OQf!?UmHwha-xBpb6y*)!K8gXMH)-u+X}5?V!9tZdz?r{^aW#m z9`82)>nB84YK#x_#{l^$X)5 zpANx=$sdC2Z-VRDhZtCP+)m^Ylc#_bdKE6s2=@4o3|CVg3vUSyW^$!SoOl2mUz=8qWO`oJb@~sPWfN!L!v-lO@!s=18z~4N25E;8?JHO-a-^ z;JE7bg&GH(2nJa*JcY*rCxc%xQbVX;f~Sb2i?YRi;s^xsRIo!W8ALTmIPED{rC#%N z-e)`yp27#J^Zw2AAYHk@KH{wB!D@IAO_=k+l-e>vcjn4<#6N;BJ}ij}>mR`|k!+y` zNSA`siO9COMTTGe6Ak@({Sq_IJ+5KLnuRx zhtb#?Aa{bD>!V1LZ-I!=5hCfL^Dv*-1tcz%mV_ENK>0)NC}2ef^j{ac#E9exaPvTD zH%T+JxThs49Exi|9#Cn<&mZ^?d<#DxM*lUKe+Izd{HbKD%?;;L0u40 zG*p_1JDXKBG`10H+_$fyp*M-Rm8_U2ys`=u3(X-7UIO*`1URg&UgnC2PBhMGu6XDY zkxW`9j!c9>d#GR&)JU=fNXbw&BCeOELZ7#jnz`@B(N-c;L zHA5DYZ$Q%?G_^uwJ>(f6bwY12IWY=)92C_JWkykcfucu3^O-!uhLS={Jp?rkL#vf5 z)-(=%;~}VN8rsREB%EmN1Eg8#giFF=Fren4yNn(JQ5ujIp`z_&5+SjHv<%f|k}qCr zl0z*$1U0QgeV7z!87syBc_I|_kO@FiLbI3*2Tk}*Ku?C2dQb$&Q=zR)*05*oLq|LW zJ?j{{#iTt4x^t*t2N`H2sChb6i^+|2xZev%x6m{uL*c#Xco zC`61jdOiM`m-lC_wXbKNz1LoQpP@$SG6^69V}Jn% zTbf3t{V-!-L6`)dpWz$ihxzm>&V+{)FP~TmNenl(sU&EN@3bNvd#ajpGyk+tnFgMx zjeaB}Cd09wHC^Dmukjuey<;@O*ve$%pHR1j;GRe0B$Ki-2iE^^Q@{x08X-5a5k`St zD*3?WSK`H1h*=zABrquki&S)Dk1+CHC^Nz+rDQUM(IY4_lHi!JLDP*4QSb!4q(&Os zSf8fc%BaNj>#xpd^mFe{t*%_73&M0HXV^oY8PtbX{QN{u$ zOP)yRr^1s)8A}z)jv52aQ3AXT&lp?!C^a$lSK5jjZPb1oNp{rcbwQ;y+PJTJP?1UX zX_`F781jVDf?6y+n^#Dc=B|0zT3^9j@1 z$tWh{jg3r-!98<*dO<0SZxl%mv=~M4nG=kgEOTT@f@ltXZ-P;JkgB4*8P?|Zg{6}*y7$5NuZ@_oR zAKDrPWCxQkGQs7gWcD!01cC{?VBGa2 zd?Eqi3TKk>1f%me=~AId##km5AJ!z9$uTgEnVw|4!DK$%>wfSmT*_y>!(=58yqJHI z@g0+kXX#3|my7~KC__iiHl>}u$wmUBC%>oo*U3f+CLthLj>*Q|ioh3&)9THGs?(2# zVGL(ccr;WWH;lbZj{iy@iZG31OfrCAMOnrfCU2+EK|jk7Ln&WXkJ4d4%Lp)O0|YZ+ z8Ko3~9pJPB^I*<|-UJ*AY~!_IN?CL+NfS5QSi>aAB{@ufyoVl7+gLRmwde^;Zh&?I zPZPl>Y#j8xkTH-6E~}A*jdM)YWon3|(O?86Z%-xXv17Dh^3P~ZdNO(PE9x4Kv7X6< zp0sxwF^(}2eMl=}v>u6;UlHg$D={lhM2zdBi1d0xMu}HoVx4SEeTI@hb1w~-Q;c$> zi4=f&@wUEEVv4baNyDr39(dKL^DN0c1mvyK-~=;i>MY6`f8h5hL}VoD{bBaKL1hqZxn5AQVN%$YoPLM zV-b@Q(CkDC*(5Xd3LWO0Z4?cWIeq?Pj?q++6j8VZRoxsTiAi=NO_G_+lq=!-|JiWu ztC1Kc)APTHS7g4ihspkGv5LHA6q6)V0N#8Un!3ms6(Q1eHud?%M&M;4Oa364B}U>a zMD8R}F+Gc_Qia$nwh9sq}9e!{-w*mqJK(UoiBh zv4m08e)M{L+gQ)!*MF#DR~vx^q^9R4?-)ZAiHQ2ED6w~pKUk(rd$RM6QEnk>y&`ZM z0DT8*j6ScCopVQEM8g}{)*8bYjf0M6LWbTo3?@$iX){HLb;eXCeP9^DF=)L}E0qjI zKbxSgc6!ff%VY_3&&+3H#0SPXCQ(1qBx8foJB_p!!`JiLOo55!24grOclxx^7`g<7 zytnyA<5@*g#fM#D#e8V#jlTCg^`Vc96?wEiGMc=u5(~ToU!B3>_M^O7l>m)VLSABi zp+RXd#N+7t8&u0CLn={namIk#@MB{!6C5WC1Np>Q%>>6ul-X>2!UWxq==a}Zq%*<6 z>>sfFsnPYPyHz{kURGMs7_rrt(>ss}m<(52#IBH-x#0Tq{oWsbP>v03;2k`%^PI&y zjfP9H8oa|fJB`P8!BaGWP)2$dAU$Oi%_# zxF3xbOpd_B8MRIu`+WpuvWyEv+~?=4G2tz;T%tG)I%kawOoqytG&Gzw`mI8t457>S zlhNaCrREy?*_|2dg@i}+iX_{W(F=)eo-2Ftx7o%}vK-j^ilhZmw($(3ZGC8Mk!?K3 zr1q{D(R3bMb88q(p57ND9#AC0WO+1AfU}KhOm;@o1S;E@$K>q=bl+OGv6#v6B)F>@ z=Zx9Ln~d(BMzhFlV=a?)Q#IMhWcybI)G999*hWOmc$`MTY@^uf+;w)|sP7{_uSkXuHDwbUC9^C6SJjERbPiT!0<&nNTxyI$!J zf}OvN4;Ar}&oNHsA~53T7_HakPAtbrRU{=aE0tCdImRj`x~w@y)cU+yiHf9(FYhiW zav=E}qo0oyn-BN$8q*a?3G6tb&hPaR{~DVZEf@`tVo?F)zV}o)1n#5MfV0|nj0uW( zr2aF2-bOzGFvNAPdUoW%tvN^KuO{etKpE-D0A!vDjyOIg)Lw% zWTG#9jW&C3BrS6#eC8gsqRn4FRwVGg4av*+*sqi8G~-ECv!V zSNX{MKoZQhn>{=GffO>^Zt=(oAVtjeE`dng^MHz(H(eAfZUQM`CV%RwMJ)g?t(l{U zSD9tZ7q@ycML?#E`GJqz4WyiTfk^}Sl4fTh<;~jLT`eib1FC55RLC=3*-ZZ26%wz2 zOl9+?kIV&9#ay$)lUW9&nmKT%M?M2m!xUe5WDk&9W|1#FB98*P$L#JyXMxl)7x~CF zAoa|1K9U2Zfm!G)&rtD&aiWoF`$$b7jm^u7WCu!qkRUz<($uV;j#}A)dyz;$_nQM5 zJ@h^aH8U478N{TynaSkOO(fI8jM+toihfL_rP-QEPfo0rIg!aoCaul&OkR2ywZI?s zfO(G5OohN>YgWi0(`7d#h}hR4q{QsQq%M=T=1eBPt|OUtW;&Aq+}w{^?adq}!`@3! zAIa@tHrY*<| z@eK+^1YY3!P#QRl&16NA1+G_502yv>IDj(A?m}y{+4i8yka+rEnkkMplbJL)LyOAM zW+s!sIr4LiF^kDVlo+nhQo-~X^ByL+K0`9rY_CX)_-1=hbY28e`sQdR_Y@*$$T)L8 zYvCFWWyYCXndpVqc=HGoTvmlZX1v+t+XpDucWgSh`JB1vTOwO8(HD20H#ac3vMneA zi{r!#=G?<1(=6@lRWLa`c@y@K;o~@_+4>m$&{q@`WgydKYQ*TDUUmUhk zqhmzaT*X?K@4&9g5{MfzhaX2f$!at5(iXU&%=}W36j5RTJXWv5;?TUz`Y*&yrdT=#%e)&|Bt;b3{5NQSz(J#GjF5h#SXZ#Ndl?c)>i! zL|<03#=N3Px;P4y#GwhQ!w(K1SZKg0EIXiFcXB74gZ2Fyx#oApE-_YMxG{_ugytp zXX0r%3xYylo05gDcA#ZkrnyRyj9}>`2)=>DGR^mxL|-Kzex~^?6Z1ow?q`}mGuZ*_ zW^~nLn%9|pP>psrGP(C=1f8Prwk4r|lu&lCct@RlrQcL@1VZy^^_OYZR3s9Z0R%Ih zX*OV)m#34=ezO_N%m;!p`^~nBWCtrpNah=}3(GVD(nW&MH)bz3blM@I17?2~x(Ngg z9Wb9_L)R>lIcSb%ncF~6=Aiik+bJ@Z?%z6OS}ao;2(BUznaPSI2UfxoYC_?(@VbHR zOX`k!L_f#DiD`$|!CGW7m;R_Jra^7OBmW7P^{Ba78A=a+olF@zY96axP|1{fSrZ-7 zi|NNv^sJpHbJjCX4bxe4NaurvN&%jPsiGNKCF)Et-1#Y|#3(^t%$Oy;IN@*Y(04yd}vA%QFAkXvXjBPtfE z4oh>*JjdiSevq!4&HqA~WPy&vp`i7vIaLww{LCNb8AZ~g4lRY-2f@+vhne^fYNbbA zV>^GF_v9c+5jP|Z`U}9&KV}z3IA&ox{lkk=Z}7=6zf&^l0o^BZ%=1ii56CfZG0{CB zhX*n5AX<(Yysa_>cjrln7l-6?%+ic9UW^xCDpElazgl%yO=~sGr`4Q@(CwXL=C=by zhkxmX;p#rg$=gaTIj|dMDd^V8F{d#(F@t(?j;YnWET(euUVXg9#4G&gb#%fal6UzwbcR`HRMUjZRT^?giP$WfE zISQ-p<>0Nb7LtrWr}_gx;;idT(5Vj2F$t()bnbG*Sq>AOp*ZV%MKXkb6yvQNMZ7Eq ztnx8bvFM%0MhsY070D3#=?~;9m<(7=NzE-s!0MogSFr(WAQN4&`3(gui)7q~GhoeR zqMIyWEmOp+vw*ZR*|Z*e16Ck5cYOq`6-;z}1g!OOB%?DF%vZ9YCE`g&561ar5-eF= z33=_BU^P@E1wK*}RIQj`ttXi%qcl083t5$eWLkHtLRND{ynbHDdQ1_ofeKk8SO(i3 z-vx!Nxl*C*VEN`WStw*JBQ`XaR77ZO@T##`zQl@IrHi0ea$rftpjZlzSuv}M zBHo*#m{p&NE^0BW6%a_D20|PMi&TFL6R*jk&4sUnj+_Cz$9;D{k?WE8rzRQptF=SlpV(MAu?*E1B%LwOHJGsJJTF zK)3Y8tuP^>Umhi_g^G9&RhfKcEt9XTWvs+h_>>$B)lOQgPhfeaOH;<`QzCa|ma&E^ z;^n=JHI9kSdl}0jEjRCFtc6VU)Bj)D$|jk>V#)K@GS;7rbY+&Y0wq<3e5U&`(S0Jn z>9W=`jd&CK3A}6m!e|mA-saMlnFfj_$(maciT4JpWWB*;?h`cYtz>ObgeDZYma1fxsf1cI zW;Di;wvtszA^2V*yd3cs>`K=COmORZF=VK+u&Vy8C=rvnDA5T@t5fI4V`M zrjn3q6C_wuik@8PLqMOQ&P*}*2K=#I2HRzXD~fzGGk z!;W}yV;!rMLMefyYqaRCYgJ$}5(q98>RPqQP}BkVS~rq<)>9-So+=g;CrSuWKVR|< zt>=}D_iAZqt!Dzopmlk}d}@vUN2FiX+%?q5I>~e(3mA>99i%1xOe_5vbS_;{O{_PoW11}6a$>_(arNxV35mTL)qb;r4 zwNZ$ko|bPyK)cnYF_D&OKVVMr`M?g{&gytS{s5u3yu55@S&Dcs=l0esiev}1_oKZv zgJc5xz#oDWn)cR0mVxX0)Y#O)+QS4dGhYsw=wKaWt)MI)6sr|F&O)>9kjJQ_mBm8Z zW7N^Q$TIUblk2II^(T`q!{}a=PF74aEJk)vyD>Uhg_vkJMklKrk*M)9EoU2iYD{k? zclQkv6gtw~+SnZJdE0b;nZDbh2644qXeDf!So@VIh27i*ZQa8<$^=&kDD$Y*?;UWE zL7)@P675C>L{IA)%i!3BGQC_GY#Ws6Z3SCkCSFn3D4@(^u1wJqaE2U(`uOr5{G9W( z7TltbTSJw0YG5U}R@CRetWk=13$P@2;-Oz(N!A3C5qe#pl<&#xXB}ZX`Yqhg`k6^7 z$v&EX|DmR5IeMh*moNGM()xo<>&Zz!E50RGOS;exPCu)OA}Qj`t8nlQhpPOB`ui&C zksT^z={fkLj*g-md4TWtckl;&dTWsHhg0x_x@8M%_(`jAD{3D+b%bQF)rJYSd_QQh zAwK11J5{O!;EzfbTXdN3_j&Mx>Q*W6!_yWN5&pqfPCuZ1w-GK;`>C*J7wP@fmtCUwQ(tk3-cC(+iQZ0~ zVqI3|iA(uUZ3{%>M*rBnVBl7Bbp|2*@;RuOb=2cYD*! zbGmhiiQa{sZk=GQLOp5OJHtAwNOGVY5PVC_ur9I8GH{7C>=-R(TDO>#{t-@eb%Z;l zW?HciP#*CMwDu*?E$Im^ssnFZE6EK?z^_^yHd)ll;-?3TY~^=N|?o-A-2!}y{! z%VdJ%7;YafvKBJYevTzp?FUseMNNiH?zW!^0i-RF^ta*m7TC>QYV~JQ;Q44pmRVz& ztdKBNzqbnZ7l*M6%VW`1f_qVOKjLvNj3KUvxO=j{35CLU*$J)T;`sYN}SQnUNFj;FQ zwpXTuYj*_20ML5Z>e7J{YrZH}txw+7k7(?O$#GH)1EF;;YV;fhA-~TgJr*}cJ4VHb z_pKqyP=@<$lMR;L5lttn0|&!l(y`H6rAT(vNyrdR?LM-uE0PhVH(@`rjy;508Bw^A z{|xTrZ?euPlpXc=>jg#ZYFK<)PG=GtHW>mSfP7*tQY1YpVQE3}GVIiDu~sQU7d-U< zna`|ET~Le85>x=P!z$L5NLJc`-RjMEV>f)AS|2XoXB~bRe@_VvZAiOH`>Y=ni3FZY zdt?v13sDq1=+~CfO^J%iu;q*$bief~lZnvQNWQTaG5G=t@&{z#fVHSQY2AS@n_-O{ zveq-HR~=$F-+^nOte!nkCOc}tbMd0&+Bk98TK_1L1@Lw1Ymf;BZDaB=#HyWuz2j59 zBxzpyqjgxx;Bn;Ldj}SWxa;GP7x;6V{#4ng{@02AJVSqG!5_CAKl_Y+1wY8vbzo~9 zcGk14gO6c3C?4i9sEhN~2__g1GZ4rH>rW9 zI~|L$`!Ukfu~>U96FnV^v-dF3)3JD43?f5%Iu@{-Gttwrpgn!gfz4dOB9bp2|c|$BNoJnds?QG5Z!1Jsm4j+M7- z4<*xjI(D}`go&PxRj?N^(bKVt_I^bu;$=Mas!H~Eig;`7MEgfSK~H)fqzE5RRl9vS zkw~;P(JszJHtp@SYT{2UTP5aglqA~M713J-Fe6E{%Rhx>1^;2%$OAm?VFY+p`=t88 z+rO%6|4gFpNLbCjrHFSrwpzX-|1U`wzMQ0*Erwyfyv$d#3n}95@>H{@l8o!pt6~2$ z9JSI#Oj@sl{EoqQLk+wA)A)n;)w3G*SVg>joEo;FNV>qY-Rt3kpBnZ|CfaFN(|&`A zcF@$cKUBo4_nKZE=o|5Uh|Bk1L^rbbBG$~;?Ej^ew~uM9lz{ve=G)kR{x@o#V_h5a zwpRYjj_bLHuo(2@dRkBn`qG1kboc!)L;1_GRaLC#G_PrYsfgz^uW3_&Np>&_Jmfep zuVsJDTIeC~ggL5ZA6Cd~*IM>1CfdhP+ul5aI*xAX+V&+T71KWc7P`{@Q_*TNeviFx zB=<3P$lYt-RD?PgCV8*@#3+>UI>o*AQ;N`|g5K$%-Tcbs}&59IDv&mOC^JhyQ@d!i!fHYTreJ)2yO*{(;pz8#{pz|jd& z7w8ghkk53Z|IbJYXHmOt8`-lti{Q4E0{ym)Y`?o#d3)_eO2}*7`|MStseyFsHnzKr zQFSKn!*c>KG&io3%ef?RUZ-;VlC_i3VH3?(te%QwD+{7{T9i% z-qV)$dX~}N(^mE-mcehIpygKfc9zlp)YkScmI)s}7)WJmjLCKEXbQd@?1p&oBL*&it(h%4uq$4>TVig+=Po$Pc) zyqL#_>`a!?F^><~M_EQ!cxU?*%jgR4Y-cNy5&W(c)F#F}cCoK2lpfSEk6r9P*^rJE z>}r=Euli&_#{qV=t11!+=s3Wxb{$2$IKYSP#w?@a0HNbNY`10^Xm2`S*3It7Lb}1b z*^jW04!P`Z_f^CTx$JH~$uc_R@)3Ik+kucv)k`0-$Fq!%xa?t5RBwigi&S@H_ptK@ zVfL^WDz%KD4#MnVf67D$VfL^yndk?phy6X157I^+8`#v1H++=4Z#u*qesFAHXLT0~ zzOQ@fAENY=-`gd6T=$56gL_184)?ZWCSco8cwfVHaA}Tx#z)!$>0_UHPPLzKKb-rx z-Q;;hUU*-U-CYqcyf4Wfs7Q)Pgp=*)d+BF)e1QxFF|-rN6ZUmQGNN?o&;Yx_M3nL3 z@dom@`gEvS+k?hKXMGjIqnTM3(iTp0RdMCL^_9`dND_ zBfabyXYXX9mp$X{TTJwlW`f;tGMUx~cAm3GG0`iU=j|0t^or&M`xuj|=$FRBI1}w+ z1{u;zniuUZO!SgwlI<|jOPZJLEll)*oyqofCVE9<*tJcvtXCqYJ%kCYM5H=WW!Z}u z=>?r_A7r8zbRj!nks-Y_3fpa&=%tagCo|DYBgfvrL@$jZ_5~)m>XCS==Vd$5CewP^ z^NQV%iC*?3+jE)dWzQ6Qk0SI^h+hx0KzmIX?WBmKr^)9v-Ts)#+SdvyU(Iy;OD5Y> zz%z?C0Zg|KGWw7Yf=ss)B^n}^1wI+G>`_e6Wr1Y2y@3h3ERf8xg+p5CvOqG|engQB zp?zNS>}M277v%Gj@Ie53E(?M4PWkRq?I95=N9lP9;#VlyV!O{L;2?xqgZAbvvG=@; zGPLOX8)TN)M-=f6M=Z7NS5U^=ZCqv_R>XagO0mrTL80`(;7Sy!y3D?uTL@%s{tsjz zCHR+K*s~LxjLCZw`(<_sCVDJj>XuC#rurX!e^+21PSEykARTZ}E|$w78dhbt|&Pbw{McXzox zaEb~k^x74Krqe^E<06*Z=M?d>_=bI15n6NMdg_gQeP~6#h0%)tkcpYWA%!{;WQAP_ z5DYu+%4mf4^J0}Usj|A#gZHZp>_7Lc_`#n^#}Ivig@GK2fmrc;R#*wbj1KGVVF5&+Hr)(u<1E?AV2vYcJwun_ZZRp44x1d!=5*ZMVy?j9$g< zw5u`Eu{1k<4HBS0zn%Fi|NoRUREc><)^^$tFwu)OZJAy)>ceth*xfjf`taEo_G5}f z0(v3#g*}jE^g`@QdpOJJI{VUomSyzWv#;zISw^qJzOutCqt;>~8f)qG(=PiB*3#>zUG^H5q4iTE=$E+`Q0P3$us16q?+{xC zXA#y+g1Ub9*k@T;FRb?3zcbPOcCRg7Q;$SYpKjZ$?YIjkkLWSS zBSr4#!&4s8FW`N4L1mg&PTOGs*k|9XN!pb25MQGYLmji*q^d6N9)>z@Kdy+kS~_lz zQUvY~PdkmuxYvnikACD{?9Eqxw5u;dbKWSWW$+PhaRCM!jOiM)5k8h;KdVG(lrn*w zu_r5%Dq2r~Sk2yXBFoNU(y35_$N-tMHdu#$8HIH{o^y$Q{yn0fe~-+PcPIwVL;5N8 zh<-{vqPw6+bQg3k=(E+E8?}^P2Wh>=pwgY)lIO~XYXo` z=BWKJ&gu_4St-*;F;M1DdnOZ%Xh4};_F5)7ChsqMuOi+U|F|cAKBH2;J*Tsk*A$sXwJ8`+P6W9dZ76;;g?IuLT73lLpc|W3CZ%|?- z+QT>MAlW)o-%N@dyIUAtqKBqG8q3yL-$!y@&L-I38c zxI%r-eQ**kl((ZrhbAkTR5538wAcXk5gkfqa^lYdio}HGGU)}^y`fBOXepD9^I{c= z3$0PaErt~F`4Wo{^J4{!dW)Kxm7PU~opkQ1#VHOXx7- zLKQ+Q6mly>6!O)_`KvHO;n{HPIfX(M-ci*OSPoZz;x)X5LVcKQWKuXZjS0;KgeVeP zK}2Yu<3N1>i;yy|TWqnw>%qlvs{XhKvfA>S3>uL`FDEx5`J=_(7TE>bltXIe$(K9=b=y{w+ z^sLPz+E?xoJw@}#HOVL2J)~!39?>&0kLWu0h;BQN=))u~iPcf`E-4&+6&_36cr5Rh zUQfI{q9+U<(GxG1#Of2_<$di!L-&6XUDL2;m1-FB4Cy7ROA2cb%H3`j^&;LQdjHfT zddcn)y)Wkx^wO%BRu5@6Z3Qq<>=NznZQ>H`q;BdGeHqmK zF3~Pw*~~@SC*0g6Ix@M1OLSy%OP8p~WC%lUNr|>L$|;BZ2e_MXe*P99Sdf0C^%*g2``HV0y9{zLF8D%%tn? z7*PSppio03Px>aBgF_#^M~3>;iV>|rXmDsBllS_?ijrMo#E{T2MZ9Uu(9qQPQOi%f zS!KIhu(rdc^Tjc7;;GOEB}z*#B*Q{mn4nW}4J0`{l)(g-UYmhD9Xh}SmtJ2284)_B z2>1!oc0dAd{OU8l*Wd5(gZji9PR~b&KKdYcCP({3ANWhnM~2d$De%X&_^eOtGx$MS z>~$YRvxWw2K#Nos3}_$k6OH~GrZ)XXM2n}lzzaTPDADZTFd!2ZNmj(WX7jmF;wCib zCo&&-Js&xqkCgqG?MS{3^|?@Aja;%YA8GMP-sE4(M?TI+4&@`)T>{|@xWsub)N^xQ z(|hufXSd{)nVFAVRwPvvXpkW4ehMGV3^o50wNl06hHz&bkQYKznS9v;E=ZpaXkuvf zP83QBRDOZ3I++yun92D$G~u2U%4E`Lt|mVzk`XxY4uytI3SDRN0}$L8oD>@Tg|e(B z+%sUF{8GsB5t#dvGg5G+|J)R&2_p>XIa zCc1{gq47ji>9MHc&>SC`Q7A3(_P|O~zoDjtPWpcR0OY5Hnt!E=E%c{Kric0};$8bT zJv2&@450_)nW2Z%QOny!ofGPKb8aSDA5ZP=B&44$Jg_cpOZx&X?17LL*5i zF#O%17y~kzWCd^4gHNzsgtOwI32f-^hOuI{lG(-Nokp?ZEg)+{N0=-J@)eMEp}M=N ziMus|;ovHu_d_!nJq|*cp$(xWL{#Zq=MugA4-jbvo~&M= z_GM`OAtLoU2SlaSU@~->Nf=~sc-#|e{VmB11~L@1_J$TJ;&s@s^F3v0qY4bFpmq`P zt@w55`eC#|(}ytF_&U_{2oanLk<11rI29st*HMzesSs&3VS*>aNoD{O{2&9qO}-92 z!$h47C!r~fveHUN4{BNiueqfkj;kNMkKgafV?76G+9fHr9 z4n61!1;kZQI~?lCGWWk2E$|z}M?YXAjY$wucrHGg08DA&=0+Lj{8{6iL+oTvhkegtVxd|qjo9M1_#%;e2y9=nk z?2)p2X*%bTbuu4n^fQg1p3u*G=~f7jM7HN8N6%14@MPYDla}b3^~lIVF>1KZ~f0`dHJ?vCeubk`;W6wX#Bkm^6cHdC_uKXf%`loP1X3 zB__eWa9{!-_pDGdqh(wlS)qAMs&Rc}g_dg>xT2A?))R?pJ~Kg#9vTC7ZYz=oFAdVmQULOW-9 zGLs@2E~3k{&vLIy5l>8t7IiA4On1^!FM_^lg9C#qs}&md*X&TG)0h#jzh?XT>stZn zuLn*C#3U$2wp*}n+0l)zM1rWq4YrXvxt@YiVZV|h3x8G3_=%Fjlyd_HuL zWmbU9ULe1Oik(sQBgU0*k+)z@3PQeqzmcFGxr=VT2KS(RT@0C|9q`DjOwPk$QS77_ zLvL~lHFD_dZ5Km3iKu*CgIrwlRRzsguY@LLVZLy_`d4sJae4n~dcdxRW~(1k0v>st z$w@fYf{k@Gw1J39AZAA#5U>URz`OA*Jzv*DnLe4jK<2tD(--z}vCV#S$y+i+2lGAj z;(?&BLCqsw;W+cOTqGGzWiL|Xq%W~=6}iZn)`{H+-BKhuPyzP-E`rRBQ1V%<0}Kp+ zPh#ItXdxjnxDb5)d!G=$`>L)^!9jFi2WI{c-w#9a2YpM3|A#dAq1jtpwm(9P&#Ar; z&}I80w3>-7+aIBim?WqD3d(dydM9jKhnD=Tl*K}LKA!<{E3|>hduc5SK|1;s@OP+d zHj2_KAO%GK4kan#Jskh|a=!qT@pvni_aC=SKD$JhM&-EVyW(_NK~8A6GKa(26;Q6B zi+;yvmHL^VG%XCGI+J%oGcI5zy)5}fLm=wDU+#p`lqij!1;2p3O*czF+4NqI3WF{9 zmr?i_UEd%)vh^nQEsvbP5>y@8BjJ&7`vK^Cq@K)&>~E<5dqOSqk*_c1HB|X>UNW%@ z4SJrPy7|bO&hP;ueAqmpyKm8VTs?B&W?pirA-Oa>nY;Q2@|0}ht-SRyPGg-BJJkV$9h8hU_`D&Q?BVDWH2 zBI2Xp<3;T+;RER5olMFCc@RkHaIvdYb=8491Eg$t6qD^hUIS9zS7PcKmBI%|2GWAL z`9~mBDSVUF21Veq2_RL&HLsy*FJPmZTSNVR|b6n=d-HDE25;Jm8Th*;r~j8Qbv^GN-@d9^OprGk4h-Q}o&sF2Ih99QkI z%20Oja^o0L6*5#S{DUG{!EHb;49Dbu@@4v7CF3on=>2kUIEQ3}vyeh(>V&KRsyYHx zU|OKmpsMbRtX}xwZ@Fu*Ubxl`Bwh{H^VQ(cQvBAy_j5gW5Yc0WNA#+so?C-$wvnsF zN4DoBgTJLm$&*=|j}(34a9*LoF6pH5o)Q@5Cf0{ZIWUBu=&l#u!sJVrRJf^YXHaRL zf8Yb%z*q1E_=A24`+wLAKd22E96cL^=l+hSycpyL;YCdJ+0q8#gg;0|PyZT*%PB%V z@oQ+*hT$tj0$0;Im+_^1pD#-x_(6@^1=8UNZN9c>;?{i9DH^gof+P8~Q&GYr2fGJF zL9pYImkt%oL(U%$h~l|q4$37o7i|*m`=_eIfS1@)Ob)s-dYi1_S!=V(#7s}T2x>)cYwiyxq5*JlgSJlv8=`4a)r zyGa4jBHWLN8bcdGIa-Dn5(#{k_H$XN%*TEVs%6jv;X!|qxxY>YMJEt#6CTCntFP$u zj%~wVFj)x%GtoADfypsgC*oA6eYnEkWGC98KHEOrlSvfR3N9|%hi5YROim-m2dMo+ zYE8##lJ_BR@3!vSpVEy!9bD4>1Jd$HlkW79K##=clQ~;d(o(uZcqS#UDrzK@zC*Z2 zj>=Hr>JgIZ6dpxH$rRoPpVtc8L`0qH3F2kYddSUCh5KT~LLgmT^5z+u=XvDRWVo*s zpE?iiZ%ZSrM>=*PKa@w-zeg48kxK(;6!ysU4=K|gvA)SGQ~7o*eMiI-dh1IXJw5VZ zH>zrn=+}Zr^lQN*hx+8zI(w8J$gbhds?K=Cm+<6w4ewCM8}hq`cl)Y(ovOwkS?20| znu~T1XZvKZIl71cRwO&BZ&wO2dn8=sHa22*)IBM5iPt0H>WZYOCi^^H!Udad3%xd$ zp6s43DStj%9E9Y1hG&wRYWwqwEM-IK(9drJ>FsKre+6!R-38ZaY7$#3F(69jB3+)1 z6ALGSyQNR~nleOz5IH9(ep2WWMq`0oR^)Le<0jE{*JHv@GTC#LT#;kK zBNRyq8~}nLiethPh^R)618?uxaN{UdFh#JwUI=$`2~42NgOCxn35f^Nrc@l%RO)z5 zCp@-*(iX8V!s@bfoN&U+nc$Z;r-E`MyoSl|LxPID9Nwe|ohw@eGOvVdMUx%WS_@=K zxG@vd+74uDxUC{EEtKFcJqT!e_@F`=QMzSkha1L_p>cibT+1<#rr@~!#(3rhVJD)3}i`o5tGG3;5w`Vd*Ir=@Z5M3!bMtL zAS=Q}17v#tLHPC>khjCNnP7v5fvgVSV)A^?pt{p;ZMamB?4WCZCdj-Swwa)7e-V)N z;l~ola-q5ftBRF?-Vcveh%Su#49LcC!$M>zE3JQJ=+~ROLf}9AuqAx5Flm=hn*%>c z+{n0RFMMS>JiHkGK;P@bt-oDiyExgv!@id~!{@HTOBI3Zi;j?sad)_T36#l>dJ?|d zj_<_X;Xp}B;6srhE`#OWVVgHoEGN|Us91Pb}gr4ySK;~e$LmruL!vlOWXy@DTWLKss1zj8sFD^@__3H6xc(o$l zJo%_^NccIC=Vn0&Q~xgfp%SINsTUxH@59@f;5_+(V$tGQ_z$%hrCW

v(vVlJW9> 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≫x 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�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�?Uku6Fh1|orx&rfJrZ8BPr8?^UUq*( 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

K`NzEUkjyRfKO&hz5N}{*Q zD1uvMdcotGVEQf#W%+RT>l;Asy9D>jOaKyNB~GDm_*cim(mjxPs~D5*KsFL7M+9yw ziR=o(BXA}0~{)A zwU|ZGAWE&|?W$G=kxX$7szHp-a#o(%C^JW-56>rJw!)SA7W^0fGTj&CD!N2Hc=DJ_ zR42ERRhsNT?G=J-k0GyQRV3sEp_0{yNLW119;#$*C6eh=9;#$LJ_kMI9X_dIH6aof zO`+eZffuV-GnkC+nIJ|3scM~OGO1L(1W^V;U(GuGfebxX`31g-7d4_HN_w$Y6nWN+ ziqqOrA1wF~`t6{c6scpSEI_MXFSL$TZJ~4r>;DvRr;at5$>&oO1vY1OtbeiqvKp5?ZQUS}F8)hel}D@wwP&oIi^(y!D^t%pK?Iw{dKT=BP{Y~! z)`TS}n(b2~f%?`=CTb+mz>))+Y@ZqlG_)46jCxP!Sx#A5&11qgveuDI*x#|P?9w-~ zj!Gh{iCWuWiaS>T8(9sP<_usXt0xgT@N5QJjjh8(A*X z3Huk_Nf57se_ye}L{j~mfV@Fux+J1&5+54rVXc*F0*{Ry0-+w(;*ZcnVR1ClZ!r55 zcg`eR?N`zVH;X1)-H6DA6wE=%R-IKS<89GMwpuVzyB+#i16Svi=|iy(Wv@V`kK@Gc z!ExeMMdA}eut-v3CmeEi(OtME=20Mht-)l-%fS7t`9!i4l%amsQb}lO1?}{+))UF} zEd)EGfb_TS5y|o?%LAyAnkMRvhqX_pMW z7AGnKdDEIoTHZ9!AZr_uOrfTM23d!RWC`$4h{8I^sa=3 zlp(a^UN4NNeT#oar>u z+Cqflm!fx+6~6&x(A<=0xzVgL4*dZ1f0zsKHtCzF` zFO^77PqM}n$@Kl&psnmOg{|p~4)W}A*jh{^O?(8G&2_@~wvH0hWG6sso@&w+QW6-2z8^RBgyh*xgjwLVues?#&o+D*tS z|5L3xU*vRbs@050*#C7Ic`M&Es|}MqKrrg2S)G_%i@=qS-^GjftR74f=H?Sih(Of9 zUsn82RYLL@({wkR9OG+`JW{5SjPU7P0=yp9bgMs^_Ci11T2Ca^tw&~9g}=mLWD1o` zGprFrD2C+LyBXGaLS7Wju%=2O@lzG)#hF(Auh39ftauOJCfFGxW?Dm-C@;>kb~91I zm}QmQN?LBKGRta6B+Y;0?-&unE!wlJ*BQma0|Pi2Jj>E05uf}OBfj1pFJ@csN#YuM z-ggm(@L05Uv?DRxW zXIRaN$YoMVUXd~oz1$>bSSf^}oxko1DaZcJB_q2xUK(U@jKf7coVPPLExq{2unO+P zV31ofPkL%9F+KACGL+;Q;;{bzcxWAh!=~kfmx`P zDv}?M6?l8)5^E(9@K%WXQcJCyETsAu%dCRmp_-Ql%dDD2WTwFW#WJg2lngqy-0Cce z2+Yna_WuY6;jINxG8l6oT3d)<%+-_YXdhZLcIOQJht^^u>7qN_XFBPGPkdz6`5t9p zn`UIgSm@5H#j&;475d=yw%1zsh=l#Et|W-y9+)ez;(nme_`3pmi%2mhW4U|0&Z@-3 zh}0ej4&c&$8i;;u4Ur#2w|TOv-C!+d^7Esz3~jJZFv%z>_myw3%KS)9ijr`lRX;~#7g=JKX^H3i?y9dwy#5E0Ep65!aG01X#;ERK`E+kPx#8(MkFjSXmdd3E9)f7 zs4I8Awr(;}+ho46s{JbM;LbkO`o;!@`yQ~W=GinjfOj|ctW-<_TGSj-xGQYKwOG)2a#Sc-8_y)D)>(2ST zwTDT&{qpLf1J*$zss4UIPQtP11J*H?`Qv#hbI>}&GIxNW%t7lC%lzCXLG*=q{nh%1 zW&UUb%c6q_Jz$|a9TJ2C)SX#HQIYtAkeGPUv`3WJFGV>iE3C^(t3b2RoET9l1x_VcJEhQ`l&%vITE7spk`oQgxZ-CYn>pGLPcjQH_S1fT_Cg=z6 z^vXl`KwYs4GCBzzyu44r?HrPuiG)R?4saJ2)b%&4jZ6xL8YhU@1F+;^onRE(DnTRx`Nyi0Elpz+p#iyN zjc0?;UeuK3bJHSNcpcva>qOxm@J)6k~kb&{mvKTvqN!g$MVjW1IK3xjdNL^#S@I4{f~g`~*!KS??Wx{aVY?3zuYV6R0xKyb z|AKP+4m?R**j`Vf>7vYGdGStR`xX%|^AxrVK0pVeiDz!myO4~k>MLqjC(%@YTc`{% z9*f$~5P`_%xGrWlCL%XoqD(QnwUlw=y0|@=iHhqI_V-fDjq8$LT!%QaOXiB~lJ-%l z=6~c-*Y_aDEw4WyD?orO*T@%<0UGc0o=53GFvscbi9 znL9v=5oygb_sb-RazK*ojx3We;!H~(+o1VZelZw6RI}Hy==wu&V>ppbEcz9YFp)h{ z1}+z`@*ZTC;A45kHTY27J{n8G6g}V`@exDy`Mr6HrH*aqMaSepT`XdC>^b=)!Pe*0 z5m*GY^CwDztpWC@TK_MW1W9Bbki z*+5#_1B*#ABLr{TRrmvz)9ek5j+{ym(@VySw)P$-qd=w}$h=^$EH2d=L85d6@{%n| zNYWX|HXxntl}rXgD}4e;S3AC>l=&KDaL%r~U784X7Td}}#AA8vAncxdsNP60>OG}wKkq>4-WU8)lZ+mVT{NPnWz3ufxQboCFB2iKP2~hs!HUo`kg~d%Bcy>ycOOg+x5duSV6Don~^Udn73LwZA7( zIUY>|($C({1an$CkpA{jB3=tLz|LO*z2!|F4Ty4JFE~KQd@+h%i~0~di$8q&C){Kb z_2F6d!3O6BMt!j01KjyOTmEcTVxR4UHSQ>}i}*p^rlduEs63lpypt|OFzQ1u_~5<< zY}oxP=L`;9isQB}OF-0JC9&+IRdR}2_5~)Y`(oR59?vOb+bx(V8OI(`EvJkV<)o|^ z2HTTK2AY+k(1w>k12^{C8Bd^EShR_BpTkY&_wZq;U9Kj5a5KR$yAcsD6AX)T;S*4H zbK-Dl`SCBSz|S}x1S33;{LN&9C&S~?kuJ%A(s&0v;gN$+%O!b_r~$V}4up7o?V|Y8 z&&%PYM>@d34@=P~yT1&dyYw^Ket3m#(0XV!JYL0+6{ z-(x~e7HCbi2iKD_7-w@~v^&jCBfWPyK;SWA3<6dj+$7j)WcEYsd($jP85t8_PMc}&qbMa!XeS*pBZ^~fIvoA3DPJ?BSE+91D zuG@$V`EV8{8AyiRhe_{`Wh=JOp21`Rl-k)Kv&cTmv`EU`Nfp=7E=3BJ@05b|>1(x`N5Igcye)8N7~dnt)RBNG`uFS%YaZr^Bl9`>u- z?>3=m_WzIPUsl=kBoQ^<@{0~2v)W$Eq+8uYYMR&BUov@fTwZ~5G;8fYnEV*YJ0EK{ zE;#G$hi@`o@77vDPBf3GWZdA&sAT-qB`O&`qLR@i@!y5u(sN8A52+;Ds0_uc$o||V zDzZ1bL?zJ{m#Ad?!X+xHJ>n|@JH;^@ed!9RZ1j~&PECa6TUhqoYF}!KNsuL02H+|S z=zM-{CpDu)5laWiTOhx&J4@o0hHvbilK9o$m2d3+L{j~=KaLAgpY9twz(UK{$_u-; z*$$J>fM7Rkn>~g}_kwcpu-)FsWH6H*_5~(eD@d80c2aYhZw@ipW%prHY9PF_R{n3e zug9Lls5T%Z-`abaXpckn2qepnYatCyWb&Qegh@&08=eK3-S!YBPcr%5UdyCj0qLP1 z?9)uzA_+ki@}pg@r8KR^V0-LtOw<@`uRVpyCK%293y%F{&m@xS-vK1<0+RVG^9dB; zfpv&vs2hVgGclcz(9)5=rwfinLmgT+eqlG7^5; zUzs4U{{6+C!A1%}-k@1-`#O_NK=9&|1GcY~4Ak@7cptD6h@|>^L~bpBqGuhFy9o~3 zjp;*HLLFGXz^3M)-HJ(5T+o14{h&Rf8_ctSzd!ssPIQ5g{Azb38E=vLS9=VRbP=}& zrrJrSZEN&IrcYJrN9>+V4i$y|`%Vx#YTst`c4W;$@E0~_ci_WGd-?MeSH3sjgNdPw zu<6>qLL@9wK>1N1r|gw&qzslo%%^AU+e9*bs`1IT^|llhVm>q)IB)uwok1ka*Y`#o zk+U|h*7{b4xOAPfH<3`L&kxh6IFozc{+iVS5T_XLf7@AXy7-hhQ4KtF!9GgFo4USe zH)$^;;j)!SXdrXRp2VaJ(=lIi>Lvlw|O@w#2UgY@;A zkaf{9P$S|sBR8U&k^#0td$wnbZk!i4#sEMykXK=M^H^398fXbNUiV^?wN6 zcwFA`IfGb6b>m|ki)Bth#~w>=j5C5|)G}49Gl|JJZGv)5EY_LDNG+wsI*W*8inpOW z?1RXRbygC|5~|R|JB2$_ScNJNd7KJNR2!AoX-NcMy&JF$B3#u3`J6wypmMfPjU^JD zD@4L#8N7@34kUhl=V({yfT{rsI;~$uk||W7EaYSmNfT=Bqp-7%j29Pk~C6j=fB*b@4!n7)rV-MV8y zyjA&f&I}@O%|7(r`dx-y`_A%LWMI{>ppw(ShtyJ2xs{x9y(CdXsY=cjCTb{E$r;gG z%9ISn$m!!s&QV6HQmW*%O_q+SzFlP}m54WVsO(H3;>BZSXE6~uBNoYqYqy-(KGHF) z%8(>Eg_(3+1SyLnjw((yMyf8W>I$i`RMn^$9Qh$MFe(zBa6TjDG=CeI>%@%mg!7d& z=kLMirJisyS!PdRzvv?1jWTBs%bW&+Q-{@^Us>jv28p6Lc&mnUjAfn&^7vIG*(`G; zv^lSM9#X8PbBTq{0;vLXuuufatp z;9_T|BNHq!*so~i*i5j*AZhK)ArkfdIGgNJ8C!GqcAyuZgp|QAoM6qQMBVRWEW>NA+Mh4;-nFQ$`Lw0 z==Uzp_e`+Dz%t(@DrRf1;g@ONz6sYwJO7fXjM6zkx;p+8896FSUv|ne!O$!OnU`HH z49yxK-JEJHgQ3|3q-df9h#V{87I{7TmfwFgC!r4h8;+gB`th95Q>lbD2IGA&1 zUk5lhoSdQqoS4B#(gk*vdqa2nH775Tu>X%E@)56rP9Y|5ZcLz8#RfX%n4E$QP&lv| z=u~I&`)D~UGtg-ui9Abo3H(0Lc|{`e$LDfnJjfZ&Bx!vN4KD^c>zVux<0`B%Qk?Bf znx2p=_W`HuTj=Sq|G;E;b`zdC3pkaSoCkvYfC5epCU0(pOW;vRbDm-J7K8(ZG^Ys@ ze2ffbf=+89ss3F+P$uZS$TGOu3uSaiV^S1?fytyhgPBwYg6+TV%xCh+gnV^L&2W}7 z%7l=iX~Wqr3Dqz+A%;xnlqBNq$Y&qJ6#Mc6(gnwvFhmAl)DRa+|FSV_2y%TaDMOxg+rWxEtVtPVa`TLMBn*vs)V%i z50l}Z7J@bf4GnjS6H4_j2eOdJqwFCy3?AW>Cz&k28hMX!fDcT z>PyEcJ-&P^PKguOs=C^^O%LnKS6ZtU2o zB6)H>M5dZO3pq(6P&qq6&7O^SdNEP6XQ@triJCo2btW@WvuCN!TuIzX&{XFqCTjL- zf^&$8JHs~7`G=932b<&+A4wkaskySS^EeYVpB8p%Gf}f}Z#zwxs9CtlP6sAx?rw@R zlnCY$IA({<#k^O8j-TyMIed7}#?>a4r%=GtviC)15jKPz&npqKo1LUjI8iDoOtaf6)~r7^oSX)iV7DBaeL+H7JcXE1fvD-UV+Y}c&rAa0`LCt6^aXK?m zGa5^s$xPIY#xiFe6E$dG=Im5Kkwi7_WjO3hx_$-Jzx8By|yc`_f-ru?8oNS zxc37;62aH+#jBu%T)85LPm2Q=Cdph=ug!}Cag(KE^+LWlkjzBI_=CVgCb*3c`^*mm ztBJVTxJ0E>DHY=-feq4C;@l9-T;Kxal0ZHocP?W|;9F@(D|ItLRQm^R%nux3k_;r3 z$Z;mk4<(3KZpMm_1E-mE27;5~9|tZnDZMa3Gy_*l165w5tc0DEaFG~prCb`QP6&3e zM9!^-Z0|o#UX{2^HPybByZ!X7UzY@heC1sp)hq-J*2Cq2SIC^aMH6#kd0@HpQ=@09tmq8Fgmfx(3G=v*mw0&Cc_Jl~bbiZu{Yd|!VW zq-z8Fr^*b(s;L867x;sSd)dxsf$Gzw2J0b?7F>d(Q`}>@K2V1>YQX<_pa~NkG~+Ip z&jY=glnwEe;RdcaZco2~L+V!F4S~0(qxS_qwT7{wSZUe#Uy%>UPOdhpC2V)Xrg~#w zIiYFV%PnIC-jKX8uwHr=t&E!j7n!Ka_(h=p3<^-9+S2=FU@#N4rFU~+E)!LJ^8#NG z$<-cd3ER4B+=La2zyU(}nkqPX#cFk4-~t;`6K{Eef0(FBofjxEQwB&?>byW@BCthl zy4(z&7pTP=oQHfAM}c{Py9i}#YVUVmAcKh87JL=xoh$Pm=RvTPZV6-($)olH3)hyw zb|zOMbv}jGLA3?n1TIBn&Z)NGn?QwGlBl*|d*Cf5YNzv#z}HOFPUoG0BShp>90uas zfPap(qc&-O>y`j@D)QSvBNDkq$s^+VhW{6YPoVwZGu@V=5f-V?P_%$@^KD=hk$j;V zlU;#bOrSB5`wVuu3BqyxzelRQL5ZKJ%64JPA) zJVhj1OW2%5dvbRLGFhYci|-DYta$)-kS~Vx*c}+ln)Q#uqI(F+_IH67S+o@pwprf= zUSm<$N95UuJ%L;%{eYlmPv9*kV_>X|b!2Z~A={Y&1T}jD%UGi}67LIq&O~l<4+*g^ zuuY*#@bNgfr)6K@AQRuMikxOLu7{t#*0nEio=CPf4G8XL*cXVMi%A{U%JEsT{ecoh zvbAJBE4DvShc)w|5raTC5C;PN83p|^9tQ#wn2g{X7!CwpWimFBumQ&`!(!=^Lk9z0 z=1D(iUQQG{A$<=9Zb~9*CCh|57)W_jY9_3c?aTLp*-X^w?e7DNB%!wxyxrjYK)tuf zl_(RDdutB`x-fY%T_lN<;Mw6okkNsKG2$GMBY~YvR4;feaGc4srLct)M$*Ru4c?Zf z`$R5aY_NmF6#OBey(1r7g#}hzB|jcm%jDKS;N=%ICjuAeqeh+`tOu*9KL+C7l?2D9 zbA(^~6zD<(77e>=R1i)E`Vnz2`#2RC!{ z1uC$n{bzBa7r43{NM_B$K>8D@#hSrfOa2Pn#hQ^oaKHUufyS)49GV{^27|LJfz~YY zzZ)YmiF9Pq$9&4=YM?u7KI2m^R|9=n)2^Q;uKoZ=ECK^r(-lbT7m+;8nlt%+k-5|- zt_K3Fxtt&Jiv`&+fW{EY_o?)_p~kB5YHl+|hvb33{CG9d7^BObDeg!oM!!gQ+$@dJ zXMI>Ww_@}~M8cYJYivj)#`;C9ewZYW6x60fH)DFdWFks(Y} z>*v=^CaU%G>#LY-`AMS&DM8O;au7%e>q>$i|B>|UJ6KAX3EpaY1ty1qphnaCG8ukP z32IXk_0*5a6@BKs6$B_zFFL)Fs1KAHtr8sZi;Y9gEGG4kga9S!I~a}KDd+7<=tr2$ zc*ZX}f~JICekplI4G(rbCG}KE1l~c^8#E>LiA?YgqQ`-h()TjKnFVxJTJNz8?Z55WO5}}9v8bq z&sZUo1z#DkW>?kMFi~&wRrOs=@Rb1*v#LIErF4a_3~Ru0Rej8ANfxHVjP_nY)%4wr z)G3l0`V}T>>b-{EW{q@)ujOqL{Gx`QzE+YSBX4~Lk?I-Q3_tzV!eOd@_d0y;zFem2 zZHZ(@S9??S&P;H%7XzHC_hEuN-6e60Y}-F^0Ow{h-`udSC3Tx_nGBV+7&s4E+!34AI5V*QmAH$?YWHFed$W}=5i!_fva&9b5 ze~YAHZCkTM(ULR^ncQ6uj^+?qDoM0zrs-=~GqR@~1*PfxnW!&8rs)?Y5sB$gEHN+A z^ue1kHepd`aSUC-l&0rO5;fgO-$cZnzG|d5$dj)0$n-4`8&#&8>bHG`5AvcnDmT;X z6A6o<+?6-i-zFmGwHBqr+Ms@nHDzCxFZC_;b3_V!*Wt_+t~R&SFEc5XnM9-&*UCJR z6)K-7#y<%whq}5$OWkaDzb^7IKypZ8m+*`G^&U(xx9}q^ZS+M0TrL8{rYw1d@ zfwj}WBI1_)cKTk{EPRzW3ANLYGE$p++UW&M)PlH6)Qey{{XA(3=o5(*O8P~+Vr8Pe z-en60$Q@L)_i7^dZR=m1iWKJQgL;jvD0UYgAJn@Lacj$i`nYdUMF!pSNlHlhY?4++CX}W zapydH@le7w-OCf3&%fbXiec}qpCZR@lJ?R6VWQgVK6>R{(gQV~>7!3&qQ*1*^?gj# zc&5L8nn+mehVBouufJ~YRxuv1odbbm;0%2tJ&Su|#p%|g39YBp6iV^xEBCeMs^kqcclpUdG9xQBm zgg%A{SnkIw_#^c^Mk<0M^>W{%GuQM;J(-AWdZd1kiORH*p7@pc7CP3xk$d1Lq^yq8 zCmlkovgO5-1*7!!Ot3SH!PNJ9xWVA%M+H}7zov> z*!tWb3QKMM10rEkAkXX1FsT7# zEfI%F54gY$r$tBW6PXOYQWH)$!@THdeVRmK!JmoZ3vf0@U%(_TQgJsVl-j~GPS2wU z6ScJoaiVNRzZj=)XJXw08~nHXfb3<`ElQ3sxwOhJK80puoPLr?+0}}iWwJR+E;8A4 z%UUJ6!Dwh?>u%WgtVeEQ@HW707C2iuQQuX7N#ZU~y{MP`SrRNvxDDn-{c|SRKH=_? zu)c+f8qntGJx)tks;|w_H!;CEaD21R(Odi?H4pcLNpPGfe_0>J2zyp+9$(QXFu|S` z$*X!Ukvw0g9&%}5lD><`M1cg~u_o#1XV7$>uWsb}cet9z4a#JF>N$LX#lGPlc%Wuu zCwofvFnAE{cPHzyzo84albEbmXQDcZ$@=|FRQxCFk26v6pRA82A{PhOK*mqjbBW|p zu(6YvqAy`mw=qmaNz~+b6<|4%oTA?^3H6kiB2zqF-u-)_h0r5U!A~>_)AXhn(1z?{ za^n1Anx4Z%MPa(WjfslFbp0X|i~_!TP1n=@kajQ&@2lh&GxUi}aBS2Y$SnOb6I#Z| z1TJy2$z4m-P<6_}x&i7=9jQD*0IjM=>)-hjqh`9zhsO}=>RiX0Rz((h-YhQ5pS$C#+0?+3cUM3vSL^~pq_ zw5n@nQ8d$yHVfjLw`;rj(tB#9D^uq)Qf(|(AB89kB$0naupUcKJ$xK%Y5MK z43m|iXEaf&p%9z&D~w)*OWSa(-xr=1LsqUY^@JGoUJmQVR`!c8iw)~Gt9iRpYMRU? zIJt&zzAib?Dg-mn5Rc8AEbipqW?gOHaSc@@@AGMvP8zy{34TyT+NmXj7=4G`tlz~N z*N(Cb0Sa-5Iu1~MQYbyBpdTyTtu;?a3zTS^DDjD+iCyB_= zABT|T>n0I5^!fT2BA$jLzgU{*>pkUpqiCAv>r;w(Ry57?^|`EZ16`RnY^g$!udj~U z;X;tFZ%`rP1-E>CcQHe}3CTQMLtM{c4Q&Q*OOV~CS&oK z$$18E;-`=+nVs0$oT#IY!OIKp}E|?cCTLp6{ozdU##EQB=zSf^FVtR`{ znMgt6=I;_k-6^nitk0AhZ7+~k;A)F5le!?W&6javMoO&Ms=vvuHtm;FzFYP0nBWWA z%Fy>HI>d(N0m41QTlJqy}$!}}r`Q2@L z6(+dnazr(_)K0I)B|fS~3Zy}cyS zK5KiiR%^GX#g*;YZv8m9nn2UikY$m3j`c553wv+u_IB&L{8U(?8?E>26%!<>8X0hm zmwblZ<`)O_5*j{mGykB+w}na?0O>(}G)dit;E+f9J4pMhmzTr(@FcYA_RWX&AQ883 zKB9{fGDvD5aH3euPk1~S@dM9fVhR08zd(-NckiF{w32Af_24Ic5fQhmKkf10doV{g zR^S}TFCKr&90z}}+`pgf7iaW6r6_qcwTYw_ zB{C6q(~Smm)H0=c>MdN!cOt)bmw+J(IVp z`UTy(a8=KfhTtnveu0;hT-CL*6njcEd|AAv=SdPxkL$X(x4@*n?nzkL8eG@+NLO0J z{(dnO692k>m`JvEKai1;DnIqVGo<2pLl@;-Z*iyFjbbMMF4RS%w}0!S$Q5ij;j;6$ zK40322KFEQ10r%*yBq@YkK6l(xJupBKQChFW-&v;_^XH^VU)Z@)*QUVuqGs`&-jDM zdsAhj>@%)0SpmeTCO{KgUb@=X5teRosWQeW!RQCBOfg0UCV_Y4u8>$GnMpPfthlj8 zEhfp!q$bX|i%BXF)WjK$nLL&wdy;sgHIt`vO4J}xypb*uEn48}w%>SL5=h1aC%Lh} zHSPrC_6itynVOQ+WP&dMlGI~@<912zV}dWVlC&V=w%ZAC&jPH^dm8-&qa$gcLy2Ua z;)6KSabJ4iP9`Q8Z!=LZf(gc7MBF|k!4MTO=&#%e}t#iOLLok&<~-al59t`5t{M%=BkjCE&H%4o@C?qjhc9Wfa_ct>I!yG+4=)D@n9|R`TTggr8vw<@d-!{CP9-&CmTCWvCDMR5pUQOH<{?`Nil- zLR2<>V}e5rG+xDMkSsOx&%_GtsW>1@n4IG;%HC$oxkGAx4Mj3e_pi}pe=k{8l8sC9 zNi=A87+O`-$~S&Io^yv$mPv)ks?$&}`rjsNUR9$3JqT-~fMCv5HSTA!A2)x2<2#Lx zOn&CQUw0ahFj;;?Zda;iJi%lK5VTXx7(v7xRa7_TvgShiqjDQnb>p-|!n!Ykwv1Fa z((aV;yk~93b&R>vj_6)ZMx%~V^oH=dMu!>{Rk)v`oXn@XMpr`F za6!fHGcY1kKGZX&O0Cc%3BN*msj20Ajg~3W$ci~I@P}JB?lnv%+nL;FEMZasuCl@k zm}Z=0au1V6Msh8g7Rt-UM&JKPg6W0jp|LTJ2sBY4DEB|5_(c=rr&RJ@sA|^IIL|~? z#g@iRCaSu&Hp1MzHSC*wULZkN@`({w$1j(f?45WG&tMv}@22TAgoU@s}j4knnic#~Ww<0unM zQq(*YC77g=D9f0nk|@hG?JLnqGUWDj4;h0S)CPm@yU#<0$wa*$bvAl5EUf8lJV7L^ zjp-}fnJ&gqCX;|*aqMDDWs=ebcCTYQ*VT|89M7k2q|AR{LD_hlMETxfi{63tun8V1g-x*O~S*W--AO`V?ICHZBmMDasIq=uxBLeQ3xnV|@*^ zjX`}1tgq3UHL8p~W^^W!O?RYW%=#G_Ofadj)b%%#(_|3U?t}hD8zwlfN*j#(8u~cL_>0@jOAyzQI&~m-iI5lh!ptLa>Z~Xok&>B zij?_-&uh=F;}-#=WNS3%`e_=Sh`8m-GzJoJ6UQ`8OO1ADs3vZ|PYBa^;C_l9wUaBr zvgt{{x4=ud&t^0H)XKj{*5{xxn_OgT`+#882paRH4Q+9x#Gm~eHNk;HQe9ZrHQsI` z6K@u5%&ZRN1!FA{cjaN6@l;!xE_)-+pO9Z=U;`2+PqtB`opk&TtQ(*|*+yL^t7po+ zkK>IVMBGJ~@y0ug4*AUNT0t$B^dJ zx4o8Jjuo#ND~Q0wG^I7s{8Fr#YV2b2<3BMX?yp!e-DueXUF8WR?SSMOOFU#Wkl9A^ zgRBXGXeFSz#$1Jf90Kx=k=)TWRPjozc;A@eA>Dv1HsaD<%_bmA4AVod0$FOb`KJa1 zXquP{-PEmp;KDg>akIr^YoUv64QQqD3psO3>nh^{5jW{pd6I7HC7xQtarY{I!E%>^ zR~e!chD)_QsOjBV67@FcHP`4ePcULhTW#c#RGPcF3W@vnIo2y(V|4F=R$b{DkMt|A zbgglqh;*$-TIw%P0M;3Ab}ejmok!ZoEB(~y*R8PhQ;&3>SNfT8x`^~MkMxvRy52Cm z7q+_IBfaa2C#;_vH;YI=_ed>}Mwh!c7?XPxwz|Q1gNU2!8;uV<1gFk68taJUYr{Im ziy3Lq&>Nd15x%CdF{2GEr2UIV>xq8l3txIv)Pa!e*(Re05x10VGLj!gXKn|z$rGCa zS3Qf0UwR(Qga^?rH=B+0M+@87Z2Y>U8d%L0$%iPL<1tCZ z+ehUY?QO;+CLQ|t#qbI~&}?9G;nrAjid-FG^2ezJBHtJ{lqMZSv3L8$cB6ei^gdU7 zKO5d0fb1|PF`4>QtXS3tKH_d{CE`}_ou1fKzfN6E2l?}~{Fw|t(fg3UGg@X8j^cM7 z_xnH^&5}Jv?qK4U%+ zu$;mLcE7QfkThNUmpHNC_*#mDFY?9>2-CW9e~B8Vo{Lx#CQ^Muq2qaf8Vl-C~FwG~%9;n(tWiy)lrL7)C}&NK;)<= zZ)Dj$W;7%X=08lgqi4qqhy?uQmpb`PoT$;r?;(G+NffDt$gp4$5?=%EyTvvmYA62w zr{TOYtReiMEXRMiHi5{ADCxb>UqjprrhkeewZ3yoky0s<$Nz!akMHz-KzfS1uzc-g zWI8AMoS{@wu4^`lgWn2O)ytW?KSwt zD7x3+7h~D8=mDIwh;+P3mE>9Y2~D~H*C0d4&PIc*((tVDK_ot zCOB9^a^2X#1V{TxUcGbJF?T{TVR%=1jth^L$> z^un53%(omK^F10&hnl#l9joFd7d<3tk5u-2GK zMROpN6C>rCQzbL*d8ujHJ|w>gQ^{;ThLE`D8M%wFlG%$%AsRU1~_^o`cu4HDC<^06ijs{Hti6%-U_AZupZ7R=j;c{9m zl-#;d(QqQ;R`Zsz7}9L5DG+=ixz$W264su629~J6TxGL2lZi~Kn3E(CY48G>)XXn# zGf#U6wjs&pV=u@w=*2IY$>ta)8zLRzps?WPl}g~as@ZZJ1p+QlmD3P+nx(QO!9t1V z?lfC6!Qz9Z{!a4?CRlv1YE(CGFu}Q`6sVXr&AsEL9h~6E2ES6w;S(h(dkgFWomfqX zTILl-KSr)Xxca}m!!Oo=wze635w*GE@tuCL6G%NXmq{}q3#-6we&)MO>OzJb1kK&% zS|aWc?H;pR80|p)j5zVodb|;N1AgdBg|BXj6Ag=8w!)I z#iaL{=Sb>$cb|EKh&v*@&perf=G+nCeda|bs)D4M!B+}v(##wp1-`q}O*l5*+%FoL zEnh`Zf$y{)FBTEmM8x&JvAKtc+Zr|Y1bT-b68QM>1d;h^oM>WRBx$bbxHC>PZVB_e zs>Exb>zH8!5$DXb;-Zj-*wJy=r?`@{PUO3Rbi@AE#~v`5V)MVvia%vnG4 z7-`&c($ABa!xAAeRoMF%3wwX_4|1HZskZWoVjetUYSRmcy|`vjvGO*^Y@=L-xWEl6 zW_qwWMu}K6*nEeGTPTN_ONwZQ71KOpo++Yv#-ri=8zaoJGYZFJghwR1u2E*!BAQVg zXm_uQq2ijT(ltsn)teaH2j#^>K~AIUW|#xXw42nnIh9CQG=TfK@nE)XUL=B^wI~5O zr|bpI*RWH8{c|dxf@ZUs7#laCf+}3mQ2d{|YD<>EFZF4*fAg%961A6|^}lHX|Al7y z|3WiG;QI?s4Mz7h^!vhDkXf-{l~Y<-;wvS*D!J&)3u_D9apD zBtTi_cp`ZkdcQdY-e;LFOViQG&Mb2p5x2$3GUpXD^r_d-|H94}#q8`TWC!*oW)&;v zS>~BSqJP)KM54J!N&Rnj?);xLA@IKC|0Dv@JsaEA3rC@5h;c6>*jw?Q&E+vQ6=Z8)&>U zE!*rv#O=Dqn~yV5uEv`~n5dKqQKOi?wlKa}H^+RL{EwI?$Vc z$(6Yr^IK_8+XS0<@RcpcJU}E{`-Zpm9d<=14h3u|cK1-^DoHeX}}yQAnuY_hqCi2HUi+02=Trro!T$>uB~GUxKZv)9an zMBK!jX3l-nP4Io7nPx5{f|`)*n`fGjzU7L_ybIT!m?ja|&@6MWB%*xdMDYp)WR`i2 zNP!Q@H84H9Sc12q5$g=D}=a>x%$#~#|(j2pmBtorkzG3!aa;l~L`1KoR z29q+aB$;czMkHILJTB)0=9wQc*}7dW`^_^ym9D6}qILFp=1+v=2M9CT_{BW)DwExC z%@7_KooB|rLn)-aaxg&zR>cD;!K7&^O$;Vi<%wi#-GDqpB$+iG`zMJ2kT=Z~);t0v zD@5on7F}wpiSa<*G8?fdv6&`vh_q(SwbDsq3Xr$W2U(L;26hP(>CT$RP9})CK;AJQ zWzDld<`Wsnnj0JZVsV?0U(7d$v#8`ozgP;Q`DTDcb3n8j$h&41YnA|M-7E&kc-H(f z7CyNIng!-7thor};2ZHkX0YZ4+(-ZPbRpg|w=*e~LL?;KH+}PE!d8X5&Ia8g#6mNX zNVZl7$V)J+U1(NdO^*`t>qLvpE=&e9S!_;ZV#dOD@ZCauV6JD9!{kHr0+XL$-x^l( z&=T`1p=|9sARI$4F=O790eS-p8ZH@rWF|3rmy6yRSFE{g; zJO#;&?Z-;9<$F@oXoV&gZ1e${#bnevjV{wzZEk1s34CYs{xL$VF%z#anitu4D>R2V zRfP7|n^zX2J$J{!dNcTeBsf*H1Fj`sZyq8N7RMl27Qn`{jb`N!r3NRDc7Na#Uz&}G zgvCSm!g6z4zsNINvj(S=<^lQ2?7?JVW0+4u@4q(BGEy66zBbD(k*3v#nXk<*On!_+ zDnr=&Wy^03Z8hJZ2Vt>uuDpA7o4JX}%fHI4kl&a)nfw7OEST-v%_B^DZji0X4zuY; z=w(=p83~&Rpdjot+c0Sco8^&wYo;@Kw_o!Z@iRncms!B*lZCJy4AzErn-`hn!}?0O zc7E}lIrn2}de(>V%?TiT%uUNAxw>3lzP8Ui!em8cdKHMDy7TCO*>r_W3fzU(6&xQh zUtprH_BmjNiMaP79WdV@;`Z_f%x{Re1Cayfk8DTnT{~c2XHvQ`Y+l3I9554CO7Gtt z1N#Ue5e}M_h`5Hn_slRndmDtEmO?;!h-Vnw)r`YtOL8pxIjob1&3dcQ1NRW+VYBGM zhO1GBC=Z+Wk*lzFZ`TCc3V+z_%_KV%ML|X#8_I^{u(^y$KPE@a(@b7$Dm6#VYO5)4 zwAoCKnSGgj1v@=2K^FXAPG#~FljG)BOsc+7Q?_g;%pHW>mhFVOpG9errMJTZ!k0ag z#QR%);z#o$OAi7`dcY6lZ3y8P{^sMRojGRT^BhQ)@JOqPywpj5wXQq(GEk5VW zsgl4M+>ktkd#+gdaYd^9oHOTUl*ihxr9hyuA3A5wB17(W>2v1m>t)O)-H>;8f-5G2 zcEnJ`elyR1ff~9}E%MnN8D&D*@L4o$)qXdt<;zFvBk;eQMK=-uZZ;*2eC;{`DfPQr zu83a-3#M2D&qqlrSVnRoO7M7f%U19;Gft_AaN?m;)r@kXS#Vnu2I5bCknh_7`wJu) zT*S*i%@suQ>9jVQyJ&7EB3lm()+J>}s9;@=5*4h!Tst8S*A;Vn5kps_&Xl2RruH?a zQ$E~fE#r6H97seKM6JDF+%Q{gks1}_n`Rdxx!MM}B49jdgf))IkG0)wjY#6G+qa@;VcHIX7c0hDHHl zA)+_OKuePEd#P?m_+$r!C@G5Wtqb3Q0#YJM8r6vt&484)ZX?rfr%}do7gJkRhcx{? zG6;S~)PXSx*2i*II=RRdEgHwspuC)w;UPL$EoTj8QZPhbfPITKibzC2cSs?Fy5N;9lg#I~j9PRRM zx8#C=+vO!&$$Qb9+h!$O?@AKAHz3(6+U2<#)np}GACjwZ^d%|T+Q8&Y2)@jMZFsVE znozb-XBqCWs_l~*zqgqz3U^q2iG;F*&gl&mY49 z6Kf)qOF*zMsA)AlDDAY!gp(3*PBF!5LnK@4k_lHt;}Pi;s}qZENlz5N?}-()te!0T z50Fj%I3WF4b8)g?RP5*%|FNEAP26j+07~Rp)*M?UKmStOGFWp32&QyxYZ7Z7u;GKP zIFw1XX0WI`AQYuqZ?kB2f&8Rk9c!;7RHNPo&+1rf4pGcRrD;j@HQ)x;UM2~TLEj0Q zd#!PYrRK3$;e;j}w@kBE6Ong$-i(y0l~KyqCvtl&D2o-r6>6GVvyMntKbd~fHXWAz zti4S9AHugFfi$-&9F>}7pT&wvKw4O*n2fXJ$@5lLwPUE^fdTxhwKbIqHh6e}RckBl z2dSacI6r`)HdYTpVeuKHJvKsZt@_8MXQg#%x~+AZ$pi3N9n`e5+MkeyR6E(uT1g}< zcAu6dxScidN2$S<^P5g^shO4XleFCKF-R{o^njH|D4RCs_kPF^B<_@ShVL1BfwZ^A zot6aOGtL6(V13Bs$H;{Lz^07ybL9r4j-DF74jxeB|0SGYOSkru3%U7Y1&~hG4@|J} zN6kalX(kw{Ux0MB%KU;p%P$)K0i=s{D-&$$uLJ37)nJ0*jq3uZAFTRJXq~+(pzfY< zji?Q+8SF)nKda!U(}UGzJ?v#^XDETR0Ze*Zt(biLl04zr$Lc^NTU!eR%WofRxYR&t zt)2>N%t81N#{ls4QR}#TAO=CP`2t8^EB#mUKx~5C{t-w&>q{cC*kEDnZ|x%Dwjmjw z(7y#9jKEjY#IA6oo+Zx8^uZE_5q-j{PsE)f8(^iMLybE{Ho$s>i0rSh-56+%V$Bua zu06jx&cP1k6Q zJjfHLkHCWvTy-qwLY$to(tf8T((tBZBu`nHOw48S!|j8u1x%(e8Df3UBn>{dgstOH zEB?H+(>Y2SF!>};&Sws_x-q#U)JaZ147HwM^eH#9L#?4qzUF3js1=liny2j$#9`K6 zNyJjHgUw2&6}&*+i_GU_EgoSF{zH;hqa+z=HT@F_HcyeAbu-FRb-D8p+;nI4xG1&i zTH=6pkxAziIPDDuKVX@cq^AGuIDu`6Zk=Z`=A;aTVO7738n-N&o^+R^U(>paG8M=!%3@-TcDxNVDrvrFl>OY=xiDgj4c5jVx;hxi3gO0(VR;1mCi(g-m+n!40sv zJ|OFujDJ0z4%uf}`N~yKc}zRY+Qa0&hZQ-_q|!wB0kOh#Mx6Uo+=13642oi%?~NfgOWoET&EV1n11<8=yStiDVZ z!=)wIca5=NJ_l*28Kl@_aBw!4#?SCd6#p`i(LiQJ$@RW|@fak=oG4kx$uloX zo`Zf;1I^n}G8&51J3!u7q*R@(L{SDTFN~5#pwqj$p2gn*nxmy)kA9R4d=NepxF0`S9Yx1JjTNhaELEh`J&BrV3Wh#WB>vEV zByj@_MM)`Ddsiw=DOFcpqUv*$#6w98QBjPdQmR6)iW)k?71|}LLc2s&=qQN~bA5J+ zst9Y8<#?=6_hF4%YpthZ64vx3&@VL-;#2D)lbK9Dv+9UcC`w`NN~8>KoZTI{4}L=L z!7(drp*LB_efT_A81Ki5n$YHaVKs;$7viY_iQ;}BUs@SV9)=#=2C~`O9xF8}P4lgk zI7zBN&0PbUE!J=*wO^2AtCh#({(exIQMAo^GG02%DVHF&0r|!X65%)cUT_S+YVSvl z+kEe^f<(gFH$TKuL%PG7%;ad~o_nDx;k;rkaJ<9%p@`$}JXOg7DWu37@DttUzt`H8 zfZn;4Z?AQnNLZYOk3_8ktNW~J8U>r$JFNW&ti_Uumhjn*?Vvf}@kiGFgVtH8(Y}V$ z3z%OAt&~KvqkSJ@^u3kA=!y1HbjX^)WE7Lb)^;X~{{!Eq?(G*xthgj;Xg!moRx>8) zGiAGd%xX&{Tk8u1o9$!PK-T=#`!Ol{!5Yq@Bsfroq8}_%iYTsi!L#GmK}kf_jj-G` zJx2U!rIsM?#V7ORncbf}v9Fj0Lnj=qVSzhoO)QC0cWidbN-Zsk+G2dlYDz?&m=t~d zqQH`$kZ>od&v-nT4jx2D-@keuY=sAOJ5&bPI9trd?;dHnMjjjIJr6p0h1&`G!XhW@(T(r_j3bTZfui!!GN!WP&A-K3?b-V>_$Qzr!1aie1L&SY+ zx@Nt}1jn?yKy%Gn#6-=?T({0M!FLBNgx9UBOwLw6gl6VI6K_|mA?;j$M+U=h@0G;8=+ke{swthR$rrzUmI%zy!#)4O zKVj3q-5^C8DpNzg@Fv)knLIF8PAw$Z?=abNKu*wTc0Q9M@Xc9F1+IdXC8M!KF&%XyXxtdi^6TgD1a`s{( zZh*?!Yl+C62W1~cP2~pYs=$YKLRA5kx83uQ>OoLGd+UlU)1ymvTGjKc48xz3*WRIVdeu*Xvv!x~=cG_D$IUSaav1Vvt#@kn%o z_!$#7h$or2LA=342C*TUF4K?_B+(6HZ6*{(3Sx66PehhC&uCQZ_TL0YXD&T(+u;hf zb}yPkQlbSkbJ+ehgH*0$UrECUa$MbT8l2j--)$rb)~5lWscP>fk_#U|ND?D~)Uf+D zCUc^bFHYD*7BoeYEBc<$#5^MBnT!JRK9Q!)Py;uHL_TT(iyC+m?o)VB%f8ZFKERW3 zNd9AwYk|c5bXDzQ#i6#{yA`>DLuGPG2S{rquoWM6;+OHqi`w?U`z67h_=mu9ZF^E1 zw%nMHeWVsMoodf%iy~-{E*>fG7wGe&P-w==UQbn@^y{WYz@Uu z_0Y}jMP1Q_+m|-C%XcFiLakmjw|fxD7HSowxh?17-E9rc?UAfey=!xO4inY*gI`Qq zr1QE=b33oQ^d5WHk06bj+hz|*aB2=yt)<<&rzC32LMuCy$&Zmz_d^*_*T}T7gAYq7 zF5si%Huh8|xD=11t-XZ_UL%7oemnbbB5o~hXSeKycHEY-ojrrdiNtI0{cddX+S$vQ zyc*&*ubsV)(Zk&4wX?rqatF70?d+{ga=6WFXYW>qu+4*#)6V{$NqcVc+Swp^=Z6IFg5w7(+~78@cb+Q3?mDm3Z#q({i>XyHt^j}vhd zHQlcEs0?1ENQ<^mDwWS&>??iofh+A|k9w>q8P*R;t~fd-Nz8|2>tfIFkSCw^0Xf0s zx6w%gNmo0rzw0Uu%0oB1t|B2Y)E&m~J?*C%mH0eK{E-GXWw1(3rX5CnQO#~8l=f&^61`3M!Sp}z5$U?J4g$x z`!b^bLZ z!JojQ$L=Pm+|6Y!azA5FN{J zTS-mPA%)kR9Apf#Gsu-(!Ee$JuAZ@fBofwcRE8^nfjnuSA(E|WA()bTkkFrm3KEmy z^$#cDp0cmAC>034qdjHE4WgvbW_OpG!FEX|3xJ?zuw9u*flu{3L+t06;9DD}$`E@N zk$hkFKap43XVfS^uT#7z?emGD(GgNcWMg|s$U7l;7~Vzv-Y_nt}^Y5MOMPO>_tB zZ;J#dP{>sX6F*>IEaFVJuNQHq7jlNKbi3N%!dYh6wTZY{W)yQ}*j>D?;4FwR?OsKk znRbwfER0LRGt>T360OvSCB&ydY1v#(4U(bR}|($)iB}5Gi1C2*~3^eq-_$Wa|(jmzit@5*k71A4ZeGnMK6^G$wUeyAJ|1 zmPlzP@jzZAQdtrjs!S$QwCT;Z^PfRGZfiK+-a&+`RtOS*y!{8EuvW&B-SBuj{#o*# zOyl@=yq!!WSM-^kAm%&>1=S8Q=>%uN@R0V4_GBV%ZyUB}d+c0>Acl)%8C2VsiXbE_ zJaUT*&m8+Ale1A*ivm(}aycI=u`_f@vSHd+ z2B@roL~hck4-t!u>XMNhQbqF>djvfXYfv<)WWHhtC83;X3@%==<4m-XFI1g-)viSZ zM%k_9RKq0uE+W}lSs?iOFv)H#H8k;b1umzUZ1-T2bxVreDE*pkGCCW%qboE{YG6Cf zJ})0={@QQ>7tCo-vr{dKn^uv@>-OVJx~Ixn=IQnjCf7cYyJn`_BbYp%DMLElwuoeF zHV_Qybo&KK#KVnK<@Syl_9W>{H2Xki$PD|4Et56|Zj3-@GwhQ=N%}=DLD-`s`kBRM zxMtb|vry`m)0v(k*u5Lat}%UIOp zi@PI_clV5P=i7Oq!tt5!@#j5|(kSJPXeYlliSQaqB45?4lsLdviasPs>1y4XpXdlkXwfJA7+CqB1#F;NlRU{{_X zHJB_|1UA~um{f*B5duFq*}aLllQMbsS|&LEo(q~h`z90G7WNjPuk5lDrD;rrPk`jx zk21kTK+nFmbBM?t| zM=V>_0NJPFx-CkkL2Hk9mwXc?xAu$^haphgqvVxOrJbF2OEx{{FW4Opns4nf(tEKh zGN2dNLM+gG?42)Rxbl5!i|HQw01^4tC^c7zxGQLT?Dje6%3ZSDQ>y(? zUG33c2Pit2ql4e|-kgGb>3Ens3p`D3w$@~2`A<;f_)sX}ZzPuXv? z&+5LH0y}34hb6MFPsU?SRC{^aUNjXS6!=s-^Q)acO%m10{%X&7T@qN=dc;$J&e{H% z_`sdWJZINug3b8;r~Kla?aP%KHIezd-INKgV)+Nd;R3sUL~3vzv)`~d@uz*03C?5U z36D#5=~+@!HU;)XN^}P!_2Ga^b{irEzSkr59`#IZUbUOfLDvO7)xur17co&S+*Phi z1wPd-UbQpdkbbHYP1o!<=OS@CrEB(bB5p5!&Hhqpa5ezvoUXBHclY&mdoPJ(als;b z-M-^ZH0>TZx^5TUeeG)0?(6GzEpjCTL`$w7zd~~0a>GuOrla4mzhNi8RoJr|#XNI0 z%Cj4G3b}GUyW#On`t`S+CM~01X;k_Cwoe!F?C)Zpxtdv#a*t(ntfdO*Kla79F{A}P zRUCaz{dXjZiHv;=ilgceW1Zvk?^NiFazUCC2sMDN}N#m9l&Dl!CO;e47 z=oXel=OAg^!jkCRy$}P0g#`{2;5Y3OouZ}16{!qNbQ+Vh{AiP#=yYa+36336k~5Hr z>QYKL)0n7cxuo+p6X-cYG&(BntRUppjMC0}Ni^JOx(RA^Y3Cvn+-QoVj8kV3#v`oN z=n_v0uVtMyCiQ_}fi7Dt70VSObb7j+Gm4z$ipG25#6v@1E!O#-4ZUl|(%ex6=LC_7 z+6O@JfOiGw3~SJP%*2Y$A574D>=i0H*O@%L5H1u3%axqi#Te*`+F&3bhX|D<6xLoH zDUS-=>QrFSOduGKTb(;tbMc-ysu-1>TCDLmkmo-uJ9o1tYoXj)S;c8VBtP-F_VSo~ z6{nNbh(_P?XVI!S&k@S={g9`LH4vaG&O{=)qCALp5cydeiry1A2$G#wh(wEUN!ZNkmh)PVLyi3Wq@Wq`JDd+m8`j!VP~jwo zvw}%CAebz7I_sHaJ|sWPSIx;|@;s0m&4j4t?2v>y{a!=i_BZD@N#tjpfYflrhZvh& zF*x!y1_FDICGa4{SwauO!h&V|3qWc)!QVi47H$}+)?44(k0 z?@2)E>TV~MG|^NRcY8FOpP;Q|Kg*vI1L%ME$e&*D6T(VR8BRyv=W!$rr~M0Atil{o zn&m|Dgep#H&Nd?Xnkt29&PgKK;+77wT&6j3%P{V+*d5{}=`<&qklQGvIVnWkc%?b( zifOh>qN$pj=ImvnYHpfyl*y$h6GiXgu%7FjViNZh>^#XJ^c$l-t!4FY>|ACt3e%>9Di?TwUr3d(in z8R+O53(?srT4uXA6Qm98#^e%WHY9cz=M^GuneF1dLnK?|a9i4?SXjC^dy2V=7Gibb zUYCFI{suV&m z`(mQLM7%MRp>{_EJsrE4rg-dU6tnE9!g36$LgY>SABvg&qnM%MS?1p?LSxqV>8nNo0(KqjgR? zlfg^|JL8yas}f6^Ar9@qxf2s>BQ_H&%_7_H9E_5>M>C_ z!elzFnV@GlrIG3MWO4;eOOipv-4L1S93bM(@MSv3iR6meF))(a2qDUJ-rq^yQ_S`N z8R4uY;%3K4$M>zPISZQSoC-u-%_zse+toCD4z>z7m5I0--D!0IHF9w*GA1*lG>my( z&4jXm#S=@9!snf;2hp%RT8nl@J84XC-U~Hjq8faA zLCsiaC~2US;Ty$t2=fb0kdPbZkkjUSH(skiGtTKj#MNXwD~PzA>Ud9Ce`y4l_3hwz zf^)oxgd5nI=6u4MU;>o&rG&P#s4l2vMHWR_z9A_32e6jux$Q#Z@55brCxlWHCrK{nrndj{C5Y)Ws z^!Q0?8q|mrZ49`=&N+Bel7pe^iRAqPr}rsD^3~__*>D}4GnEKja173nEOhdi)V-Q0 zo(DsVoiPQ{(6YbbfGb2}iF2OGvzHUaWYB!%wEvkjT0mW_=1gSr!pO(u#<-=p*r6`fuRTgjh6^5;eQvlxD;@x+At z+)4daCeu`?%N;Dg*x(Fg@-CB&&MYQRT#um&x5?SXTuaRE&4 zbS5&HTdo95BEy26v&=)P0NLdnVKTlT2_~6fecvg4LE8D~$0Tt}Q&`P&Dl1(k96^u{JGsG_xH=6r{E`a;+iZ+r=0qiD013mCI!x5CYPYO$FA*XXD*Y{ zd?&?eXD^d+HKgVjr{ra6=S?POoc2WIdr{jU+>qjIlN#}AN{=|2Rs79?D8OHS{F0$^ z3(4=!FC@zI-H6n2xSnK#>+{Znzt9KS3cLd3f^&rlR%F!t=?uP(nmk{9Xcebr`Nc(N zJ(I!H;)wj^r2mbYiFE53y1M4{{YMh4?C9#cbD9ZVeu(HFCwNneunr*c1(QV`GK41y zki-R>`Xu==;tOWT57Od;vcYk2@&PWKAt@hBjh6&Z5+JD*+)gCVH~B!47&02>tb;Q& z)a3aV0to}TJ$RZ(t~eK&7KFsXZQZBfLG|FGM3l;pPE{HMv%JCUNs{0xbdB6+?MFd_IpkY+)!0)P4O=b``o6i6#3dGU3jTwzY!A0^je7=ffsluU;0 zOGw%V`BM(QKINc+K-4bSv^07j7Lmy2ET~p$4AdbwuB?2}0A>N3jfHz-f=9|pa$BUt z^Dr+b+G%1TJa{B{vVwfjgvpb^E|nxndq5MrKr=FUlF12p**y*<5Om)*9WV#A^bPol zo-)Oc_-+* z!*z`5I^QE*3ery4&)gC6i}!+A9%(Zm?+2$5k*@$aDqk2}Ld0EfT@*aYWJBckkmo9% zMZuzLtc!wIs$y8++hz;pI_#pLxRXfqDxO8b?o8BGJc~TxoedsP{lT}r#hwS>!h>j> zKMd|A8?wW+ARB-G(>R7nQUn!=bYCC>oQ4es7O;ue9NG9OwRU$XAckwM_(}37xVt} z;3K3dNF2Kp*3a=Z=kwrTc4qWQgf|cvsRp+*Ie#gJ$cEr)CX=ef(Fk*6Fs&8_IxMsd zIh@=S9LhwkzkCrih@9{}^qMA~91quCLGPzhLUfc$nyx! zGy$rs+LN_AsHLLR-FCh^Sc^zl>zE_oZg&UoV$u%?wg$q3z;E7uW!3qE^~Br2@G1w%ygg&H88 z4^AT@+ve6`zxX4#h+Qc=mx9|HqMd9p5WaAQBeqMy_V-G%wBN&U>mN9~5?o6tEMA1s z*jgahgFWs;ktAOM5m`rwWQ(59_{2^i@mZN^sBr_7l;w^BR)nGdI@dE+w0j9|9?057 z(y-=#Sd!9N@r}p>D$V$rq%v6zBoRv@rC#E8_HA%nHftY0IQNl!Q7oHPy0MIcx*(!# zR%IgYY*yK4Evuy*bCSW)6-xXm(4 zJcJrJ*%7%v2aCz-cu^A`RL&YM9|$D%fmF$w$mDw<_X4>sYk`Nf1d^Qf1(V^dshYLd zLr_yK>nf9XSyLmcY-b9DcsB$HMJZW#F*?Db|75lI5Y(h*4N}hFeCq>1>SjIbAr_ZmC2UT(Bq(}K~`=QB?%PWoAnNp)@&#(Yl(-Trg7F9 z<%%^;v%d5Y)HKi9!Q@6ll6V|Q%dF!r35lVAT4mi}lmN$GGl8_uD%<7%BksM!t17yN z?+Iz=gc^D$bd(kZq$^c=m2MDFq${9+>~>}!36Wj|bLd3@L69a0QUo*vh!IdgK|ly% zK%{w#2pZ*GGi%M>JBi=--OqEq*Y)vFE`DdNHFeLPS+iy~R*@i+fwa_W6S*0MGOe|i z9wKDgYJ-RrY8k;SAkS%2JmhU49kh3eyaqCSE}%}@W)BJh>8u?ivKn$NGSo%8=piDp zZrURv4Jgw+w0vDL(}D<@URo_84});O7m(iCd?KS@U38fP>Z9E!v>4jH7LdMLfo@cK zs94di{j`!qo`VdDI_t01AR-PAi((AW+7T&IC5HKD!u^uk%S2lA1y3=^Bxvst!6^ak z_6^cjA#z@RgR~t;d`EUgup(e+kha$&Q$~_B4|x*EU@g46$h7-F4$UDdbOJv6%P`CNu3Q6rEk&-+M*8gx*z;Nv@A}6uo zTArRVdEf1+(QGfoEDqOVh{VDoRk*Q-YdJ5J8LkzTGO0}O=4Yw>;Fz(7(~VU2+j)FR zjnMX!Os_{UkrlJB5!ySwvX^y)qoxdv(3VRX*U(5urq?61GcuQ*k=m^1u^4X*#Pe<= zwS`398W_`Gh9`~GmP?cwHWr$rFnAkAX?uE0H8%cN+=?5m)#xioX4tAteyKHDd#Z|G zk{9dXG~!bAc#c$(VUVL}U^u*AB; zj_(yD;t6{V`ktjF5E092K?2$}BJwgdfw)$8I3{mR$JK_dJwqgGv?4u-4E_SUhOKQT zGNA|Vod&gYM8bNbR#0m`LRg+E@1!m~CyE8Ndn1wbTE)ZIRG3&NYSTwy@)=L!a5+sY zIT}eg%!~K;31ic=Jw)o=!S}%1TFqBcrah4Ni-8kN8%AV048(&Vu~}M|abzbAEzi+5 z5c%;zR0CQ0bF@Q*DuSA5jyc+yNkT2i)YUd~G&UK@)zE^4bpE5lpF*^;jw#%Rt|64? zYKw{dc?QkR)$*ArGvhWM=A5e)w9uS7|1nQ%C`l44&;+Y)p4N}Z^?HgV5}Cu_gX{n2 z!nLnjTmVfkJP|F)JK8ZKCn`ru@~&2hqf9uw`9x^yVr^s)Nx8Y$=a*={w~#D*fHF(9 zxT#23e=No_?Mxz)OLsW7!7|O9hN$rZ{4mEd?L80K30YjOZ6Xr;J9vJfyRFc65(xt$ z-p(tvb3{(B$|JM5QakiES{?=7a#63VwEfeO?5!S+VO^`VgxQFGg^!wulC9E)%@rib z)F*ycYs2Ot5w7`W^P<>lZ4nXSnirFf&&}OZA zG8+12Y>d3x=_9Qrk!8?5(?>-{#x3S0zbiA9sjk??6j$_q^Y+4}Gky&Y|_O)?k@T%(nr)IwOYLk8^632Q)?s zxrup&28CdV7o+QcpjvinT#BNLGXmU(yR;=l#5kEB$S2x*B4V5rGP|`;hzR$i@cZx4 zQizD1fWN@d<_tnx$J`_hhZhy0~7F#vLRNXx<> zn3#6G1mv*x!U}Bo2}w8#9nnS-Q4_HvS~8Js^rga7?GzH(Hv(YisCJoTVhj6aw>zfY zBQo}BNbD03O4BB;#Ke^8Q`!|GQ|3lUwXe1KRVcG9bb5(rnQ_)rO#f1tIf^gA_y@vy z5iM~wYN$u>oVI|7SZs*_=$y8eNQvhoiEJhk7MipaM*KhFQHX}O%tcLm56wM8HS&Y@ z77-yMMz|le)kOBg#93%v*1qx(A(NrqK;k?Ao9eK2-a``Tyv{wM24qDuojX8iL46832>%1gUE((oIqu23y7>=i1)2!YDk6guNYWtC}*?n;o%+w04&t7NOwK^Um zM#}5jGm>EZ3>T5_+SjXXud0BW;T7M5I^bXw1tId=o$#>{`d48`q`$yYJXwhhR6bmvSPkkiI!NfjFRXD5t zSQ{^iTMnkjZ4okVb1>cYy}r2;hG3QVFul1Hb(O>P^ju{2R!mYHu^I+B4b#VN!}19t zLSgghi-@R8U&Hkt+fmDS4?c4bTH*SyyCm^#<j z7kkKEAhq>t9+Cy5uAc7;*HG-DC{|B5J)|0t`uZ(NGJSt-iD91tX{c985n7qP!droG zKu_xlgzAt`BYhE(c0?NM=|nE?L_BpcJ`7VT%=)H*)-G-#4KAXt-O-NelDMaoOX{~1w>HJZQ z{77yay}?nm{1Ot*+UjEo#lVIC;!C>i^tD8)5P43&NF)wS3z_zM(PL<+Igt)}7b2}l ztD~Msq(6~P`hFs#pkO_rV7#+_pHL#9E_$uwX!<(jaXAQe)rS!YgXR#Vo4%Y#{0^+@ z?)n)bZHe^I^QEC36YN|7t)6;YA~T8f;<`zQ?TukYlHsI-zLQ8{BE9unk|g;G?}}lq zL8gyh3fN&h1NLz3=y%cvOs2>-r$=Sm}_R?xy=ds;%|`b`vt$a`?|i3$l3jV z=35fQ-q7ctMw!N;FW184@X~$QLxzvz=z8;W_(KbpmlcP2A6=g=32vMUV(Mx$dTT6f zqlQPYfWDTr&OC-)m8B3jqz^kU>?F#~$Y1ur1!el@k|ePrFF>Hy+psv)ZxQ*J{|Mhu zshfu->IvUt@`qqOE>@&(>$iwhfw`$5({=NLkO{J_;Cm5dhJKNV*sv62rrzWt%J{%X z6M_uQ(#K1Z$Zo$A#&!dluV0ZQiN&6RA><&S1$ysGn0(ernDR@KLZr_3c#XqCz32}p z6F(wa&gd8FQ;57!6*K*=zK2MIixILdllAz^LMs*S9mb9m(iamMTL319V$mMb&q$QS z?k>Z!hV&{|FtK94Az7?XBr-G|BCDaSOY{^XuL2Rxu}rU$fm%HBZs4|>xunZkCx=+8)2^bTXSmqW~szK2NH zv0<{meX19_i85Dhe8TqXQ;2-G2wfTb^b{g>Hz-o*7t{)cx^I9?+$jMMHT2bedcrOI zp-uBJ`KWxR=ev!he_vESq^A%m@fv3RkY4Bx%B*=SjEQPLtWT6Ai4B48LQs*S}Z5v$1rR!@YN%a@+2f;UxSi1fZk%&9!!%x@0A!6*n>3+KY6Olu( zZWgYZbp0NYZIy9nBb|D0sy|o|-nJ<8mlVqMKXQ^U{~y^LzQ8-U`b*cVNfPwU1|l+@ zuGb}*sWVaLE4>lPECeECzS3JtlIf2NqRa`s1IauEqyq<`6M9cFbj3!YlllM>`W=Wc zbW(qb4BazO=9E5~Wc~pnWKQXCkez~K@&2u^b%SK$fQVJ(*LtEPiN5z>2{k@{D6lD^ zbrIDu!vKPhy26Rbs+Qt8j?YzEXOJo3A#tY`Jz(ol*&JrOf>RzFuEuaqhFmLe*o zS6r$$3_Mw9RRUqxI-!&PTZdS1;6aR=F1g5uqk(%hoI{ELISt-ArFPQ)UYV1 zI#HUt`ZXf^=|Q@uH-02!5}9x$4h5}W_34th=Vu=1S0qUZ`(`=ZJ_wGU2YTFJLMtWg z9@+U*eACGd z(cxc8ez>}iQ}U)%OZ07pS&DG$Wa%@AT$qJDIZIb+ZWfa%dAB~^C*qcV8xgmLZb_2q zx4(f8r@RYRv-C%V9>eF>FnQlUqKZ<(O3uZdx-327v8*(9k)DXZ^%_J}|NmRxNJO>$ zKYEHJ?kD&17$$oXEaSa?-C+b^d5oN|nLNgIDU{+<&w3u?ArV!wJcd6^7)o(6l*edI zL_MN;j1fdsbL27R62V6l($8ZoCZx&{P8o9BKEik=k4P-lr``n-Mh8iP&USf(Ftg?!dQedOgPnB0EvP#O>XJIImQ9Shi5NGlwlK58HzH#lO&a?M={#SlElrT z&nO*%riFK2G@{R_BuOe$Prol$!MM+8h-ywbd`25d+=}%X2}D%I<~HOr43u#mPMqlHV+E?o>q*7yGM}+Yk`(C#6C-1O<1-@aQ7mA5O+?j40pl9l zaa`a9j9Vz5!Lh-u#zMIgD`XTaAhZ&F%gXuLa%i$b zMny^7H$@?%4iQz6Xpje|m5jCF2=BkfaBe_pB6ernN5SH8rp*~`brcx_W-WGdA zlIJAhi9Yo@i8Z>CY4tjZH3kwuvio__R1lr`!U7ed&U zHNkXQqlYAJ|1W1;EQyBHC|2H>UrrGB4OZS*MP$K1ob{GBwn>5$iX_wDPwkJp@p-7eqzc0l(9&n zO#k;q{VZy=Aj>5Q`fdU#D9JjKQPo)A*da-h^979h#zE9#4@1TFLFZBx)xcO&MWmS| zE9x~c*U&g7iTlhoHWI61Y19+e#Hdj%d-<9eQ;4YYH8Jj0M;Y}vH8p54%p$AMaE%}2xvDt)JM`RbV1})JRhP%w=&v3Eq+L4YI)hpFeGtb&aI89l4Sao_oKBj z3uSy?fuE2X~po;ezsns^CUFsF?x*J8W|*{ zJVtGen5|35=q#29?IGepBht} z$z42y1cr`uF}61r_S|hcuS}lSF&wm*sC2<#E{hW!1dVTdX#-j{V>-v7Vp3MHn8M33^!u^e( zh!o@Gqv`)IYHF6FM#}!VlK(fY2V`1JPWl_sO+~e&F!kW{HyTKi#4_H7gKuJ}%57+X zr=q$Zlp#wK;Ey~yD%{8~cz*vt{Gd*64f6bO34V~bY>66v(Wu`H+ee%_5@fLP3=z@t z{h`H%c$6C*lBvD`e`KnnMPK&(z5srZ-6{!wc*TGs!oSq~YCmfPh}upa=Mc4>I^H2_J9UCX z)OPCY4!O69;|}W^4pRH66CFbPsce!%)OPA*hp6q;Hyxt3Q>QpYZKrAuf$dZ-_gr-c zsr^*LA!bcotcwH%_hQv(iB+o{|kYCF|-h}cf$VlzAFAhnQslQ?bJkv zsO{8g#x2<$GyQiyj$xhO2S>G0rMc*`;KqlobV1%W5{T%Z0O5e98;b}n7YN7<$xH*6SbW=XHrseer1%eT zqN^?3AvN2GY=Ll#l&~pJYyiq+yf$H<{2+blH^+e+o@u1 zKHnHaGV5uBb-po?>@)=LyO;$oFietZ3qGn!-;8Y@X=4#_MuJ|LNLq1Yn{1LRQi4eXY`Yjk@?RCpp2 zPF^-At!^OrTBFfLP)Tr^SY^E>`Ho05wV+=@3BuCc4?JcmIyWAK+B>eSo zNmdwRiLBu;RDZM<_84gblNzQr>(@9$?bW~M5VbM-zC&PRR8D2yH*S$>ol_5x^qXmn_Ui8WaqDc2_-sz)?(#FQw`UIw8}4ti<=1|e@Dk`gI4 zM%#u(ur0^~s$7VOmSG1f|g z7d&+XnSI924nhmh5|jmU&?wXq$<@%wqw>x7+fn#BwK`m$W}NOMeoykf6py<~X~qRf zg1*;7U5~-LP>6~S`lX?DmZB^gwwy%={mOWoNCLFAASaB)L^eVuA3z398jHK27ORGv z@?RU9iPWhAF`OU3HBd&6ZbBwAEMY=4E3z?)oi;Xi7i1xPo%$|h!kGq~^Sr669;Y|; zfDKXXywR+OOvmxceQ$I^!bZkMvo^3W{oWW)qz#b^Mlz8CusNGy74^`5f769PzNjT)JFLa4`JvmvL&K_`wZt`^WITfJ9Bl9vdx*sOcEovqMBp$HL5QMAURFk9mWLnvR8= zaS3SInT|!6{Rye*Sfn|hh?MAUSwsCkZvnvNAS3k^X-YC2Zj>_9|K$4Zzs5j7nvY3?E7Ovg%@_Xw%! zSZTAyP&BQkV`a=CMAUSwthtzonvRt-zmfzaUdBPMDsO%(iM!U0Gk@?B;YrVdB%$M} za<@-RB;rg(l#4TtOuIX+ig**tl!>_;C2{6GNz_&W%t+$Q(l3d!!VXwy#7P?WLF0-M^}2{)D2=NLbl?D2aPIwsNi_{|`wAcp{}M&SWo(e7TvgZ03{1-Q}rlPDdHX zrB~JbYnaeVVUeMpr|2Cc%vCj8zaoBczj{{H94m>tk5kpuBuQc7Z1-lk;HRoNn}~AS zRWnx+Q4X4F<_<~Rdavfzfw~djgQ$G}MpPq^Q2WYnZmn6YQMR>EHG<8Yb9$wQ-L@mc@UDMo#GGRKW zjm+BSfKk~^*LJ#z>NvIC9!TA-wmDX6xo+dy=0r(^+ZesZwM}$2W;!0>I;Mqbfuj?m zE`&?CZZ6aH{;!cF%A#`H)-&f)7Qt=Hnef}zGrjI!>FqTaOCh&)pEB2u#s*TYTi@(3 zM%EdtFU|?T&|Kdv`l=wVW3;i^SrWH~nwb5O$ok-7A=boPD3RN)P0eMbro5+3&G%8p z@t!s{HRc0ldHvNGc*Y-O_u>uV>*Q zQEtUHxjIGL|0P-cnrura3bL)aj>semf>f5_U8u&}cIL-YD9MR=Y-jG1#Ep4uXQoKv z#ymb}rjv|{d3?@1OERj$+nbk2MpbxwGgFdO|93^9Hbu;12lI|ZDSj36*ungR45?Vb zj%Mj`vQPR{9AHPYk|aT&iUaIu)|AAJ1MFnhCm9(B2py-B*_>pcz43fmXR|E{sRr+C zb|oPda@ob~BZ(Vw*~NU3WK_syS93VofsjktOS_umNJd3mb~7=m7vm!39ogN?oI#k~ z%tcZy)vtmuyP2O7Q9+p9%yc5^LF#6HM`T-Q#JPlqPP}1v>b@xuZ@BebLVI}^i+Er6 zR6m5NC%>0N)VS^v^#*r|+8pj>MvND2gW-Mgo8ZzM^NNSG1k&5QGC{TK0vTxDlO#1vg$})7mYpbM+<3eM zdKSe5FczmwgFKIC=|R0d=o9JLp@{79z?n;zx1o-bV6#` z^O|{xh+6iHGanLBOPcX!{1h~;4(v=YM-ovhn%B+MMAVAr4f7n4n9Upy<4iOQX=q3- zX(pK+h^QsaWYZ?1mNajgdx)q5J5$ViMAV8#Gi&H*S*=8La|jVwiEw$!$uJiaQVTlM zJVit;=q%G`pdqz13Yaa4sHG7%rw~y~Bir0YL@kYi<_#iZ)x*W9p0~_66HTjS&s4KN z5w+||H0Kjh%bscGF-h>H5WN{@f#!yQu#?2Ty^KDundUAc3*OBur}s0>&xw4N1fE%O z6TnRK6rqplAjnKJjtfKRvJg+k9CIX*zrbZ7$Xs(95#h2BWS+@v)DkWWLFSuXB}rw< z=e58bB}ocHpBIM@0+{nj2%LA)cb9Aq31T_^o*%=0g_12Xdw&8BLYOruZ{AY#*jqvd z7kz(%%u@4=B<|se<)%4R$hfsxA{9jC0pggKDyA@_FN!-wb z73Q-<)WE&M>?O(nG}AnH$p%vLYEHev98W}5+J9FcxT+G1F-d!?n3nu=grVSXctyBJ%MYcaNxCI^{*6|S_>yePHY-QAUD z!ZaCD=(Z~e&BTXF#YL<%uSw!&ag}*X5?phM_0+0deQ0&Ah0*GNk%^c^A%!XuWVM+O z5DYuc%4oGSUsfR?Ys_L&217u^!sxwRrq})pi6gCXk?6%=YjzNX!(b@~LKp|vn)gU( zDBS%ZoEK}&DzmXZ)FfuDnMg#{&{{L!T$yPZ=O4Bec0SCO^N@&rp9CNum|f;05&J&p zUYLv2Es)?+9g#mY4`+ zyGJwwM8TIG`J?>v1pJW>SW(2?x$0`S`H?i`M)B-6cS+(#@$AmE8r)+Zk}_`p+G8dx z6j^dtdV9=;lE6xjQw-Io=4wRF()UyIf+TJ=>~%V`nxO7A@#spXU#;u*nm>|hwTjzo z{(^RVauo+lt-a=bl5x&a?K87TNG&S%nURY`uHA^2{bqh5YEr-7>6K~~cfc%8GHMlf z$gE66#nK$|G>8ua{SM`-{QoV9mx;MY)()91h^WPyvWzbp`C+-kW@pNyI(&B6d|r~E zPc6g_n+YVN7Gj^9!$?Ne+2`h~B%{urePK=_8MO}k!VHj%T!)EyM~Z{gVXG7~iGnqzhE(OJID?&9Q5`Wuq@~tRN6b~ErPfbJ%nc-i>!*6qFS9M6g!3rX+%1LNLu{#( zMOZ(D-pqu(U3K#6m|EWWRs9|_uadG_SRFTiC!+f8ag)6(9|^xY-F95raTZQ4QDcrv z3O-GTr(C37z-eY)X&P5f2Vek5GoMr>H0?UX*Qmo#=geo4Wfyl2L!CGKO5(1T&YL48 zf&0TlmxZ#}>l9~?exP3L&R2dgt1K4g+)+x&h)1}|4H#@hOxKw0@Uay0RVj+2ln&&I zIYp9W)?z%wYW9j^8Dv$9?S!p9^GIW1 z4%<(}Sv@clr80gLL&*GL&L$!v8idS4b0ZNIllRCxE{QwF|LI8*7u6o3oJ)V27jvoI z%|&v$$~=b1C;LAobY0#5R4rFI{+G$q%i{mH=}L@)hg#;ufge7m6Aih=kavjGxz2l~99KP}M1RhU?j z*6@uwNcM5A#2%Z&)(9E5C;ywwcT&dfdXG)^p0w=ju01x3AYsGb%gdhG1&h?jW?Mp= z;R^M6Pr*qzD`!Uwx28y$WHx_rINJvG5pE?Cx$s9GNg}NIM0&w>Z$c*0T27?hf=EfC ztPPSl#o#PDS7OmtueI589c{hhAtD+*+L|ays{bbouiN!mCK2%(6gyNtYbudIK*=cb z4iWCNW}%SJHME3?Yv>FS*HF=QB8#a$Wyoi(mIN#RM<~6|+T$T2I3urBWxdp5DvUT^ zS!=aKPKB_1p8B|c2SzAyHeB?ad{)^HWVQHK!PTGQ8s24+%q6PMU835~CF(GVLn2iay+iUx+=0hZY&@2BO0Onf zE>RN(m#B%CLn76Q@Y0@k!J+%#h^lE=vvN5MxrWpd)gk$n2c?XYMYV``iP}GPiCVI| zMD5GDM0jasOsk8Oo3^ZznDQ-`bBGG5Den;FTdv>`E| zD?3Dm)KqbZ@~&2Oi1MyhbBOXSS9gf=E!S`e`j#Px;|T{T=kk*dQQ*YyQCZi6uU%)A-hBc9Y14Cws z1>Ck&1&dSxx2-I399ASBxrPF6TRTE3;I^GZRKV?X4p9NO?H!^5Ze5}RZe7wjKStMf z04?LcP6vd^NATL{chzO_R21s(4l}bb`y>DY1*}aJmk4g4IVMhb+oPntYNo`8RWsUAf5DxyU_-KsbX~;!Lo5?9OTWST6GF zo}4nXbCFw;z&>=H7*^|3_+X~h_*0>k%!2W7XB?0>tm#C)=mr<0&jd8lT7O6gCHdms zz^hIsTf2zdn1>VY$yPd%r{*j2qa>-m-5+3R*ktP-kuQLVjls#*;KS0goN&*AdGec< z;UPQ($?Fyw@+(7zwO9(J`jsKWiufF}cnUHkrh}#xOXPt=$`dI7Sri9fOsg6ZRWQ@4 zPvlp)$WLyInpQK35`F*B-F~LkmW1+-$C6oA7a}Erh>}@WA0n!T0@h1JR1F2JaY$t8 zMNtFRJP(LrOg0L}9}i3k2B-_IYP!d|ZRA}ae-wiZ~!CBfC)-;k{ZmPrYyB;U2J z9Lb*KV(YdfZjy^VN#ewNv4sI~A{>A4KlG&wk%=YNBQ)n^VyP98Dr-X4Wvjig4{WKu zV)bfTNknZr!zKQXjLPWyl%!iX>#YH3nVsP&KGqjZug{g!53CU=XGpN#<-MKb)4 zYQrbkZo*k{YdjhHD?XCVl`=<&Y^WE>-UqVLIzwa?kS~C2vT7a0Chk%XhJ!nRwpg5VuB(n5kKWDqOUlMmP+-^O4%&nn{`(SIx>W#$L?;Lsoc3AU~u(R!Pe{6?! zj>zTq5CSMn@37*IV~%zm#``LFSYwHddMlbe1ExWZNV(tgurWY(srPyQA3uqfE{9L7 z@@dkJuaiS+B9X-~KYDCAM3f8*)`y5& zjF*TEky(V9&K_$VA-5bR5w{#Oh{#;aG7Cxw9 zRdLNN{%~IY;ErtGl8g%Jhll116IvormkR4_|Gk9P&ykzFA!o{~|sC zE=d@ICpb@8Wu;|&CtQIHow8~<1RUx4(-`~4YKVwkgKr=Rx7}&$Sx3mn?tt29s|U$6 zniS5&H;B(#YmxZW^Z%{2)1y`PKotAdiu+C!ES0Ig{Jphb64+vy9aD*Y2tt>vk>`Yv z+fJ9Q`{xA_xvm#EsPd~~)-9U!ij{g%{D8sZNKO+`UG0i>gNW*CSFGBXP)oEEYBiI@ zP4bGTlOKj8W$zYkbH!;=5j~Kdh$OQUkz{tFy2cf!{n{SQBm1&TN*>4QoJ%(IT&UDf zID)!DnaA-~2$#HdASe0u3U&lnW(%CO6m9I1k@+IzaOslg(!rT0zNF!zj+=2zbxHK< zykw}otW4}<4L=ig)2j`um%xn4A=4s%Nf>aA_FP;4C_rIF~{NN9r3tlSc!yI zQhj7t3y9>U`pB?WDjB$<5w$iW35%N@!$uE{06Tw6lIj0z6=piaX^vA7a6dX^+9gky zi)I`R#rz=qq3^XX;d>o0P-IwziM$D4IAFMbIZS*f*$xT%n2nnrW54EHdKu*Gx};ecuQD_0(k_n+(OsbP85K z6FW?%^`ulz^38B$8WC}2+9F}^{u<7HC=JIXtyM^5ezt?<>((ifSpzc1f&6S0x+3d` zjVtURcfs7x5Ba+ETa0|k$+GuZ*&T2d4g!grb%s=q_FjV}YZVB=J5P}~Xt);R(u$EkteZi;7_P|^3M@RYia7v5Ni7OB&_}QI*NZ z)~p*MlWvy0q85lc@0Z6`NQ&a64?r2mrBP~5GYWKstl^jtf&bCHeh;R8hCVRMDb zKE&_1y5!XToaCE$bZNLUr3d(OlYu;GDDH{DJp zG8P`_Pejct!UI!?h?hLdOedn|72$ymlDO?29&pD)>@?v4HESFlI#3V>C(&udoWcD; z%{0QDcHj9uj+xM#I3>Fo*Eoll-?TR{ao7_MATT}616I+?bKkk{pf1(kOMi%kZ3deBH&*@`4?g4E{QA4szqXkHuz_ z`I;}qxoCqxpFdZxiU2B{Ssv_6*9j3yee}W%8%N z=d}VR5>}*240{W-o^vu(?x{$&2uMeVymtlXc`o^33fxyJo;nwuXo(}NOKNpMKa@*8 z`Uor5C8uA&QP?G~@4!sELTf+A(bFX@J7ZP5M7Hk}qq9*a+Q4~LYw9?nid@;w5x zQBAh}bxD?!p(D`G{|3^_(Yi4eZhbuh*J&yeStHKJiew`lUyWjmCWE`Bci^rxgn{H` zL8wn4OOj+Jgz5w77pU@&C`U5mC48(4kO6@%L~aj)EpQ+Sf$2oXR`E$PC{W}vX~8v8 z<3Z-dKtoAz)YX8L8yx5$Q7RLWdP@Mk;u&wtmGun7BRxMn4?pnNzKvwZKx0$@Tq%&f zBwzVnF+}o8lIs7nU^F`|Wr~nY-nM=sWhBY;?`!R6Q_qHjof=5OsCIzh;qFX-0ue?3@tSsEY#yo2q9(!WvV9b@ z11pJ$FKtc-MGrXz&1#^?`>(-ss_%ciL?X6!oJW;o6@KG9Ly^BEq%57|7A$;8+ndUj+&l7izA|sX%Q> z@ELCbGN%G#rWc)=qh?0gfL;>a|_po_DCB_+_bT0Nc(te3={C!h5U2|vZr+{_PQ z>fZ)-NKxFIdIM7UE^vT|m?yU=6wb~C9>~Qg-dZfQ&IgW288`3W2QEnBmhYk`NnE{M z4E#fuM~B|7I7nPtx1=JpuXGAQ%0GBCPKqDYoc4<6hsa9gMtT4mR|ADgiJ~XVC%532 zQS3*LXjc%Glh6X0(8__yQZ&gYKBp@>_4Pm^k+1&ovsR#dBd~zTje>sGQ<9ZLtP}WN zyb;(eNotsQ$cIW9R$A7-e11hk{t_5MWFX&yo$Yquj6_MS6F3IMDb(A6Yedu_dM7Zf zj4+fL)?}fN9R|~P1Cu4m2rCWb90WJr4Fn{?nipODZeTfSiOZ;p!0y4_zoOS+XMFk-H61&Ku`tj+za$YA_rRWT-^(dl_Z(X>+5Hu zLFPY!Q<9|m;GM$dE9AGpIggqcv40CZ@DMR#{~7R=lhx?F;20k!NfH}KwU~#mBN+^&qz%ym*)W~&rcB%!$2V*6?n1YF;I6n49qwi#^U%< zk`b>CVW%QLPei-~_5i8GyM0qyYKfPC(5mdoM9pf0#6jQg_~#Ay!-XsDYf!8%!ZqPv zYJN2nsOb2Mj4agRUNwY+E!i!0wY7sh6(_D!)<+VI& zqGU~Z>uhT9p;$hUh-$Lte1u0!RDN?lIfqsYK0Uh(XDxUrhoNWqUXPGS{uzEMhoP4I zMh>l({CAJm5YTGLBdTTZF|Bg-7~YCE|Nj(f#oI_3_bu3pcSgegX$IG2!~3-rA3&r? zQzWgqElD!l3|B0lh77gw3`O`7Y*&__At9mm0|>R_KM?sR^h8Y(*oDuk zE*sO=Z49nny77gQ1bst*h#K$4mrIiASEEmNzLvCJ2bp{`;X^n40LiG4t~)Wt!z6g|WQ3ByI}h_`5_@3gh@5k5)WrjpOHXXuZyx zJ>^;!d4HYvl*Cgl6S+-DnV!fukNra=8YwBi=pv7 zL=Lxw(OV&viJ z*?b!r8a>~~K8MF(Hvf%?TI9^;e@TMvEiyFQn<0$uox@8u7P%HVLLcfJejJJa;QAQ$ z5xiXIVVAlFwJvn*(3;$Gj z%Cll!;8ExUKgeZhN!SW{hyO>~&I}W)HIc`K{P&Hb(lW!uM~vHo%tDVczLggJ3#r#s zb@*&^PWWE>aVySx)2HP*k&dy|@4;U@DHB%`L;$$SG6=e?55Su;#t zz1Bj`tX92gV24)9h*pIBi#J4w*Km-JX;9V>H<7UP2GMMB;c&Kuv*yBd5}WoI-z&@b zS|W2QN3hGFwTu^NA!U5y^5&IYZv}6Rgne={M*8Pg@U=u>t;m^h(5>V{oo~tfWJE{s)rdW=C?0xu%N51odbddxbNQ`u8{EQ^f(L&Q2Q{NWTo;2R9 zr%-m|Leh9gBEr)mnjnq$BBCO+)A(ydgr@~%-Xx+91EldpBI+iEWW|-kZpxRQPTvqM?NP7f@=i5rL6J<~p4l zM2eTfn2K~hoydh$JpYu=-zAc_HwG%E^Y@6Hg)`5h^yz#nk&++57=_92Cp2*!UILTO zj}w`F04qP8e@mnm1;VHEABpsK$UP#yLl_p3&i^Jdi#{ot&SUzBdQI}(fh@`~DxH@g z^wvsjp>$q_$efetu1n|jh)nnf2gG!zf2;~uS$u|MCV!?#XCj#g73oi8rH~Q#(53TN z2=#aiV-C{!>qOS<#`ubK&J}sx$2!Q~Fq=rNar6DsUZot zr_%W$Lc5y8$Y&v)e?=scUK#29dm<~H=D1EI-XZrTNoH-P!5w5Wi<|q3s!nEmKlZa7 zK)&XY{bc1carx3W=iy}6x4a4>+4IF%`yFqbi?sBRf56apyptpu{*wE#GoI(Y6gi*> zUcs8-?**#>(e=)AMV1rcF3JP5#q2`895Rqh2kFS%dHxcSBs%$bo{v_^2eE&g=dTl4 z^Nq@oPNbMa_*;ao7r~={=lM(`_3517dHxQOh*Ef}?>t|swCLpDdHx=ek>bE09KAcw zKO{1kjw_z$JBVzGz#|~%Ip0gD1|8ivpR4lE^AstAFT*;eyYNMn$> zz}I+)Xx2+SO_Eff8a*%Z?>Hefd|u+$h-_MlL+mB~tH)3$Fnx)a9^fYb0+7r6NlB7@ zf5Yi9@lDhWUQdz*z9Rk@cD|D!O(el~MQT-OMKRBM9Aeg}|*L61$a6<~GRO$|Z9r zo6H{|b0?R~J&%m2jtj8GnM>$D9w8sg3o`%7C38QUOfitTpG)QepXjNfIw14FD}#=X zhuI7@2BC+1lSfUI{!jj~hqMNnKluR<5i(i)lqBx+l*KQ3WO{>ERQ)(yiD#Aw?;NDdUfvr)pO z1TVX2yOu<$zN!#1ASQm%_5u=mITMqQwhs__-66M-$N{h1Mc7`piw>5VW-7$YZzmE_ z;U_WnLrH@2V~&s(XEFAWAu>m7((4el0ES}h8t_RSnxv35?kLg+?2I>y}hQWPs}H+Wg3gP|fLffTVj{wOvVaV8#u z1JXt9RwN^4;=&(a%pO2Q%)}$WS5n*_N<_@W1u0>VB_d|x!g5Jl&GDTxz@_YIQV9E@ za0-^Pb9yOD+pDFF>k}+(j~ga3o#F4cE`}Lky0o3sN$JWcpI~Ww3TlN#EP(BfSyF8u zA>|Y-?WwP-?LAAp()M{ubMdFR;oiI z`7=D#7iS+K@*P#@RXFLUHyvDI@EHv-UqkLGo3Giwa3)PoIvEJ+PAf zG7@KDR5@44D%;-ia{$<>Y|oThZdF&c-|>)_L8hv`+(YDOS=~NDiK$6Tb^9A4>P24N zzDz{D$E#;ceiE3jo-6q$vL(+!<_Y_jC;9F$TCtjT%m`U}pGvHzU4n>8tfpN>5-iyQ zFjUj7;~`>}a{!z6J#W4&B&hI-lF z3`aq$p8Xaj)_E?j@9Nu&h}3t;dLq-1a8}>mgNga?UGlNJV5q)*jD*&}36=Vn1z9-~ z2ZZ4iMO@!rPvlr8MiJMyw-DJ(7k+?cNs@dOpYyX3(oXCs`QZ63d;oJnAiTa^iqL;T zG0c)e6(tG!{EK7QG)ZvGN)1y^s0Q|vsKx%75iVsK*u9D5hq<}9N}!=VO_G!_<#Br2 zo=q|--}S=E8K;+D_pSIIIL=2fv=Nd8_**Bz&J7hMp`Dm=6-mqtL2{PR%*O2MT zs38-`bW{sF1N$hqrP`N7)R5W8J}pU-FM&3(8`)Qg{6Njo$i7XaIUR;;WdBLza6eq{ zHnO9~VC5fs1DBwU?8=-_B^q`b+3`e9yos;wMs^D#4M*dmxRKq7NaBP@IqEgC`w>~a zI$V0R8rj2$ys<5URl6eUV*-)q4#C%XWl;lTIOb^RVTERqP}|>C9v2g-cN)D7jqG(q zqMQ5WnBU0WL8K~u2BeXFkVy3^xGZdBrxTe9jwUfwH?q%U903{_asS? zB-JklGx4N$w$n+bQ5l>JcDBRbkO}zqUc?xT&UOJwQvGT!*qNp&sea`a>};1LEkECc zFaOSVOGM1v8N&`NVUXA{NfOz-0+H-x2pCy^v@5Zody#%>035J)K&WK{&>>3lX z#PJ{_w0hY0Byo2MKzeT+!6fiP1YvJF0kVqcahGpxwdei?N?h^Azj zVGDl=XJS)tuxA#CE72kLL#gFvXoyEY3r*yl-9Yz9>P2_i}y8L=54WF~rw`C~5%>=s3s?D?V8^Bxz( zWIMvnUVg9WP!NS}_G$QMBmVgc{xr&j3yA)PJiKY&m-=p1ziF3PB`kW0yR50+n<~Fw zW)z!ZH*9ws_6zib_}IE2@7tq@h>xucvd(^!i1^sL zARpM%h=`A^3$oE(NJM;WU64)o8Y1Fj>w}AcCB=j}qw{ z+SCs+F}D={aLIm5Km61J$z?nLdsuE?e?K6D4?yy}{Q;556OjC2?;;YNgyfO^ z1(9n@ko;wTP2{DIko;|5CbBwIWB@$1pI&CNio%2b_p#jJ98gi3FD+DHt3?B&_gOM6tm!gj$4-ihOm>z zDUYJ1g6|VaX^o^za66G#1|caIJV<26L?ji0UlD0D14+f;1tR%YAgLVunaJkC@R|}m zr)uyILMKATK*-m(S215TgU_wS`l=a+qP2s)iS%fTq;BvfBKKZIQZG23$WxP%)DH%T zd^rg6K^7@P}5xEA+$lr;xM>-XZdIS0wF% zSwv0@L()DNvkptMTSL+@Sdz%fIY>GOs}X6i21(ao10u)xPDI^a1#b}fh_1Qm7raO0FkN%gFZhtigb}cRCe{o6 zf^5C0#teVl2t4l4FX$sO?gaXA`UMLSsqK)GL_YgPX~hvKd`poUL`Kl1HvNL}L@EIJ zKWv?Md=$moz~@r$0->WQRRKW+K>d_*9*VsXx+$%Q?7SyQdm;sCQ=4u|cOvPv#2~es(wB%q+uU?h5{PudZEn0U z*V9cILP*X9c2h=5k|w^fx+!Cc$hp97N`Q!*3+$#$A|j^(yD2F$6-@87l8pdHW}x+!@*c0H6Ti}41@WQ_GtYC6b%NYz7WDhNCEB$5xmdn$c7v3+OEd-g*l~T(^!IpM_ffbNJiU=JAU+4F*5(vNKhABmU zLLuAzIZWv*h~@qqu4IyooOu|oG+n_{d1MgiaHXvvuJ5&29^yD$`H+(w&l0!=7@0U+ z`9#RzB#W1?q#v#f708-p8LrGCA}2mZDBFc1SIN4ue9PVcDaSd1wYg2A*cm8Ul2UD@ zD2ANn7^&3bL}TfjTzrApXr%=w=`P$8xh1y1vC3AF%vJPb537C!LaUX~YEfya+Y7L{ z7a0pE^N4iwiTIYFQgRK-z&As<_$Tm=!tp1%vV)43Ur-p1Kk=0iRK^p*@u!fPP6WrF zLS_LG9DfR#WkhiNDP;B#!SSb%IYK1t-6Dl1uI0A#W-qk4uVA%Tv<%%N*v}>aB zU!EK$D|OfBwrjHTHYfI%*YAbyAkvAp>YAbyC-V1?UJ+9;MJY|_gxdw>;#!}8UbUN-Tv10a;Fe9DpCi>D~#Im!0O8J!emIuSXelcJ;&kuy3e z%J)R%j82NOoQNFaq$ul%v^g8eyf`#TQPK!irJcD_@|8YC*~?`_>3dy`fmCHSismLA zSTmJ6f>_<&tb8w{SxP4^qq{rf?kO#x$;?vv5>ihJhwvjM zpQW_e#Itu_3vc+ecU^12ZK|V*KmF9v#8dOVVN;duT!-%7vs=6-Qk8>5hCom&R!*vN ziby3*yth)7%S6Io39nqLa*xRGokW95Ra~3VI^F%XH%$b|q$-674Ot`FSgKN*$hgH{3l(Ryjr&>*WZ8zxWP3*J5l`VF zr4x~zQDRfSMM_U1n`l$NMM^&+Ztp&s>~lhAtBZ$jkur=(6WY{ok@5|ZfmSLXC!*%? zb+AYo=O8bDiHnrHaXd>DJJtst=T|^ziSnx>87f+;IOmw_g3Qu84%POWPWmf(TD)4m5Ounz7q(oRQ||g&}t%+@Ny1>s%b2~PgzgogKC2(VeN6xod>(^+t>2zc0_v?6i=Ci*Z4XQKiF z@Rt!U_x0Ok5qTo9P2_HXHj$||D|5JJxrZQ}O1)WGL`WvvtgIj+lWkG93WJ~=KYZcv z|EDQhM($@W&GF3L22rmJp#f1C_v2tnhS1nVhS1nVhR~!blXwPp2u)hP7jK%9!ew-K z1kL!SDN6(qK{cbn+mWV}*duEBa;a!GAIQ&2Un151fna4I+m#d|w_w{Q+|^^Ja*s$2 z*uw*7@^>lPUeOL^lzzIhiW7MCz}W`z;73V!eEh=`hR@UPTz$v$AhbJQIrb=9xgzm6 zR|1(m%Jn>%?Nb`;Q#{0r?e2neW$T_@9$Rz6KUHO_PxVMr2UFlASSm#+Mnw= zKobut&N#t0K=r|VeaB%(-{EFWLFRBiJx6ot@xBK_NAs2SS7m~u9OFRdS0#m$3?83? zQ@SUVrBsf%q)5Io&Ix5L730#yNPdG(MyzPS!TY0bf$A4&6Yr_ zOl37smF;=+12JwqrEDg0nD%@>rR?Oy?txD!e^OqeR|0?0Ddiy{*)5$?qW24fWRTG* zr35EJ(Pqg0l=40&wlCa^0?kt!WhomMnTRaoqc=w)Y>afGI2iH_>5GL6WQ zkzyCbv&w8D+i73Kv&upu0*c1=JRSe7!M$in$ztN$!zg(UEf!c!Qsl&wSx!cI0gBFj?t z5&3hwxUFE&L9bB#;T^G4PL^_kgd!|*i^$t<5jL5nJRws3SJ7g!l(<7ePvi`#`dK1x zTA5WMBEMU*l-CaNpc>sB3+{G&v1ci7kx=$$!r`2yv>{TSHuK3+x)a%TQgo7)~BnH;!l~yN3 zC1|un>b!D>NK{49v7J}$66s-)BAFu9qOD?K)p@0_AnZ;0PCl<}B$*$th!@6rrPS{t z)edi*=nu~;l?e@4Bksz1r4Er@mWcz2e3Ky!8cU>Yjx5GnBE{3BL05=uAy2}2rPe8) zJszfeO zcX&~mOJpw@bWu4&q;QH`tWCbC{7L8uxh*a#j|E`|8p7V`aO*BAT~1?W8CK~3B_%-+ z%PDqEtAh(jCXwgDyGKDY z`T3^^mhcxWP*F~w6Loi{ODr1?PcuO z*iU-YNrbLhLYbUoFgfSoQOjNxsvjM3vt~T|&VsN_e&KubsLP4$S`^7c-aP8hoMgD= z;t!8{ob=3n6y;^(xT1pBgz8O?qBx0DTM+pK$}tOM3aAE=Bp?epnIs6iT-?K+T^GR$ zs(XpJs2K6;V@mZ=XYu&Ot5yFLmH*|vI5rS_vv_qVM>s7bW@X~l5D9hqRn$832@R=-K;lcX?l0Bo2AoBNyC?aEs+|6{eBrfA8vV=wvZoGcN|+QI|;jJl3U zb_odfjBA3bGYJjKgkW+|^sJgiBnilPPOb{VTEb@An5vX|he#_h5kFI(Q{(RNlCiB| zB9iCT7l}kxh-I(0Vyv{M0`10P!hXPQ6ZKBrF78 z2?mu@%iI;2^#`&SNCkBWk>v`kzXS53dgUIM;jd`?-mIjSxQ|5m>k8u$DV0=v#_EC> z9uIkPOeHlLdSMx7i6MzLk-kftNZ+MRr0=qlDkr9-@6smHcWD#LcWI;Z;qX}UF8910 z!(LJw@-q0icNs|)wG|P3Y>`w|+Y`aZ7MDxCtjYyc_}C(;rhY;)Jk$?Ty`m-(!N(Tg zi`CT;M5cw?C=l$4-epW&OWjTv@UcbmntFs2G04Z6wAa<^oY)&e)mAJ0jnxk`Y2kee z)U{k+Ra?zFdsbWR{(y^m+<&-PN;`QP9Afxl*M1>Y$e46`Sq318X<%Xq`@KB}Y|b z<#$rsa$>uNJESsix52lkk+@Yt+9hkiBl&@r6a+T~gFsMszt0DVtxr}ZI zGTrj&>5)rMOOWZ2R|W!matXBqp`Pj_ZezCRwKHPa(OXR+5`+87C6E0YNdEb0B*jMfS$bQ27ptWz_+F_sMs+@@+^GQCL{<&mkfJ}c| zM)ohC<`P-}LZ7N59ob`xN>D?BxI^EFucQPug_9i5GCG4ZLH(X&-km5u$r98xME1eX zM>r};P`49#bP(cuwnAnJ>OoQ@&l^opPZ4?NfY=NvLA^{w9$cEB-XkJUQcX}@|6-ki zL9~NYf?9}(JV-S`EzODU{;?3e;Dtq13GIM=Uj(U3M4q;qpuSCHHw*&MyO5x^G;+NmLsW`RZ9_!vdy=SjA|m%aNmP3hk^7z`s{Ldt+V><;{hWy0 z_asprMg;af@$z%p6Z5_46V=gNNOWb_pmipy|8ZhZG7ri(U>T%VWYytz=x%w??I5+5 zAiS0T3worC@Ro$9gnC!7qDQ`Pw2s{&h`_>)=u6y_VmK_5jnijzm1X@G(<1BKp87yJP>C%Z7>JTLswoQ^GzSp`q zHUN^@WH6D*mdt)2!$4+=Ma~hKYLSgp)M*wuyebZM)r4fzEmU-498-WKTcjG1utm-Q znFul|7P&`chDDNqq=L*$i%cRi%OZb+iQXSUXtsq4tdC$EG1 zc^<*CQAwh|S?XbXz-XJy{?WtE0$F6qh)w?C{{Lv9rc2}4GpAsl&?0-*#If=~mRn>I z+{J%D(N7j(tK-;fAhW_E&jM)xWTiz0EsSFC16gH}pFpPDDL7?nZ7wtrgw|PP0o&kTi?*Yh8f71j)8pWC)R;Ezf z*CN>0unc>jdS6^%7Y|3X?I5~Ojf&*GHk$>z7$f;b?ZHWotIVIUT|4xP`_+L$#&SpO zS4Za~S)?bkdmMWTdiJZ8qJ-vh9~O&dh5m*;`qVB0xj%&n0X$smpsElVW0CDd;@U`= zdqf)VaI?q|%)YBzqq%DL#c<;(G?2hi$U${)jL5Ukdopn*k>CV~2?Zk#slpaq zry!w{zZ`b25!X+`Pd(f(8egEd)v86YQgZly(QW^Mc?3ra;d8j-Ag@iQfSUmzdRIMC zjMutV$M+nfqd=5b(;X1KuioaOVtH)zBiNfteMAH+zYLHEs=GL<6T_mKKpv{)1z~Y7 zLbnIxU-dNyc?ZZ7wGEMnn<7|eAh14`6Nqbwv$ra ztt!4Z?(!*DN@royZIvTvNw>t0BtnlGKm{D%=N=_qXd;(JVF z4Uy`;I?r-z+&BLbGBtdIh(tURo@5&O>X${C4A+STQLL{giZ$}J;6!H!W*30T zZ&2OXH;qu|!SEIb@|LemIidP&`8akJNK;>c$WGWb0gZm!cbZ7+lO7iP7&Z^1)|%mJ z69u6HQBkagMQRagX^|7dz?bQTck(;F&&rF;!qwuqlmC5RfQa|ID0bU@qyjGo zThJ9;T#$V`UqvEoiM02)|anV!C;FJdb3tQLbky+88J z=0s;Z;TsCiO6p6cPj^+X&cnmJfR1w^jp1}v7CiJH`#M%cMLDj6&BUGl)R)MK&U(V^ z36|qCpGxEa%$^`g@Xh8V!}YWrmdwQl`s!EW#c-9{9>qJ4&#lV;6pD)7iFc5Np2BIu zhz9$<aPJPabA&0*{d-zHM@6%ZFpN`LA5gJjS|oV@wUca=zwOb`1BYG|mhL}ihE zgXz)ywvO<%caS4p@E8wYUygKkVSN-k4#|>yqlxT45y475fn5}Q#I$qFU35L^?6$n!r`$7L(j3k zWezePh~g_!6;%NQCxscs; z8@>`RV`ffbcjh-{)7uj_!VCB+a8dF0^nn#YUsWRb_B4T*zS6&y0(JI*Y9ZhGlVU?X z9Asc?A7>F9WFQ%z@BJ~sSBo?!h9{=>F3L|($DzhVUuS+ntaie2>m=XBSHzvTH#drH zYKFuv!O2u{poRD;KZiyoPuDRv%^}tWF2EaVl=w-7A07w)5Q>x{-vX|YM`0^Z*lK5{ zuVD>-gLtPK^At%hPBNI3nd|HCkSPr^bA2Q7$jtYRamZj^4uZ~EL<@a}L+Djdw8)p@ zAdP|i;M?RN9fACmPxZQdWJ5l($#>1t11)wiDB9wSc-1Z|l5M`{9b_z!9lm-FG7d<( zua|>Vdmr{^%$M0d-{%gQ*^p|#PqB%YEd_MYH^)Y79griwEe^65$gjRD4sr%arZ2vx zZS-{Tk(~CG$u9ZwE+f9=YbTPicmIxKli`+K^7SB+ z245OCKu?Y@;7|=OFCeeiLKE%h?uxIilN5r<-z$z5+WI?alY1Y;v5z42Ro}SRFm*C( zR5Xq)1oEe^`s;!ikmm*pRbh zZP$H=5r3i)IBFjYqxQdj&(_8)#i)G%B>vkWD#n2id`-DbGOG$h)h|Hifv-K0+aGw? zA3z@Zn${7fKMOKXf&AkeM+9F#g(G6wW8X3&2fXn9LG+*R0HGh6N3zO5nC7l46s5z^ zXEcxqE&UBaQh_7`iPCD-6Qn^a4_gi-R%^=^ zEc0mcs|vro3c<@OPP1h@E#Tcs68u!gbu~DSh}Sf(-JW+Yq-7D=7XBGT`S%KTZH2VR zhGXUEhA^53uy&KDwjNtsF2oQ%bAV3>ATUp2&0B z08TPoxZV6r(EPkMng~Xs;CUd=YxhMe_DlpggDQZ6(pv1>sK|Z>N;}&1m_^h|aSEuk zHUURF@Xp6aK#<}*vF?6rfbe&g)@ljDUztCE6{R&FCmDPje6*{KHk*jFtBiJx6WfTg z4kOAh1|#HZwX#}{$iV&J6EWdZR{M)c?JaH|ZCh6RTM%x<4#={sR<}8pGQ%xfczLZc z5!u4aYpn!fa@&CN+P5Tg#p@G$xRuu?k&tYe<+V&A^03tkTAddB-mv<=!AAyU|AN+; z6MMgj7quBgee^3s8*OtVXMLof9PGb^?dl+#OkW2$#2wJw?*uHeQg+t;?`Ce(N5X5@&8))5#$S1#n z_7NxIp~f0-pgAK>CP2kD&;Y|Pw9p!mkZcGowDz1Nvvn1t*hWy)LM!z? zD$@C0F24YIN9)gtz0*W1S^9YCI=4tPy2ZQU9crc3X^V=4Zw=4&Y^62lB$?gV0?QMR zxmathJ(2aWb?s@$>^-e7kwq}hh>we9ZL}dos)su*gT{pyzK09#wIvSG9Y8v2tBI6@ zVc8iVowc1r+V2L8hCwp4vtt zSzbss6NGwcL)rqI`%W)oQist-V_zFPhEB9#lsIUt{Cw}?Dm z0uEdt1GEwygiNp6;12-JpJ~I13{CRJu#yF1S%Nl+5bg~8B9MXFbq8q#WU$t?qfj(7 z2^=jzhG>I`lt_VtuYi1|tt9g7=R#(vcAv;4m@WPSWQJ)4I|)5NylfVr5n4q;esHqw z1(KvSAhH7j*6#xurFC$~Ao)fcLZlHmY^uRT>=^Ahkzc=nZ^nY~^{?F{^1+wj&H|aS zTG`Gb`|uwT%!@**R-aH;*zg63PwP%(3RGiTNTz8ABx&biJ%RYOyF|W*Dq8k?9Me=TSi12ZW$i3qIWs(;P2vC zOKhU~de~%b(ubIf-NPnp^8|4{n&4*h-o{iHh{zr`S^JX{+md9>-IMFF4*m>lO^Iv^ z$FGDZQ6Bag&SwOO_R4KUSZgJSHM$OKAtKU%<8dT8TbS zQnVo?BrTnx-6FCrJYto@(iz&-k8@i(LyP%@=V^Vg%*bb{Eh8 zN1WKVdZsp-WF8i~B~F^1rL85jEqoL0%7Ip2urNGd`K*|w4IdyZl~&BsMhoIE}1^72yUq-rdI?0Qwi)}?AI1@Tl{B(}Rw&1aA;BMnN`HjM2!=9Vj$QgHpA^oS;GA;KIR8s%;S&G)JpW$>b@#bF`a+SO(3>XOJx;4Vt4p zBt6ogIoi94mO);Y2?OFeT04&HDw>nept;&0N+u1Ot3`gE`&J<0&|GaS$;hTOPuoajTloGuXiBmJotMvwdD@ae!cu9)JZ+^Q zR>PU6JtZQIn5V@K##Htwex73#FI-FWv^%}UXJ=wKyuNo)aNqv0-Z5D|Uu(p5Br{L= z99(GK7T$vl!WI{5r@uhu$?PsnbuECA(f3-JAxLsuxYg1rAdB*4x5Po(Y;ffBgX4k% z7kb{j4(GRlS9__}f^Y92zKhEhjb%S-8+blqQXXZNX+IOec*iCnvs}w0BK_q*IWl;P zIb#MLUU#vTjtg}+(i4r-a;vraUtxLDS=EUJ*fkgrtyLAybkhWMX$TZ~ywyURU)2&*2PBfM{D%^Eb?;>6q zsg|Z~=T~w(GE!}u_K;+;1~KaCXRX$7%pu1kBlosz2}Gt)G}{hs9w!=iZ(wB9PA!vU zWW?Jpt;h(W=dg_TOV?U)q%oWu!DPF&u_PoT05i0WL}Ucu9_<#T!uC)xi?O|0)&B|A zGIDO8)|ZHkocl#f;Y4E%lVE}oL!0< zoapY?{*B-vcqcSA3Ki+@cZmF^)#pUxJBeWQ)Jbg!CpjJ&xR;ZL?exaoiw zqSyzpAIu+G`>%z@Z^P5Kz#~%es)&&~tL^0%vOS|IYU-?ZRS?%bSiX1`!!r zc#a;39FIJH{G3*o%h+d)oYNXps&~SZw}Nv+h6ziRcNkipR1nEqyc=Twxe4jy}H2+GS4c3DCJ9)m_#4I|#@GvBIE?1yM{b5zB6B*EvadWh{V53>Sna+|lYQD3sxv4)yT?Oo#uir4acNd|gQX zksb(_44!=~yDyiV=zpx;r&MC1-^HG2|8b(TP>iVQr&={t7_=fHHau!u?-#r$FUGLv zo{43Veijs$9>F))t3aasbvVgz$w1#2|8|l&Q!kpm4Ki;35h8Nt-s5Mc&@-Y(0Uo0f z=bu-w5-*?(E-2uCoy%mnJYM*G#pr@U{uv}BqYH}qg&SXIBZARfQAvLbQXPV*4Sdf$ z;|~(SwF}+BplAIloaDHq*R!-=_}VjEGLWK-Mb>r&Cjbt@%34T9Qk3&o4PiObT{2k7 zCNfy5lD`g@$##89!LQZ)Lx{K`pa}zHYx)oT^E@y88gQKW!NfZLWn3o51>w?O9xq+b zf0`qmebxmI5CEYD{(|E~HBLG1W@muBz=2`SL zQS<@W-ow9;U(gsX?ZC&Ur+@fFRF~tDLBhTKYbOaJLxOwzWn@AF2!Z_ujOgRPPBJn` z_#=PQ$s&~u67K7tMx?Em;%z_nUm+yphClJwpCXdUh~xqOsHuWbBr*HcKbsSU;p&sB z@Cy0Ne}xkfD$y56g1^o*I~4{S5A+8(fd;q^*79StaiaeUAsH+2IW<5#R$`F9)pS&p z;YzF;$>U1~TaC2hOb8Hy8#lxv-62i|LurQlzvZcNTrx&^lz##dh*9?PAmy+9a|p>G z%wA-+tRQ3G`zvsg!A@+1tt)D~*dl*lPSRPM=s0!*$PfPcoY+I;Wqy19 zcT+lz%G01U%l(JAsQ4a0@)NZm@jZYsDJ%THa~WX-c8x1Z#&)Ew^55e!A_N8_<5u|_ z%|X*`2hl3OHBa0MBEE4nV++YIu~q&SBAN9iw#si1kzZn~9Hm*Xo6lzN5kG&z5C7J| zH^Ex}5lV=ksF>Y4KbyyGa>=lqb^anmq|ADM)co8s>mAt*%;4FL7eA}S&k6DK5Bzwg znoa)n1-aF1@`DBNmk~b=mKWiGYqLe<@`}y=V?34c>tl?HB@?~=a2)GgI+ksbsiJXd z%>W>27CGmI7`u^xwp+;EE1FF@2plJ239-sK38J)?rvj{bE8k!!65t z)W1f^xMh7D^>61yG_;vu&{6*pQY}k=%zuW6Ed6o+JtF7&f&(2(f6~tu2^(eUfA?1w z#LDcn|8*kLpws^MIMLk+Fu8|2jGXp&6NFFBuH&SyNX4WZW-h;Vpc@A6(*p?~=s za&f!T|MGX@M0cNprDHgc_gAhmVu;0G{=OoWRmPkCFNjF+p^;7b3FX7Gn27Q8E1@scsl< zasck!N|?bZ0>{;t)wlj6tT+oJ@a8}&=-pQ!5z{pjfK=4Ct`r29rR)ImlI~t5$PMsK z90F2BZ^TJ5tMDOA`a(eO%X*zPLS`a(BEmpw=xd48Y6YR3s{p;GA15>$LOD^WuHI{{ zNcJvx2cjW->rH(bk!bkve;G(4J%`B2@XH5b1c0q&8C-Zrf4mM8Co^mpT)5+fppP_b26Dtfv?q5K)UIf8--anVR7?_ z7hu{`Pv0U^4fIxZv(tb+)@P>)q53c=ehlPOeJ>};ti+Fz?5!7LS)x8gK&Q!U+Y(P3bL*ue2Gr22!l7hRJuUV zL$cLCG<^_}7LY6(NKijbBH5cj#sXQWuO#vvEJ8aD zWQjiLppbD*j^SjPUiFY5=w3~DDVD9&ha3@PF?>ud1+qpzKqRGN6!T^RTBnygibCSy zy#-{GUWXHVzJ81TJ`s5`#1_4WBNe_yx9ACZQf<}!c~WiFr#Mpm=Y`C+>fhx_mZtA@ z2*p-`cfWozkIXjxDiLYWHvR8BskZ6S$FN{_F@DycB_dM6J|92pl{gZm$IO1#Yv)O} zU2mBy8Drb^j*e8%LaOch$9Yoi&`0J;wL|ykmhrM3`nY^T&0oT0_rf6Tx_0O@xQrl! z|B3{%BDW&8OW%`6&o2GABNdvsOTUmOl{Z~~lqXrb9{a1^8Y)1tbiEQMb~WzNhdX3y zg3KO$Mjn~{`YIyw2JP3cJ5ph6@P4lzaXj}OI;cNSL?%0^SK&mI9+!n3)LZ09bwnSM zC)E*snIjc8&m;PlJgJWAr4Qywc9h;5nAw-dXsz2`DBv-D+iz&8{Z9YYA-VxX`G~w| z)mV01zr;nw*G5GkCvoJL=okdo&+7#;QAf6?f!oE$>6i54LMNZVZ5M?&92W>@u{f>@dTr9-LUFC!YW|E5e7yJ?X#^&qZl!t1c? zQ6lRr<&H(#{7-zh*kt`#_~L|Bn>J}UR;)*`$?hSsyv}Sg<~n0;SRrVUc&YlHW#VBNap0%bJ^czVeKJ3t>N4oLr?>wdZ)-BcD5`od zL)5oE&OyBI0eYyXJJ28?|IqEo@yL=rvWU$7kuG8Yb3C$SHi44yf<4mjbImy(S+Ga? zV?kWJU|uNMBVG76b6n_5#oO^%7oN%-m%L|BEFu?4KXo){F%9`tk2!^9wT*tN7a}5! zewxQ<=DoPxY#th*mudYUrsR5Hg}1P>e_;Z!w~cyv2wy=29vuhL^dG zQx4VWXK+(8+t1)J?r|C0&)_i{{UILL8}mhD^ca?(f!qupqXo%GH-pFMEQrekVLSgq z6ZU$HFd^w@@ECJBvG1$LSWHB=29L3Vh^$zTv4M!JGmo*C6H#X+t3iam5jZVwkgVy# zUSpj=Ry7tj(utsl^dUU2MU7Htcrt5&d{Lu25!pV98q0{tHdNgBnG=yc)@uplG$(ew zmNYyi&hl!6NQ@Ji&>hO!ESax1OBxr2s1;^f(zr*7Wo?!;>YWqnWM!5#nh4?-8uX$OI4@F3gDM%xobaN0SxPZjL1HW;A*s5G@iP&rx=Oxht4hA-?`7i{PnGRi zLOpgh;}j8jJ8XhQ^iZw78JFthJ1-M5IBrjMf*0j4W#{Baw(K>+429 z5UcWQ8_Qop^@@*_38QJ&NHr5f5&sJ??ClUEX z);11vV&B%J3j$7wlV%f+(F!m9V27O>;6Os4+1EbtkVWO;$_6Af2 z{AI*{Ju;5n0nHtZMqEbJM?`fXUZW*P$?ijaVPh3Q9rFowGTI8&9;v9a(S;M?+(1R0 zjs8N$>Mgn$UlEZ;cQL*tB8~21c*hfxR(CUIabiD0-HipD2&>COX5Ec+2YDIDhsHrp zGMIdTdm0Zp$??cW-P2&#u!e-5*CAC;qr8_RJK0A@XCcJ;!r_`dK2CytBCDzsjE6*|i3!H=>!LNts!lM@agy$mMkgA7U9S$q5pYaPt3NmX zjM)98TC1_oA6ggZz03$bvDR+WsC#@`Pm{KCqnfzpgP%jk7T6k8Ag91(&!oa-kdXxF(l)a_jQ&riKAq;>{D>H zf$G_YdKa@7nFWE&GZu4VH>-ulULrEHg+}0>Fj^L4VZIK2kzr5M4LA>jFwAldWU#~- zd*9CT7?5Q~DkpZ9D~zo~WR@$8et+lAaz(x@R~citj3~?{(7f6hPpMp98h5TW77>!F z*XFCbwfR)9H#Rv`-v!khj4Y{|G;cMY=Fz;>p&6Xv_?fyjpXzN!u?Kd2xL*a=lu?rt zyFPXrt%yjYcRExH%{%jHPB%WbHGA2!pnA9QRUXxQ3^R}FJ;nke^6u_2juMeAX`gYC z6H(QbLGv$0(TCy&$wqqEc!LNU&CfkMoX_gR#z!P1RUb8ma^mBiaRX3&%n0XE{hP7g zp&Gqszva{Xn{mjg*$ZEwnMSrl^?RWD_k5Lh)+qE(?sA+nY7mk2an5K)MBa{UqZcQ- zdnGLUsdq1$WgA-s;l-#@69!?~hUXE#(`-UN5337DI$SWS5?Kf5O?3fs$rwvy5Rh+x zTsCfTVz-7XM!|oDi8A{u#&#mo#4ARb$3lkcwH&)<)a1x^ZvE+aM$6}rA8c{0Sa#j` zoQn$I(>5SC9HO6rsJC!MH@gTIZW@#FXuT!JM9~eS3$W2ET+Alt;lvwUr)ZO%!{O8d zaNOONsp1Qdh-3Fa^BqZ|u|?rcw#m~sK(#65~)k{R(*}aU+u0fbfEd7J{J_Zi}FI5{bu=_$DOg^^O+`1lqf>;3Dylr66KD z(4Q07uL(DGgzx(Jz)()aoxoa-4~%gTyf;Mx0SDO!GDQMYg&tPcjAX}v6b&qrGPvc( zRY1i8X?cW71Tv%$$lL>&l7XX~DE#q_cpXCT0@-;|Jr}sfNiu5--zP;t=J~)~hn|;# zlnF#dU{O&IMAXy+R4!1OBb~k8GmbwEF9fO)c^RyJ4`f~pyy+m_fK&`L=Oly0g3Lf5 zl>?v`{xYK1Kr|diiBz!&u6_IlWU5*O^769rfL;!?7pmQlK8)l+ysrcTL_9qOsUAop z(z=)MZ`KGL5ro&r_n@an;5;YdF<1knW}r+YmQ`ncV1e?Z@8Ar8z$--d6@us}yl1ro zZxX_CWI(dofmWPkxMa!d1Ud?0-NiQoJvmVrKD#R}xmdk`#z{Kccsi1I1#boxQmV$c z#k!z3W$EL)LQ#M9LS{A^hzLjnDHM%Xp9j*=BE6vWSh0;Qg5|gYGH(TT@ytZ?d;+8i zJ#!hB(ai!`LdGq&4}fv_+ksM1yo#*-1DXfg6A5=L!1owv5eN|Zfk?~1b|Rz8iMZ=` z0uPByA@XjZR&sS38!q3M3HeD#+WcbzmN$m?v>;DG0q6$RtvVNSi>B7@??0 zTd|eg`+-(O%7+hLhxz1i9dSxoyFjB@6wUBlsw>GLB5ztUDV*r;SHX%-82W8hrhG=* z2R4$-Zqm~sP{fUzMdP{%hIRx&*R_JZL7~AzcHJ9$sR0`iTgv?iwh`2}H*}j^##o4OAtv@pSTEy=B5Ff zF9XAgym3F8lc9lGg78i&2~v#+EF+mZnXr#DkdcAyoMbR*#Hc{~c+{NEq!C{S3Krt^ z&ejww0`n-)BYYcZ#gWc#gh$-sfpjzAhwod1*Y!a2BACQ}l^Tw>VK#{Ji9Qq!1X^DZ zJ9y##9=H=&Fd#R*;cHt!#&jfZc$;VUk@)e6pT+Rg8Y^}*+|Y@Ehdgt;Op^mcismlU zlmKlb!`4udk{x*zzvEbemEyS28ZK0hJnCi}AfFk5y~R+g&c+RnV<&;k40JCp$fEFM z5aosZwH_=13sfqF7sOD@S09#u1@1j32o~}Zkfn}%{=~#sp4M;1vK4_2rBT$Ln_d+d z#fe?Ls~m}2-i6A*7e(-di>(g$xu_Uy=%8**U@8&J87E=a1>{mPoTyC!ne`5Jt3X|4 z84S5Gu(urAl5NFZZghzL1ER1{uIxSj(+qyRyW*nRVo0#nAtpv?{~xJQ9+iu34_}vC z1A^EC(yf8IT*gUSmx1jZ$47!h1~U#7I+~aspBA6u(Uu6LD*^C7h zL?G#baYS&B!6YEN1JPB43@%&KfMf(35aAmcPX@Fn(4Nrw@R$d5s?~0|us=}nWsw>W z$2bP$Kwu;hTtRUT$icvABDg%^I*>zwI@Lrf4AB1v$l<_jA{bX6^HwZ75-9VEkiiJ~ z;y{iD#uJ$qe(fQhYV|H$I1y-7U5H|Ud}koP1p-8HyWWq1oD3``g1dWu0VETqj72JU zc*R3_?k|Ra#h;_$2k>K!6SARCM=`q(%a*S;D?Gs_(u0~E*vM1q?gp?`CdLqC2exw} zx`^dqfSsxp#a&#qG=Ghu7&!T7qgN@)!zR^V6|o^U=>sHps46zQ9s0ioMOvN4@Lv7d5^f9t0NF5;~;Thk^B+ zV0Nwl1s(Fje-7ndxB$0!f%w_u6pIOdS{pTDR!`tU<*#A!$`i1mP*4nwGMLm@BDk^+ ziegqRA3L&oJ~*VVyzq_l!VAGRZ^#R)oENGD7h4xDJ1^7-W?C1@K5^txH@Lr^RMp9O zp;54IeR(11yzq7~U|skbE?76BRq(WR!Oh~E!N*6i^P8wcXKCTs{~&Hk7P(!pdIP** zH-UD+&O~Gru!(E}?Sdn?jA&$4A%k|owVc576!t>~)?MlnwA~t8-~!yGbI$9%gOwX` z%b?CnK6NDQ7aYbf;FHw`F4UX)FJuFzCIr*?1^d1w1b-nS!<7>pxqc6c`NnDAf}I0{ zg&Jda=}f8{6pZ9Vy!cRNP_RrMnJWIfT9q zwt5>&jCZCvT!8DJ;dQx1|5#f|I2A7NmlN*ns06b_LTh1z8oa`ZT@7mR77n)WS0Zkg@U~}!8(bKbYwTlkzGT)ARE-=;L7(fA8aLGMfRy%xx&;a z)}%Qs+RE39%yj734?1|;!`PTvBx=XT%nq(>!>xDWcvc6Q*}**@aN-#Qn}M7K-|XyQ z-k2j>M#db?4j!gdvR-BfPZAkaiQYMotWPAbDtTvS2eY^k7HV=7RPOQcI{2~rk;TE& z?a>(F=D}xgv7>BHFvZdE3(xoWtkWB_6t`@73mDl26;ALeYvXp@vfmwMD{ujB z+4t~cy_C)cZ}iPw1LuM@KDLz?XbCH!f=xNG-vSqcmmM-?LFPiR(kG-RT+!n&;F`mL z9(X}k=%0=Y6P*`s1Wyk@Ral|BJ$>q0&F_IDMSL98w0r^|1|NThDePK&n6DNe2BQ+V zR`n_0s z{uz!f=f5DB27l@C%NeZXhW|Ycu1(~&Fx)}y)~*O3Tm(GYLzfodyU@FEQ6BuI$G;fv zPyh;x?w`NFfGAVEvvckmHL(!%fZ`s{njQNnu*ddoO=KltXN|QUK#h7`! zzZmmdl1cF{7JX!lIZhzgwTWV@v>5X+5g8>ILnh)K6ra2?=1DFiNdI?YS&Vr@5O9U2)UgR4p0tcfw+SH;Y6cg8eq00o88viBQCbc7@6W z5@)_PSXB6m@TP)LneUe_z_!7K!saA?L3F!FikRC>h<`_;g*iqWYsi+we zGFJJDn)5gjPM%NSh1nPLI+2c5g-^b?+5JnQd1$z2d>?S~kh&7)`D?h}kX>CR%t=E~ zRG1acaj_ES??g(3*TwgFw{`csun6rn#-24he??lMuqlx9vu4MkNOD~NHg+>i{G9m( zk@!JyBngn`O)rtT;g*GSpFhF3U_PU}YdR%=V)M z*$;a%Gy?Lfd65&*5bp!2Y3>~@^q`x=-3HDhHy?ANvo~S?Nc5%DHY<%0GBds4`KSg$ zbAyyar4-ZEQpCBobJ?fWn< zWws}RB_9E#so9+fI(Q}nX=V;2f(Fk6^0qmY2s(IH0BLTeLI)3~YGI|~4jxR_(n@wd zT(nr9x?bGQ22-~-zaf3-;Mob}J#zvPbnqMm(#D)c1RXrT0eRnCKm;8;SAev&WYEEb zG9Oqn=-@$_cIJ z#F6M?i~ml3H01h<&_!n{bN4UsR+=K`1+ zoDv0ZKkW2|m@jamyFJiX;X^sZtVS|TGGP}QbijXQ)+3?xB{6IwWdD`fg2*3>CFwvU zsfqYL`pWD<#0vytSH3cbagyVDbE=!Af}Wv7vR(4sKhzv2Qn8J5;ZUZfT<8uds+;KM zFRfu_ksz-$_wO@AIfj|-iOfiXy(mA8X2Z-4w;pT86 z&j7(5_J5|2$eymSSuX~lCYi~EmfaSUoJr;~BALnJC6{FWM`UwpIEVzQG07|z64|f$ zL6DJVDKkKbabkbyeQP$IfT?o$&inY~`mMQ@6MG2ptyyFu%0T-r zMkfS*>v%Z7c@{>fI6AA_9>NpMyRWX!Dqvyu%Mn_(Vtq(ap*%uG&_ z*$1%o_R!5yKq^f^6O&o*>yhjZ=$UEu<76`XXjIt!T%RJ|FIUH~=nk+B+N=wON7>N4 z0<1WYx#mntT?+b_7l3?cE+BG?$b54dk?)BtFgFs}yC9O)fm934B2$GGNE!iIY|fS> z9DWY&#PEA=*sCATXO*Mn=%(j9OaZdYA|W8@K$ctNN0<~I4CE(CVAw52-7789tCu(+ z!X`1WdbB%q{WiJlh4Yge=R)6|b+aSsF%BUd_4fhW?PO=K$MD|DCja)$n_1do5p7}1 zY}*sT4-mJ>oFFWF9}@4hXhkrJwJPEyOLoF50J2{tOBOBtDyz)P)3AE&7lSQ>Yy5`w zgB@?IRF7aIAbgNlTjb^45N;F%)i(NUH=Gz-#l_Z0q4=yUXdxi8R+8veAhRGBx${{p z+YDrrB~u7)*#RJF7QsNP8$fnhq)f7h4SWj@Io)F+S+c$6Jzlb8c5k|e73dht_L}vl zi>9;<;v=d6`NjN-$drl^tTB)SW-5`gkP68`$Ae$K3?E)JhaYQ*cEoXg6kOo_ADVR3 z?2?Sx*}I1xGe;AVyNCX2KIFuH=#QJPgfW%wmhIuV`93Fb#thxY<7Q`)SqG#a7eu;&jE7zwm_aA%>6_aU>qf5AHM*zqvb0HDjv||d8)8-Z; zn_;`mR3K-~!$b}f$udt9ISyn!$ecIhXP_C$Y}YH1>=2NPW;r5Hy@W2CuMmn`>1J6V zbj@t!AaR`_2-h4(q&CD6y#eGe^CFS{|BGZ@f!s7p%@Ua*`5eey^K}QoqTV+fS_Jkq z`WA#9n5``o$;JWs#~kD!GlBeTjwJH%Via2lmAv!^uzLp-x>OPKy4C)h+ubZ-=mPFoxM;E^<%7!`-x$XTSiiJO9 ztX!xsp(j8VaqH{{ zUoI~>?)b+q@;mN_A8(sVF|0GBs2ZxY0<|VHB%c7O78>awLx5Bdr4!kAA7Y4syc&8; zc~}l4s~eh4XkYlvieMMI zA#Zep;L*^$bto&o>)XPaa*acOaUueTOLdP0615&>VCnTC;Sy;QDk=#7g6IP>O+r;U zvA-aiglZ8f4evyJlQs$UCDP*!dX+W}C37Skv)I&{g}&#+uG(gfsx4ZHJhCew&$mOX zL}I@2@>U?tLngm3V!ynXpx`Y+6W(|R)Qa;acY{nzhq^JKj(f5X!G(7n7uH}tIIg}6 z7g~qj*ns8F_8g=4{Rg3@g18#c`~HK_k&Rr&b&=lpokANo3BtnVD?>h|Ul%X=exUz_M<|=X>Qlqs8Ba9 zV>hW$p?;k3X6I$ydcsFwXp}(Q3DOV9H=)@?(2p?%$e2)tbgUsCY@-c3I|3OSYC#0O zOzVNDp}j=V%Y>btKXi)-Zft!NWc1L;-KYl+w5bU;G%YEv${_Sfx;0LUpAL{uF z8kfwF1c59L4RVkbKzd<{obhiP6 z6C8f64m}~V#3IrAd1boIC1QxSIuuW2!wNUwL2h-ZBqzzN$ka&oMsL(yi4!m@+^iZH zu?XC}-@=78p#vm}WCD=2q520fgQ*Pr+66$?hcY>_-C!F-bq=A7?FQQzdYcp2{PdBS zZ`c&-OhkT|ZwhIg=Cg(#y=;_)PdWVGOu}Iz!ehz&=LK}eK$K=nUZY1+x<2Wv}J@gUDJo8o@m)Rcr zKhDlGFp8?{<9E}TB!D!PUPBS-UFnEYrGqFCL5d(q6BPwr0&xX*X723Hk_F+xfJj$R zKtVxTSc)L1H0jOIn-mdI-gE9fcV?4(d-)Rm?f;(Jdzs;aWN5#K$J9t|=S`$^-{Q|W zEaJzij!tBEAU0e4D~ME1)!V@V9(>>x36T;?aL|1r;*T0I0_);TicK90{m7ZaPgq2~3ztu5G zut7pQJN)&IOLBHQG+M91K}Y}dL`uTjKd9N|?<)vqC9Q|<@;`Er+_Bt6jjy|7x!Ygp z1e$htEO+}iN#Y#X*zM1~W9e$tfsNh%9m16;NnWu?xI2$$KlzX3^6V#n-;=_7$FraE zc;;%9XFvG|3Rkk&;)3K)Is6i5V)yvRO4H6!ls*0;r*nF?Cy!^YMtQc!UsAZrPHYB8 z0C0-A$LYd;gss0P$3~MaQWB_QT;(_`%0o&5L6t z+rS6R{YL~zV`=}%CjF@Y4iPm8JL>Os4PChrIqHA@y0o(&-c9^)FwF1${fKO?nk*{& zG5-W2J-qN9CdT%-zu65LF7Zw$G$hCU_XTkmTTl3#+>{!XvM2n<1@WRxE!_NDA3v+V80LdTz4+U|PE<4KcIdJUVI9^uk3;v*x`n0`3uzS4VpCd>l zQI+?L{?Ccrfr@^lHhf~-zk*!df}FtaJAkG+qH<2HPk{K*p&$zPO63N$JUpdeiGmzKn%nvl!>mPAw$y8^3}_%9Ow zNn^OTjs?L*sz6`yza^acw531AiiPeg{&Y!LVIbdtXIK0;iQH_jv1v8n*uHJk`{{BMbo;JFjr`f-qr`f;l zB;)Mm@Qhy<54+=#t&`&gx$8eKEc>)Rjg!QI%zJ+AAqEjXmI36D7n1Rwzd50HfQ}0? zgh;3DGClr^D!1~q5s-hSp=TOGR)DL&`~#!NT_6wgxO(VcE;XWg`F9B9|3m*)iL`ZL z`2yf0|87Cjv^_wuE?Dj#%O6!-TX|2AQ%y39kMt4_C zW$u>I{}Gx<;>{BpyKyoBH2FOkAa{qfjJ`q;3=oYu%jjzyB*&a(^xUW9%If=t#%=V= z>aWM3=`)GF-~il-Q}CFao_oycYE(O1Rv#-}c@6|MFS{n3ttO;)%FF6M2;yU}{Q}=v zEdWcJ`e{Mjc$C#!#-jJ`j!9X)JrT8IQck}ri2UA~HVj_s)~m*e3=+jn)ZroP`1KwBC<>}{0;<4h1>_u+|JlRS~9r2Xx7RTnifzI3< zlKGmV*A}6UXv%boGOa1oDS8vq2-9FWMIS2(Q+^D%uB_7~P{(v- zeMv6UmG#59Ojpijnz1T*qESV^B3xxB#zn-Zu)QFHK}{0n@&8Av_7 zOcB@4K_K z!)j?$y%iA*bU`4^^tfVDbMz~Xl?Bp5_v(aD)C5pVJ??QS+O}L{9f7pgyAeUn5Fl;z zokZHL(AYab+UkX$aAW2L^1S{uk)`0-3?S|Fj!~K*koJ0CFQIyiU{fAYM}1V3XdRGF z`kg1GX+H$$XCN=?MN7Dz9R|`xuSsO#7aBVQq?_J3N^==VcRiDc37UsMdg?bzcwIyB z!{IGGy=_TJHbJPL1ky(j5y9A(2lA5MsvM@K-+|HOd|atW~o4?>5VG7n%9A(>)nVn2hBJjK7CA-=6xU^>mNws zWqyc#I-nW46(ur&e4@`I@;Ye3Ky-aglqM61q3e~T_vug=zX8Ja&M9tyeg?XF`LZdT4LJO15qhK}}&G8TvdT3{t2RkXbo2DL`iHUz4T+ zXlenOqi03gX$)kpev-%%FVyMQfadA{Mu|EC`AmPZnhfJ9(DVW_KZj=nfGp4(k)}Ju z>~$au^$tWZ&|`sop^qW*`KSc;K9I%wr;Y~R1fK?IiN2Z8*I>v7vP{3?h~n8?Aj|dm zr(}R$T%xf>K)%eOSqbDTJ%uzQL9-snsvMfFK)%+WBaN{H#y@)it=3;7grPnNWQ{(V zNDVM_3dpzmoG8sjAm8b0iPT=Ku|I*V*AGN#{sHp6ex1l?OEnfh5*CK_0@Y&~*0#+Nt-761@Usm%fBZ_A-r)0`ij{SHm^*Hjq7fh)4lQp^t(5tQV^3YAhi8 z^y)+kgJ+)t`9<#>rTKg$%wvAl7ZS=31?@`^9nk-a5`7Egpq^4on!XO@V>6J$dRHQt zjJtpw(bI^ugFycV8Gca#c?yf&oeea!pSsG7{_z2XaGS8KoHqc#83p-u;MTW>++4M;{4$X$IzlqL-1p1y?0kD!?kTtze)rHy%ESm-TNM)&mkFi0Qyg#6(!mac$coaG29j)?BvJ-q zRs~1_gEewfu{Mx`MlT`{^knuNkV1wPrRf5suyMYTS327PqE`SFHOe=34GjfS%y^c_ zjJoi_Y9LP-FGp!619{T$6PW}@ET#h~VPpy7PQ^&T#SFx zv@(E7z@|<~BY$%#T9YJ~*Gd^xiNs%w5!;8QjOU0vfMGSx3`-dcMwbNBXA=7tO=8~{ zMAAiQvJ>Ao>uB`tAw_sO z;|p;1qEWo3B%$zM9UwEVg-dmW%qU$%2Bw#x^_IWmBOHt3V_7d_0ug+K14(a#^+C-U z&(oLU*>$km$0#I-oF!tUUNL?V#4VVw7`fL_qRB=Ggt)BuI;{QmGa9@kJy5qP1{f(X zOQJrvIKZeUi0eUWlm}0Bf;dgO8N=Ql2c!L{ALJ~5knyc>?1p!cv0V^%HFuD)S8BAv zHxt7|6HD(d%LS&e+pU6-muNzu_w4BCzRD-wNFeio^qXhD? z?&A{KS};A_I3Y;H^YoT@c62mjBaGq$M1WYEu(vZL9q#Pl?(dt%`BeGCvv=h}=V+t& ztI`Locj&=r;{Xv=??xNV21*UqyX^a@StE##-RlTn8UxGYjB10VWh8jgWW2FQkTfQC zh(CjMxwnkzuSwCH)nj3#3g?B4B}9tCrv=K^jAN6GD@0l~kumn=MdkzX8W)M+I=X(J#0L3C|XV z=XFUf2=}(W>>>`<{38F{g+Ja&72ykSV1gT&!a;=LG0TVV$FhLYYXq8zuzmsfE=eQC zg2u!*WCT=Z*~WsAQlmEJXBt}sajW9YJb{~O>=7EgqZ#g+S{OpMw5tf&Uis%1{1Igq zuR6~*J{l$cP+|SlSSE<;$6RAgF3sFL;h1OK$)%Z>$4;iv{!Q}BO9_*iN3_5gP9l|5 z3yk`sa|ZEqV*nAAFkcvBh^XZJB2N$(MI}|ZNcYr=;s{mmg79#Ikv#@|kb7-dQkEFn z*qnYYiLy7cdsN;oHztr&1^7#2EfE#GuZ*2URPeqsYLAm1^lSkyy-tAZ>_$f-?cvHV zlCO>7g80~=+livotabxY1dc>uNY_Ngs$36|&(Fah=jhhAQNOWKC zb2Q4cUmT)}*KZDS+TH`kP8l<%I;jK3X+hkiJ80a=r8#JHeFsy>)f_VV3gW&Samd(1 zq`~|0O5q`+^t&GvAk?z@GI2kQ2swBKN(p zHCFK*n4uaM1@f`haAy)tpEuf0k^%aeuJWHZGKmcMTWRhSY512ST_;P=RPLTPMhW63 z-Fah^AU57Bd!Y~9D;r!$4g&r#ihUsbbo!w`jCxU|cLB!!pk#3mQ)L@%g~r|3$~KBk zK|AhghHNAE#+Ivbo`1+TN(*N)sOVXC9?vcqHKb|hG{XgBPg+jTF68md)u>&x3&sKA zD&lDxPs4%>#zTR!JSsCU80Dvm^kCcI6EjB&!Z8D<_NYR3$*3(f5$81YWh3{|!OO-= z(vC=1jM(MqhAGQj zB#DM6zh{E_hG7uF8y6V+8^)1x$?!`gu_sj3v0gwojSL}j2kJMCOmg<%ha~nj1o5VE zgh;^+lH4*1rDK319(7#dPh+MaS)QT`;@JB>O}ctwzORvAKZ9m4guF;)=wcS zLvW54Z}mMi2K&&CPb)SvhW!Pu{xv2G;+}r^*B$hE>D1f5c}9Kz8vCRnr!4&!U6w>q zdSsjy8n-AtGCUun_il}Rl&2`Unpumz@!BZR_b3KvlPvCqC9?Xj|4-tCs zNdmhMixe^DDM7M5>hMRb`8N@D_#@8DUH{_EGSg)yDp&F5(?pc3gdDEKzIHzI86om% zFEH4%gqY_ucIkY9m3ZVvII zA)G48j;y%3kO)2ifqhGHvw}AC(SF#Iz`j-`Q;w*z5?{I>%WA#{ zD<@_bA@Z@}SL4N_>XppCf@HBI*s;gaO^Uf$5IAcGixucuWpmTt@DXg5<%xx8)cPM1 zIdaKjE#UGqYO0z|Oc@|t(17&l1!$o_>Fh^Xr|JjZS2Y)L5k~FUNAloiHS;S$+=5ok zTo*;Af~#s~9ZQ;S8h&vA)a;tm<=LwS=E8vd0cXV{3VT=sa|01I2X1H<3!(;&QFMny zdLQ!KoM1~=I4f=hq^Y@?2+oRM1k&7W5h5>XF{-usiXc9A*xOTj-`ccDgtOVf;HZ07EwU5)BnI-A{utB7+dxU&gH;9ph&)!TG7`wER)06UwLh`_)wd@VJ# zf>)gr>ul~6Ke^58i{>37;!rW1Dej`Yh{w(f`>L)EQGHc+hp4`)heK3f)ze%$yA}i$ z8eH{!b5Aq(G`pvndz#(TJRqD!v^Hhq*?vg!UgmKk-GFr546oXnSBMy$AQSL-OCK}#Qw&kWx!BOhEG&q7F1C-^RuCWS&{1|Jeas_7IzffP z&gCU@;T*J+!4@Y%mjprVYaS3JB1rrs*itte%$0t53|NS$2&kW_{|}LmZQc;iMni+! z->f|ki99KLq#$Dh%oc(~SiCw=2by_Z0sW0P`zrh&!lA}RiVxg zH17x!VO1eLyf1^H*UToFC`uPg4OqGdn_C6(v8SJur>Xu%cv0-N41=9P+Ho{X#pn2V#D~VR`{X{m^3#0JY&HSIED8jBy zhI{8iR7ViEIT>!w5hM*R19^mJ!_6&QIS z%@wKYHqxvloVj&-WFF5(nGK|AXFxp4+>*mH_-J)*zr28yNO?BO+$Eg32|LQnmfmYK zVdR9Z#%S}VB+dk3w0U0;xd?^XG1`pzLL|O3KpC4S(B5%oF(Go3Xq>rT5@)bGE_bMz zt5Ja-XKoR$+{R{{c|?#bwi%Y`#FC_WTM#!}$9v6x1d2E#;_;@OU%R8`@n-BIjE5W} zW3w}!;*rHvvopaVs@ZwlA*$JV$4nM>T<_m8@z@Idixg19s&`C9)Ue7S@oHH0u31(X zasxdvPoO87RdNM-q7xt$==aU;Uiz4X3iTvMq(VK}td%R&lg-vqqyp5L$!51GQXR+# zrussX`i9mN^An+QKTkacG+rDK_}Ix0lEqhxruQ#}fHqAUPG;WJF z&1|7FK7zPKINf}U$fwX+pvGrTT`afF7>%8H#D?f& z^Rys7Hv73amhb^A(V7jGpl9&CO+z+BADj1yoHz&L8qiG7Q#(F!Y6o6n!rJkPd1+}a zmN6`~n)9BlNr~_F*WAp%3_Wve2RCO);?xeFr*^m+RXezuDO|bj2Y3DQ(z1eOuFB<^ zWtLhlymvga@_6QIlxLP%Nw{)7vs}-}uYlP=T6PB_0rPS$&jNWob2ZAdfca-G&jNWo z3z~5&a;9R?w7zsA<`vKK2J?94ij-$TbCz)CV``T&XpZ^{4Y~88kU4>fs=y&r7sPFv zW}2=n_k4D&P*?938}!>a}vW}P+Y%*WCf#*0zPEHflXgsEm{wmI}$X&MKi7@$wh zSwz%Ty*Xyvb<$4EBUyvynD>8>uFi&&N5DN>^;&198Q3bMPWO;$E|G*?VF|3o+5|S= zth5a^?k3{9=MQG)c1*Sid%I2oThK3#Z8dKb88J|jZRTSUk^Jx=gPeP1nJI!~dDLty%WN+Q ztZ=~m>=9VbGS?7kLL_4L-+^{A*f?)_jn$k2=a9_Fgevxi=MaJHHRlQTo@~b&z zr*yW~4?_wd2hEAQk;r9M9E6@S9}-dJ{j{0>lhmkMa@tfYNK@CrU>a}toHpl@NL7l{ zraUX2EUf3uo8;=BALZKnIkVM1 zw4-L?jGZ$rLF6D5Yw|gBp&)R%2mJD)XXngO`(+ZTsp22z`+}sie%+GUT}bLb%uLc? zy+x93-XVhh6PmtY#{D9rQ4YS^g_;ZIC_#Lz5*;DAXnrUNT_q?F&Mul65;^NK7tK{f zwuaw(6IR;OAj7+)!PzI%`c?Yy<9wOo*UkLD$*^a_kgd=QG3>fIiwM4SiMe~j)DB1u zp12qYc5ax%1W9MJli>8t>v8OssgnlJVBo~)ws}(!sOM_RcgHMs5DmF)%N?_+Aa2KX zCr@8;*X%4bZjXG|+$4$9N#4!VmAD#bMeVM+BbR4)^LTd8Jd(?^duEM87-%(rVC-HV z&s>e_x9*t@gsTkp$zC`qsY9aOi)u$@dHc(pB}6{$Pk8wCBxwFJ4+|2})ajqU%+r!M zv&p~AvWI1MsLFQVtV=}oK=;kIf@F&~K)g8Ny>E6F2v*eS@tyl-UqRd{@ZaWssbTM# ziLAj?SYI{A9YN20;(jiEwft}MeL>uT-UBl%HO|cBVa}+ApBkH5&e>~>{;}U!XhX4k z!r9!vd2-`Fv)At;?VSnMf2MvcXKwtLCpTP;%8mcbkZ_g3dcu3UpF_OIxu9{Cg2r`OwZ& zK$3Ysp-I>77ENHUK>p@;5>LIB;F2A?5=D}`MB9@rMnwfE5K&7<1vzcMib9D^XF={2 zo<*24RFHo|L>YRFXA2_R8gx~NUnh+UP$6FNluSTnrx5Q+MB4+s9j+!7=92|-4He;B z5Vv6~!ZQWQVrmzn2%mErO=mH+J5rRd5k%hc#&a&kc!M*jkxNi5)8WJ-Z+i}j@Jse~ zCHXOdWS97H9k^7^uM@%XCX!OzbKY?#DpzSrGk2y_h8GeVw_Pp6JN|*L+@`J!k6xIp zkBR1rRP8FmdkAN4?8`(IoLv*BilgJQe4LQ_w5-pP#d*iF{5?t70U!?_L(Nn{vYb_f za@nB-!-Yq#|x6CE%3qxjCbIrKvnLl@>$}iEYI)% zB(X1{lvU&P3so1MicLYNt2KDaMYjN9*45yCL1bygLRN#%BZ3_flA8SMC|B5~*K&)U zn)KG@n}x_NceQ!r%Q?$k?HuI}y>~UL*wyAOg)6t%)s8B5vWKnBI|&V*!3w|gF6_6z znk}C`t;18rFWHHibgH%vA4X&&5IjCths)Es*@D;<}3~5yVT$jH?M7_3EmwzaT ze06ut@3E{d*NHIiR{5MlU4ER`RISU45g9u)iAZT8M}{ks zLgcUd@}5L=YKHHSrdEeac=RyZyVI(lq2lNTc2>YRKfMk`yDwlg;cBqBJz-D~Pn8sj+(P8Ee8f5NQqsj~qVBcN2L9 z&Wa*w%1;Xtk#Dfz>SHrL{f;!<{SSC_@FfqBq`Q*zpyMUY`IC}3W2)x7oFKAqz%AP5 zylRvNYg==-w%wF#0WEkFp;46${BOYv+(XaYR=!1^+U9ChZEL}EZ?m-E#f2Sro23QM zy=dK%4;LC|JnLmG`51v@Jg~`Y$!AHCGsJDh&q~wIMnh}g{3;Q(o!5bfCr?f-DMs8_>|f-$_uyXSx%c2+F(iN)*GgoX(yYR8nmFGt<9pdfEKNTp;qxK8B@r5K(M?SjqpGl+o{vQ0WAa3W| zGfy;n=7~m6ep$G}lGspg0rui|By!4KFP?iQ(>p5TcYOdO8P!|#=8zKbFH%7D7A{e} zMIT3_dW$~%yGJtn)m@H0d=rtC)a&%2UdO!?@)F-kno;fPQpihupFlqC^f=kdzeL3^ zovr^yHeoOEqe2sLPKUh2&r4VA$?)nAqsC<~i;#jLQJV3g2Swna2YA&151jWSO~ixm zJVbo(@dt;fcOC|Fo7IL?@o6U>m)+423Rc7;PdC7)9{6&pVb#6G@`<&AA^eCy5s!M- zWGGMg9ycN2tpPf4FqA*#LDTL;YbdWPNF-6!_o2KA5mn!ZayA3%CfKpQmo30hE~mzL zod(8bSfGb;IW>msG?WKJ^W?!W-jYnKyd1_~5X7gc`#r<>Fd~mZp~p617#~Bf)aLZ- ze4-#(iLg2C74wPL`A;NLZQF2um<-`Vmquf_a==dslBVH9*!Tk2aDI_AO-slwd<4HK zNV@hS5ZoId!5@-lc2VdbKZd~~ZxAChXcZ7IqLF-rK#@eX$v%otAfh(eNAZ(Hl6T1Q z<(vEuGL%YN^KbHNf~0A0(boK%{JwPMQEP{zc~&fXA7Nrq)Y~tPjppYi@|+35tD6v@ zF?>Rt5P4SAg*(acpJVy?coAy0Cs`ih7{~J`NR8SXAIJL>QG4U#`6vxFa(UAamfzx8 zf@FDK%MZ7NKZdo^w|TWhDZ&-c&p`ApUoS|+qed|A<*8cl@uNcHV+|f8h=+mRm}fr$W`jxdP_Fhy1r>^dQTlHqE{KsvzmC)>CqflE!D{m$AVedfcE-;~NC=u{uPi z^7B&TJmxlymo12{pt7}z6Nk2@@fw0eJRUD?l}+P2BuY%0DVOcj`Ee5Ai3L2Lkj_g# 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 delta 2183868 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%0Do6bI@v`Kwx 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%0AQ`vO>5{m1ngVZTHA;? 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 V^MG?(`-k%JQ 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 z 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

-gySNQQrZtb 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