diff --git a/Libraries/Core/Callbacks/AchievementCallbacks.cs b/Libraries/Core/Callbacks/AchievementCallbacks.cs index 572c9c94..6a65a474 100644 --- a/Libraries/Core/Callbacks/AchievementCallbacks.cs +++ b/Libraries/Core/Callbacks/AchievementCallbacks.cs @@ -16,7 +16,7 @@ public class AchievementCallbacks( /// /// /// - /// + /// Session/player id /// public string GetAchievements(string url, EmptyRequestData info, string sessionID) { @@ -28,7 +28,7 @@ public class AchievementCallbacks( /// /// /// - /// + /// Session/player id /// public string Statistic(string url, EmptyRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/BotCallbacks.cs b/Libraries/Core/Callbacks/BotCallbacks.cs index 8d605c29..73fde8ab 100644 --- a/Libraries/Core/Callbacks/BotCallbacks.cs +++ b/Libraries/Core/Callbacks/BotCallbacks.cs @@ -21,7 +21,7 @@ public class BotCallbacks( /// /// /// - /// + /// Session/player id /// public string GetBotLimit(string url, EmptyRequestData info, string sessionID) { @@ -35,7 +35,7 @@ public class BotCallbacks( /// /// /// - /// + /// Session/player id /// public string GetBotDifficulty(string url, EmptyRequestData info, string sessionID) { @@ -58,7 +58,7 @@ public class BotCallbacks( /// /// /// - /// + /// Session/player id /// public string GetAllBotDifficulties(string url, EmptyRequestData info, string sessionID) { @@ -70,7 +70,7 @@ public class BotCallbacks( /// /// /// - /// + /// Session/player id /// public string GenerateBots(string url, GenerateBotsRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/BuildsCallbacks.cs b/Libraries/Core/Callbacks/BuildsCallbacks.cs index 379d8629..d0c50efc 100644 --- a/Libraries/Core/Callbacks/BuildsCallbacks.cs +++ b/Libraries/Core/Callbacks/BuildsCallbacks.cs @@ -18,7 +18,7 @@ public class BuildsCallbacks( /// /// /// - /// + /// Session/player id /// public string GetBuilds(string url, EmptyRequestData info, string sessionID) { @@ -30,7 +30,7 @@ public class BuildsCallbacks( /// /// /// - /// + /// Session/player id /// public string CreateMagazineTemplate(string url, SetMagazineRequest info, string sessionID) { @@ -43,7 +43,7 @@ public class BuildsCallbacks( /// /// /// - /// + /// Session/player id /// public string SetWeapon(string url, PresetBuildActionRequestData info, string sessionID) { @@ -56,7 +56,7 @@ public class BuildsCallbacks( /// /// /// - /// + /// Session/player id /// public string SetEquipment(string url, PresetBuildActionRequestData info, string sessionID) { @@ -69,7 +69,7 @@ public class BuildsCallbacks( /// /// /// - /// + /// Session/player id /// public string DeleteBuild(string url, RemoveBuildRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/BundleCallbacks.cs b/Libraries/Core/Callbacks/BundleCallbacks.cs index 05092129..1476fe54 100644 --- a/Libraries/Core/Callbacks/BundleCallbacks.cs +++ b/Libraries/Core/Callbacks/BundleCallbacks.cs @@ -15,7 +15,7 @@ public class BundleCallbacks( /// /// /// - /// + /// Session/player id /// public string GetBundles(string url, EmptyRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/ClientLogCallbacks.cs b/Libraries/Core/Callbacks/ClientLogCallbacks.cs index 9086fc4f..e8a36e0d 100644 --- a/Libraries/Core/Callbacks/ClientLogCallbacks.cs +++ b/Libraries/Core/Callbacks/ClientLogCallbacks.cs @@ -23,7 +23,7 @@ public class ClientLogCallbacks( /// /// /// - /// + /// Session/player id /// public string ClientLog(string url, ClientLogRequest info, string sessionID) { diff --git a/Libraries/Core/Callbacks/CustomizationCallbacks.cs b/Libraries/Core/Callbacks/CustomizationCallbacks.cs index f45942e0..bbfe113c 100644 --- a/Libraries/Core/Callbacks/CustomizationCallbacks.cs +++ b/Libraries/Core/Callbacks/CustomizationCallbacks.cs @@ -20,7 +20,7 @@ public class CustomizationCallbacks( /// /// /// - /// + /// Session/player id /// public string GetCustomisationUnlocks(string url, EmptyRequestData info, string sessionID) { @@ -32,7 +32,7 @@ public class CustomizationCallbacks( /// /// /// - /// + /// Session/player id /// public string GetTraderSuits(string url, EmptyRequestData info, string sessionID) { @@ -45,9 +45,9 @@ public class CustomizationCallbacks( /// /// Handle CustomizationBuy event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse BuyCustomisation(PmcData pmcData, BuyClothingRequestData info, string sessionID) { @@ -59,7 +59,7 @@ public class CustomizationCallbacks( /// /// /// - /// + /// Session/player id /// public string GetHideoutCustomisation(string url, EmptyRequestData info, string sessionID) { @@ -71,7 +71,7 @@ public class CustomizationCallbacks( /// /// /// - /// + /// Session/player id /// public string GetStorage(string url, EmptyRequestData info, string sessionID) { @@ -81,9 +81,9 @@ public class CustomizationCallbacks( /// /// Handle CustomizationSet /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse SetCustomisation(PmcData pmcData, CustomizationSetRequest info, string sessionID) { diff --git a/Libraries/Core/Callbacks/DataCallbacks.cs b/Libraries/Core/Callbacks/DataCallbacks.cs index 388bb347..27bee53e 100644 --- a/Libraries/Core/Callbacks/DataCallbacks.cs +++ b/Libraries/Core/Callbacks/DataCallbacks.cs @@ -19,7 +19,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetSettings(string url, EmptyRequestData info, string sessionID) { @@ -32,7 +32,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetGlobals(string url, EmptyRequestData info, string sessionID) { @@ -47,7 +47,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetTemplateItems(string url, EmptyRequestData info, string sessionID) { @@ -59,7 +59,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetTemplateHandbook(string url, EmptyRequestData info, string sessionID) { @@ -71,7 +71,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetTemplateSuits(string url, EmptyRequestData info, string sessionID) { @@ -83,7 +83,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetTemplateCharacter(string url, EmptyRequestData info, string sessionID) { @@ -95,7 +95,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetHideoutSettings(string url, EmptyRequestData info, string sessionID) { @@ -107,7 +107,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetHideoutAreas(string url, EmptyRequestData info, string sessionID) { @@ -119,7 +119,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetHideoutProduction(string url, EmptyRequestData info, string sessionID) { @@ -131,7 +131,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetLocalesLanguages(string url, EmptyRequestData info, string sessionID) { @@ -143,7 +143,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetLocalesMenu(string url, EmptyRequestData info, string sessionID) { @@ -164,7 +164,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetLocalesGlobal(string url, EmptyRequestData info, string sessionID) { @@ -180,7 +180,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetQteList(string url, EmptyRequestData info, string sessionID) { @@ -192,7 +192,7 @@ public class DataCallbacks( /// /// /// - /// + /// Session/player id /// public string GetItemPrices(string url, EmptyRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/DialogueCallbacks.cs b/Libraries/Core/Callbacks/DialogueCallbacks.cs index 9e7b6b17..f895e07f 100644 --- a/Libraries/Core/Callbacks/DialogueCallbacks.cs +++ b/Libraries/Core/Callbacks/DialogueCallbacks.cs @@ -34,7 +34,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string GetFriendList(string url, EmptyRequestData info, string sessionID) { @@ -46,7 +46,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string GetChatServerList(string url, GetChatServerListRequestData info, string sessionID) { @@ -81,7 +81,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string GetMailDialogList(string url, GetMailDialogListRequestData info, string sessionID) { @@ -93,7 +93,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string GetMailDialogView(string url, GetMailDialogViewRequestData info, string sessionID) { @@ -105,7 +105,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string GetMailDialogInfo(string url, GetMailDialogInfoRequestData info, string sessionID) { @@ -117,7 +117,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string RemoveDialog(string url, RemoveDialogRequestData info, string sessionID) { @@ -130,7 +130,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string PinDialog(string url, PinDialogRequestData info, string sessionID) { @@ -143,7 +143,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string UnpinDialog(string url, PinDialogRequestData info, string sessionID) { @@ -156,7 +156,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string SetRead(string url, SetDialogReadRequestData info, string sessionID) { @@ -169,7 +169,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string GetAllAttachments(string url, GetAllAttachmentsRequestData info, string sessionID) { @@ -181,7 +181,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string SendMessage(string url, SendMessageRequest info, string sessionID) { @@ -193,7 +193,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string ListOutbox(string url, EmptyRequestData info, string sessionID) { @@ -205,7 +205,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string ListInbox(string url, EmptyRequestData info, string sessionID) { @@ -217,7 +217,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string SendFriendRequest(string url, FriendRequestData info, string sessionID) { @@ -229,7 +229,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string AcceptAllFriendRequests(string url, EmptyRequestData info, string sessionID) { @@ -241,7 +241,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string AcceptFriendRequest(string url, AcceptFriendRequestData info, string sessionID) { @@ -253,7 +253,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string DeclineFriendRequest(string url, DeclineFriendRequestData info, string sessionID) { @@ -265,7 +265,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string CancelFriendRequest(string url, CancelFriendRequestData info, string sessionID) { @@ -277,7 +277,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string DeleteFriend(string url, DeleteFriendRequest info, string sessionID) { @@ -290,7 +290,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string IgnoreFriend(string url, UIDRequestData info, string sessionID) { @@ -302,7 +302,7 @@ public class DialogueCallbacks( /// /// /// - /// + /// Session/player id /// public virtual string UnIgnoreFriend(string url, UIDRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/GameCallbacks.cs b/Libraries/Core/Callbacks/GameCallbacks.cs index a46ad6b6..2307f870 100644 --- a/Libraries/Core/Callbacks/GameCallbacks.cs +++ b/Libraries/Core/Callbacks/GameCallbacks.cs @@ -35,7 +35,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string VersionValidate(string url, VersionValidateRequestData info, string sessionID) { @@ -47,7 +47,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GameStart(string url, EmptyRequestData info, string sessionID) { @@ -67,7 +67,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GameLogout(string url, EmptyRequestData info, string sessionID) { @@ -85,7 +85,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GetGameConfig(string url, GameEmptyCrcRequestData info, string sessionID) { @@ -97,7 +97,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GetGameMode(string url, GameModeRequestData info, string sessionID) { @@ -109,7 +109,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GetServer(string url, EmptyRequestData info, string sessionID) { @@ -121,7 +121,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GetCurrentGroup(string url, EmptyRequestData info, string sessionID) { @@ -133,7 +133,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string ValidateGameVersion(string url, EmptyRequestData info, string sessionID) { @@ -145,7 +145,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GameKeepalive(string url, EmptyRequestData info, string sessionID) { @@ -157,7 +157,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GetVersion(string url, EmptyRequestData info, string sessionID) { @@ -175,7 +175,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string ReportNickname(string url, UIDRequestData info, string sessionID) { @@ -187,7 +187,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GetRaidTime(string url, GetRaidTimeRequest info, string sessionID) { @@ -199,7 +199,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GetSurvey(string url, EmptyRequestData info, string sessionID) { @@ -211,7 +211,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string GetSurveyView(string url, SendSurveyOpinionRequest info, string sessionID) { @@ -223,7 +223,7 @@ public class GameCallbacks( /// /// /// - /// + /// Session/player id /// public string SendSurveyOpinion(string url, SendSurveyOpinionRequest info, string sessionID) { diff --git a/Libraries/Core/Callbacks/HealthCallbacks.cs b/Libraries/Core/Callbacks/HealthCallbacks.cs index 275f5f63..0af83917 100644 --- a/Libraries/Core/Callbacks/HealthCallbacks.cs +++ b/Libraries/Core/Callbacks/HealthCallbacks.cs @@ -31,9 +31,9 @@ public class HealthCallbacks( /// /// Handle Eat /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse OffraidEat(PmcData pmcData, OffraidEatRequestData info, string sessionID) { @@ -43,9 +43,9 @@ public class HealthCallbacks( /// /// Handle Heal /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse OffraidHeal(PmcData pmcData, OffraidHealRequestData info, string sessionID) { @@ -55,9 +55,9 @@ public class HealthCallbacks( /// /// Handle RestoreHealth /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse HealthTreatment(PmcData pmcData, HealthTreatmentRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/InsuranceCallbacks.cs b/Libraries/Core/Callbacks/InsuranceCallbacks.cs index b8c77d97..edd3b516 100644 --- a/Libraries/Core/Callbacks/InsuranceCallbacks.cs +++ b/Libraries/Core/Callbacks/InsuranceCallbacks.cs @@ -44,7 +44,7 @@ public class InsuranceCallbacks( /// /// /// - /// + /// Session/player id /// public string GetInsuranceCost(string url, GetInsuranceCostRequestData info, string sessionID) { @@ -54,9 +54,9 @@ public class InsuranceCallbacks( /// /// Handle Insure event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse Insure(PmcData pmcData, InsureRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/InventoryCallbacks.cs b/Libraries/Core/Callbacks/InventoryCallbacks.cs index 9effcc91..36b584c9 100644 --- a/Libraries/Core/Callbacks/InventoryCallbacks.cs +++ b/Libraries/Core/Callbacks/InventoryCallbacks.cs @@ -16,10 +16,10 @@ public class InventoryCallbacks( /// /// Handle client/game/profile/items/moving Move event /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse MoveItem(PmcData pmcData, InventoryMoveRequestData info, string sessionID, ItemEventRouterResponse output) @@ -31,25 +31,25 @@ public class InventoryCallbacks( /// /// Handle Remove event /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse RemoveItem(PmcData pmcData, InventoryRemoveRequestData info, string sessionID, ItemEventRouterResponse output) { - _inventoryController.RemoveItem(pmcData, info, sessionID, output); + _inventoryController.DiscardItem(pmcData, info, sessionID, output); return output; } /// /// Handle Split event /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse SplitItem(PmcData pmcData, InventorySplitRequestData info, string sessionID, ItemEventRouterResponse output) @@ -60,10 +60,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse MergeItem(PmcData pmcData, InventoryMergeRequestData info, string sessionID, ItemEventRouterResponse output) @@ -74,10 +74,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse TransferItem(PmcData pmcData, InventoryTransferRequestData info, string sessionID, ItemEventRouterResponse output) @@ -89,9 +89,9 @@ public class InventoryCallbacks( /// /// Handle Swap /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse SwapItem(PmcData pmcData, InventorySwapRequestData info, string sessionID) { @@ -100,9 +100,9 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse FoldItem(PmcData pmcData, InventoryFoldRequestData info, string sessionID) { @@ -111,9 +111,9 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse ToggleItem(PmcData pmcData, InventoryToggleRequestData info, string sessionID) { @@ -122,9 +122,9 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse TagItem(PmcData pmcData, InventoryTagRequestData request, string sessionId) { @@ -133,10 +133,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse BindItem(PmcData pmcData, InventoryBindRequestData info, string sessionID, ItemEventRouterResponse output) @@ -147,10 +147,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse UnBindItem(PmcData pmcData, InventoryBindRequestData info, string sessionID, ItemEventRouterResponse output) @@ -161,10 +161,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse ExamineItem(PmcData pmcData, InventoryExamineRequestData info, string sessionID, ItemEventRouterResponse output) @@ -176,9 +176,9 @@ public class InventoryCallbacks( /// /// Handle ReadEncyclopedia /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse ReadEncyclopedia(PmcData pmcData, InventoryReadEncyclopediaRequestData info, string sessionID) @@ -189,10 +189,10 @@ public class InventoryCallbacks( /// /// Handle ApplyInventoryChanges /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse SortInventory(PmcData pmcData, InventorySortRequestData info, string sessionID, ItemEventRouterResponse output) @@ -203,10 +203,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse CreateMapMarker(PmcData pmcData, InventoryCreateMarkerRequestData info, string sessionID, ItemEventRouterResponse output) @@ -217,10 +217,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse DeleteMapMarker(PmcData pmcData, InventoryDeleteMarkerRequestData info, string sessionID, ItemEventRouterResponse output) @@ -231,10 +231,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse EditMapMarker(PmcData pmcData, InventoryEditMarkerRequestData info, string sessionID, ItemEventRouterResponse output) @@ -246,10 +246,10 @@ public class InventoryCallbacks( /// /// Handle OpenRandomLootContainer /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse OpenRandomLootContainer(PmcData pmcData, OpenRandomLootContainerRequestData info, string sessionID, @@ -261,10 +261,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse RedeemProfileReward(PmcData pmcData, RedeemProfileRequestData info, string sessionID, ItemEventRouterResponse output) @@ -274,11 +274,12 @@ public class InventoryCallbacks( } /// + /// Handle game/profile/items/moving SetFavoriteItems /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse SetFavoriteItem(PmcData pmcData, SetFavoriteItems info, string sessionID, ItemEventRouterResponse output) @@ -291,10 +292,10 @@ public class InventoryCallbacks( /// TODO: MOVE INTO QUEST CODE /// Handle game/profile/items/moving - QuestFail /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse FailQuest(PmcData pmcData, FailQuestRequestData info, string sessionID, ItemEventRouterResponse output) @@ -305,10 +306,10 @@ public class InventoryCallbacks( /// /// - /// + /// Players PMC profile /// - /// - /// + /// Session/player id + /// Client response /// public ItemEventRouterResponse PinOrLock(PmcData pmcData, PinOrLockItemRequest info, string sessionID, ItemEventRouterResponse output) diff --git a/Libraries/Core/Callbacks/LocationCallbacks.cs b/Libraries/Core/Callbacks/LocationCallbacks.cs index 2b14a456..830c0ebd 100644 --- a/Libraries/Core/Callbacks/LocationCallbacks.cs +++ b/Libraries/Core/Callbacks/LocationCallbacks.cs @@ -17,7 +17,7 @@ public class LocationCallbacks( /// /// /// - /// + /// Session/player id /// public string GetLocationData(string url, EmptyRequestData info, string sessionID) { @@ -29,7 +29,7 @@ public class LocationCallbacks( /// /// /// - /// + /// Session/player id /// public string GetAirdropLoot(string url, GetAirdropLootRequest info, string sessionID) { diff --git a/Libraries/Core/Callbacks/MatchCallbacks.cs b/Libraries/Core/Callbacks/MatchCallbacks.cs index 00fbe392..6b36183a 100644 --- a/Libraries/Core/Callbacks/MatchCallbacks.cs +++ b/Libraries/Core/Callbacks/MatchCallbacks.cs @@ -20,7 +20,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string UpdatePing(string url, UpdatePingRequestData info, string sessionID) { @@ -32,7 +32,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string ExitMatch(string url, EmptyRequestData info, string sessionID) { @@ -44,7 +44,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string ExitFromMenu(string url, EmptyRequestData info, string sessionID) { @@ -56,7 +56,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string GroupCurrent(string url, EmptyRequestData info, string sessionID) { @@ -73,7 +73,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string StartGroupSearch(string url, EmptyRequestData info, string sessionID) { @@ -85,7 +85,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string StopGroupSearch(string url, EmptyRequestData info, string sessionID) { @@ -97,7 +97,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string SendGroupInvite(string url, MatchGroupInviteSendRequest info, string sessionID) { @@ -109,7 +109,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string AcceptGroupInvite(string url, RequestIdRequest info, string sessionID) { @@ -126,7 +126,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string DeclineGroupInvite(string url, RequestIdRequest info, string sessionID) { @@ -138,7 +138,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string CancelGroupInvite(string url, RequestIdRequest info, string sessionID) { @@ -150,7 +150,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string TransferGroup(string url, MatchGroupTransferRequest info, string sessionID) { @@ -162,7 +162,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string CancelAllGroupInvite(string url, EmptyRequestData info, string sessionID) { @@ -174,7 +174,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string PutMetrics(string url, PutMetricsRequestData info, string sessionID) { @@ -186,7 +186,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string EventDisconnect(string url, PutMetricsRequestData info, string sessionID) { @@ -198,7 +198,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string ServerAvailable(string url, EmptyRequestData info, string sessionID) { @@ -210,7 +210,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string JoinMatch(string url, MatchGroupStartGameRequest info, string sessionID) { @@ -222,7 +222,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string GetMetrics(string url, EmptyRequestData info, string sessionID) { @@ -235,7 +235,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string GetGroupStatus(string url, MatchGroupStatusRequest info, string sessionID) { @@ -247,7 +247,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string DeleteGroup(string url, DeleteGroupRequest info, string sessionID) { @@ -260,7 +260,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string LeaveGroup(string url, EmptyRequestData info, string sessionID) { @@ -272,7 +272,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string RemovePlayerFromGroup(string url, MatchGroupPlayerRemoveRequest info, string sessionID) { @@ -284,7 +284,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string StartLocalRaid(string url, StartLocalRaidRequestData info, string sessionID) { @@ -296,7 +296,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string EndLocalRaid(string url, EndLocalRaidRequestData info, string sessionID) { @@ -309,7 +309,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string GetRaidConfiguration(string url, GetRaidConfigurationRequestData info, string sessionID) { @@ -322,7 +322,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string GetConfigurationByProfile(string url, GetRaidConfigurationRequestData info, string sessionID) { @@ -334,7 +334,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string RaidReady(string url, EmptyRequestData info, string sessionID) { @@ -346,7 +346,7 @@ public class MatchCallbacks( /// /// /// - /// + /// Session/player id /// public string NotRaidReady(string url, EmptyRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/NoteCallbacks.cs b/Libraries/Core/Callbacks/NoteCallbacks.cs index 76e29c6f..f4b874f3 100644 --- a/Libraries/Core/Callbacks/NoteCallbacks.cs +++ b/Libraries/Core/Callbacks/NoteCallbacks.cs @@ -12,9 +12,9 @@ public class NoteCallbacks(NoteController _noteController) /// /// Handle AddNote event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse AddNote(PmcData pmcData, NoteActionData info, string sessionID) { @@ -24,9 +24,9 @@ public class NoteCallbacks(NoteController _noteController) /// /// Handle EditNote event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse EditNote(PmcData pmcData, NoteActionData info, string sessionID) { @@ -36,9 +36,9 @@ public class NoteCallbacks(NoteController _noteController) /// /// Handle DeleteNote event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse DeleteNote(PmcData pmcData, NoteActionData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/NotifierCallbacks.cs b/Libraries/Core/Callbacks/NotifierCallbacks.cs index 274cf0c9..622f7ff3 100644 --- a/Libraries/Core/Callbacks/NotifierCallbacks.cs +++ b/Libraries/Core/Callbacks/NotifierCallbacks.cs @@ -51,7 +51,7 @@ public class NotifierCallbacks( /// /// /// - /// + /// Session/player id /// public string CreateNotifierChannel(string url, EmptyRequestData info, string sessionID) { @@ -63,7 +63,7 @@ public class NotifierCallbacks( /// /// /// - /// + /// Session/player id /// public string SelectProfile(string url, UIDRequestData info, string sessionID) { @@ -79,7 +79,7 @@ public class NotifierCallbacks( /// /// /// - /// + /// Session/player id /// public string Notify(string url, object info, string sessionID) { diff --git a/Libraries/Core/Callbacks/PrestigeCallbacks.cs b/Libraries/Core/Callbacks/PrestigeCallbacks.cs index 5ae586b4..8ed889fb 100644 --- a/Libraries/Core/Callbacks/PrestigeCallbacks.cs +++ b/Libraries/Core/Callbacks/PrestigeCallbacks.cs @@ -17,7 +17,7 @@ public class PrestigeCallbacks( /// /// /// - /// + /// Session/player id /// public string GetPrestige(string url, EmptyRequestData info, string sessionID) { @@ -29,7 +29,7 @@ public class PrestigeCallbacks( /// /// /// - /// + /// Session/player id /// public string ObtainPrestige(string url, ObtainPrestigeRequestList info, string sessionID) { diff --git a/Libraries/Core/Callbacks/QuestCallbacks.cs b/Libraries/Core/Callbacks/QuestCallbacks.cs index 784734d7..f29263a5 100644 --- a/Libraries/Core/Callbacks/QuestCallbacks.cs +++ b/Libraries/Core/Callbacks/QuestCallbacks.cs @@ -17,9 +17,9 @@ public class QuestCallbacks( /// /// Handle RepeatableQuestChange event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse ChangeRepeatableQuest(PmcData pmcData, RepeatableQuestChangeRequest info, string sessionID) { @@ -29,9 +29,9 @@ public class QuestCallbacks( /// /// Handle QuestAccept event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse AcceptQuest(PmcData pmcData, AcceptQuestRequestData info, string sessionID) { @@ -46,9 +46,9 @@ public class QuestCallbacks( /// /// Handle QuestComplete event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse CompleteQuest(PmcData pmcData, CompleteQuestRequestData info, string sessionID) { @@ -58,9 +58,9 @@ public class QuestCallbacks( /// /// Handle QuestHandover event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse HandoverQuest(PmcData pmcData, HandoverQuestRequestData info, string sessionID) { @@ -72,7 +72,7 @@ public class QuestCallbacks( /// /// /// - /// + /// Session/player id /// public string ListQuests(string url, ListQuestsRequestData info, string sessionID) { @@ -84,7 +84,7 @@ public class QuestCallbacks( /// /// /// - /// + /// Session/player id /// public string ActivityPeriods(string url, EmptyRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/RagfairCallbacks.cs b/Libraries/Core/Callbacks/RagfairCallbacks.cs index ff6cd74c..2e3f1b03 100644 --- a/Libraries/Core/Callbacks/RagfairCallbacks.cs +++ b/Libraries/Core/Callbacks/RagfairCallbacks.cs @@ -62,7 +62,7 @@ public class RagfairCallbacks( /// /// /// - /// + /// Session/player id /// public string Search(string url, SearchRequestData info, string sessionID) { @@ -74,7 +74,7 @@ public class RagfairCallbacks( /// /// /// - /// + /// Session/player id /// public string GetMarketPrice(string url, GetMarketPriceRequestData info, string sessionID) { @@ -84,9 +84,9 @@ public class RagfairCallbacks( /// /// Handle RagFairAddOffer event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse AddOffer(PmcData pmcData, AddOfferRequestData info, string sessionID) { @@ -96,9 +96,9 @@ public class RagfairCallbacks( /// /// Handle RagFairRemoveOffer event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse RemoveOffer(PmcData pmcData, RemoveOfferRequestData info, string sessionID) { @@ -108,9 +108,9 @@ public class RagfairCallbacks( /// /// Handle RagFairRenewOffer event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse ExtendOffer(PmcData pmcData, ExtendOfferRequestData info, string sessionID) { @@ -123,7 +123,7 @@ public class RagfairCallbacks( /// /// /// - /// + /// Session/player id /// public string GetFleaPrices(string url, EmptyRequestData info, string sessionID) { @@ -135,7 +135,7 @@ public class RagfairCallbacks( /// /// /// - /// + /// Session/player id /// public string SendReport(string url, SendRagfairReportRequestData info, string sessionID) { @@ -153,7 +153,7 @@ public class RagfairCallbacks( /// /// /// - /// + /// Session/player id /// public string GetFleaOfferById(string url, GetRagfairOfferByIdRequest info, string sessionID) { diff --git a/Libraries/Core/Callbacks/RepairCallbacks.cs b/Libraries/Core/Callbacks/RepairCallbacks.cs index 4ac608b2..3c9b8069 100644 --- a/Libraries/Core/Callbacks/RepairCallbacks.cs +++ b/Libraries/Core/Callbacks/RepairCallbacks.cs @@ -13,9 +13,9 @@ public class RepairCallbacks(RepairController _repairController) /// Handle TraderRepair event /// use trader to repair item /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse TraderRepair(PmcData pmcData, TraderRepairActionDataRequest info, string sessionID) { @@ -26,9 +26,9 @@ public class RepairCallbacks(RepairController _repairController) /// Handle Repair event /// Use repair kit to repair item /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse Repair(PmcData pmcData, RepairActionDataRequest info, string sessionID) { diff --git a/Libraries/Core/Callbacks/TradeCallbacks.cs b/Libraries/Core/Callbacks/TradeCallbacks.cs index 1cb6bbd3..20880cc4 100644 --- a/Libraries/Core/Callbacks/TradeCallbacks.cs +++ b/Libraries/Core/Callbacks/TradeCallbacks.cs @@ -12,9 +12,9 @@ public class TradeCallbacks(TradeController _tradeController) /// /// Handle client/game/profile/items/moving TradingConfirm event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse ProcessTrade(PmcData pmcData, ProcessBaseTradeRequestData info, string sessionID) { @@ -24,9 +24,9 @@ public class TradeCallbacks(TradeController _tradeController) /// /// Handle RagFairBuyOffer event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse ProcessRagfairTrade(PmcData pmcData, ProcessRagfairTradeRequestData info, string sessionID) { @@ -36,9 +36,9 @@ public class TradeCallbacks(TradeController _tradeController) /// /// Handle SellAllFromSavage event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse SellAllFromSavage(PmcData pmcData, SellScavItemsToFenceRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/TraderCallbacks.cs b/Libraries/Core/Callbacks/TraderCallbacks.cs index fbb62120..5efb9571 100644 --- a/Libraries/Core/Callbacks/TraderCallbacks.cs +++ b/Libraries/Core/Callbacks/TraderCallbacks.cs @@ -40,7 +40,7 @@ public class TraderCallbacks( /// /// /// - /// + /// Session/player id /// public string GetTraderSettings(string url, EmptyRequestData info, string sessionID) { @@ -52,7 +52,7 @@ public class TraderCallbacks( /// /// /// - /// + /// Session/player id /// public string GetTrader(string url, EmptyRequestData info, string sessionID) { @@ -65,7 +65,7 @@ public class TraderCallbacks( /// /// /// - /// + /// Session/player id /// public string GetAssort(string url, EmptyRequestData info, string sessionID) { @@ -78,7 +78,7 @@ public class TraderCallbacks( /// /// /// - /// + /// Session/player id /// public string GetModdedTraderData(string url, EmptyRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/WeatherCallbacks.cs b/Libraries/Core/Callbacks/WeatherCallbacks.cs index e216abdb..67b83916 100644 --- a/Libraries/Core/Callbacks/WeatherCallbacks.cs +++ b/Libraries/Core/Callbacks/WeatherCallbacks.cs @@ -16,7 +16,7 @@ public class WeatherCallbacks( /// /// /// - /// + /// Session/player id /// public string GetWeather(string url, EmptyRequestData info, string sessionID) { @@ -28,7 +28,7 @@ public class WeatherCallbacks( /// /// /// - /// + /// Session/player id /// public string GetLocalWeather(string url, EmptyRequestData info, string sessionID) { diff --git a/Libraries/Core/Callbacks/WishlistCallbacks.cs b/Libraries/Core/Callbacks/WishlistCallbacks.cs index 86a0026e..cd9c5e2b 100644 --- a/Libraries/Core/Callbacks/WishlistCallbacks.cs +++ b/Libraries/Core/Callbacks/WishlistCallbacks.cs @@ -12,9 +12,9 @@ public class WishlistCallbacks(WishlistController _wishlistController) /// /// Handle AddToWishList event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse AddToWishlist(PmcData pmcData, AddToWishlistRequest info, string sessionID) { @@ -24,9 +24,9 @@ public class WishlistCallbacks(WishlistController _wishlistController) /// /// Handle RemoveFromWishList event /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse RemoveFromWishlist(PmcData pmcData, RemoveFromWishlistRequest info, string sessionID) { @@ -36,9 +36,9 @@ public class WishlistCallbacks(WishlistController _wishlistController) /// /// Handle ChangeWishlistItemCategory /// - /// + /// Players PMC profile /// - /// + /// Session/player id /// public ItemEventRouterResponse ChangeWishlistItemCategory(PmcData pmcData, ChangeWishlistItemCategoryRequest info, string sessionID) { diff --git a/Libraries/Core/Context/ApplicationContext.cs b/Libraries/Core/Context/ApplicationContext.cs index cfc6c979..93446032 100644 --- a/Libraries/Core/Context/ApplicationContext.cs +++ b/Libraries/Core/Context/ApplicationContext.cs @@ -5,8 +5,8 @@ namespace Core.Context; [Injectable(InjectionType.Singleton)] public class ApplicationContext { - private const short MaxSavedValues = 10; - private readonly Dictionary> variables = new(); + protected const short MaxSavedValues = 10; + protected readonly Dictionary> variables = new(); private readonly Lock variablesLock = new(); public ContextVariable? GetLatestValue(ContextVariableType type) diff --git a/Libraries/Core/Controllers/AchievementController.cs b/Libraries/Core/Controllers/AchievementController.cs index 9a10c551..f2e0ae2a 100644 --- a/Libraries/Core/Controllers/AchievementController.cs +++ b/Libraries/Core/Controllers/AchievementController.cs @@ -16,6 +16,11 @@ public class AchievementController( { protected CoreConfig coreConfig = configServer.GetConfig(); + /// + /// Get base achievements + /// + /// Session/player id + /// public virtual GetAchievementsResponse GetAchievements(string sessionID) { return new GetAchievementsResponse @@ -24,6 +29,11 @@ public class AchievementController( }; } + /// + /// Shows % of 'other' players who've completed each achievement + /// + /// Session/Player id + /// CompletedAchievementsResponse public virtual CompletedAchievementsResponse GetAchievementStatics(string sessionId) { var stats = new Dictionary(); diff --git a/Libraries/Core/Controllers/BotController.cs b/Libraries/Core/Controllers/BotController.cs index 77271abb..5c725a62 100644 --- a/Libraries/Core/Controllers/BotController.cs +++ b/Libraries/Core/Controllers/BotController.cs @@ -40,11 +40,11 @@ public class BotController( private readonly BotConfig _botConfig = _configServer.GetConfig(); private readonly PmcConfig _pmcConfig = _configServer.GetConfig(); - /** - * Return the number of bot load-out varieties to be generated - * @param type bot Type we want the load-out gen count for - * @returns number of bots to generate - */ + /// + /// Return the number of bot load-out varieties to be generated + /// + /// bot Type we want the load-out gen count for + /// number of bots to generate public int GetBotPresetGenerationLimit(string type) { @@ -59,11 +59,25 @@ public class BotController( } + /// + /// Handle singleplayer/settings/bot/difficulty + /// Get the core.json difficulty settings from database/bots + /// + /// public Dictionary GetBotCoreDifficulty() { return _databaseService.GetBots().Core!; } + /// + /// Get bot difficulty settings + /// Adjust PMC settings to ensure they engage the correct bot types + /// + /// what bot the server is requesting settings for + /// difficulty level server requested settings for + /// OPTIONAL - applicationContext Data stored at start of raid + /// OPTIONAL - should raid settings chosen pre-raid be ignored + /// Difficulty object public DifficultyCategories GetBotDifficulty(string type, string diffLevel, GetRaidConfigurationRequestData? raidConfig, bool ignoreRaidSettings = false) { var difficulty = diffLevel.ToLower(); @@ -145,14 +159,27 @@ public class BotController( return result; } - public List Generate(string sessionId, GenerateBotsRequestData info) + /// + /// Generate bots for a wave + /// + /// Session/Player id + /// + /// List of bots + public List Generate(string sessionId, GenerateBotsRequestData request) { var pmcProfile = _profileHelper.GetPmcProfile(sessionId); - return GenerateBotWaves(info, pmcProfile, sessionId); + return GenerateBotWaves(request, pmcProfile, sessionId); } - private List GenerateBotWaves(GenerateBotsRequestData request, PmcData? pmcProfile, string sessionId) + /// + /// Generate bots for passed in wave data + /// + /// + /// Player generating bots + /// Session/Player id + /// List of generated bots + protected List GenerateBotWaves(GenerateBotsRequestData request, PmcData? pmcProfile, string sessionId) { var result = new List(); @@ -187,13 +214,20 @@ public class BotController( return result; } - private List GenerateBotWave(GenerateCondition condition, BotGenerationDetails botGenerationDetails, string sessionId) + /// + /// Generate bots for a single wave request + /// + /// + /// + /// Session/Player id + /// + protected List GenerateBotWave(GenerateCondition generateRequest, BotGenerationDetails botGenerationDetails, string sessionId) { - var isEventBot = condition.Role?.ToLower().Contains("event"); + var isEventBot = generateRequest.Role?.ToLower().Contains("event"); if (isEventBot.GetValueOrDefault(false)) { // Add eventRole data + reassign role property to be base type - botGenerationDetails.EventRole = condition.Role; + botGenerationDetails.EventRole = generateRequest.Role; botGenerationDetails.Role = _seasonalEventService.GetBaseRoleForEventBot( botGenerationDetails.EventRole ); @@ -241,7 +275,11 @@ public class BotController( return results; } - private GetRaidConfigurationRequestData? GetMostRecentRaidSettings() + /// + /// Pull raid settings from Application context + /// + /// GetRaidConfigurationRequestData if it exists + protected GetRaidConfigurationRequestData? GetMostRecentRaidSettings() { var raidSettings = _applicationContext .GetLatestValue(ContextVariableType.RAID_CONFIGURATION) @@ -255,12 +293,27 @@ public class BotController( return raidSettings; } - private MinMax GetPmcLevelRangeForMap(string? location) + /// + /// Get min/max level range values for a specific map + /// + /// Map name e.g. factory4_day + /// MinMax values + protected MinMax GetPmcLevelRangeForMap(string? location) { return _pmcConfig.LocationSpecificPmcLevelOverride!.GetValueOrDefault(location?.ToLower() ?? "", null); } - private BotGenerationDetails GetBotGenerationDetailsForWave( + /// + /// Create a BotGenerationDetails for the bot generator to use + /// + /// Data from client defining bot type and difficulty + /// Player who is generating bots + /// Should all PMCs have same name as player + /// Settings chosen pre-raid by player in client + /// How many bots to generate + /// Force bot being generated to be a PMC + /// BotGenerationDetails + protected BotGenerationDetails GetBotGenerationDetailsForWave( GenerateCondition condition, PmcData? pmcProfile, bool allPmcsHaveSameNameAsPlayer, @@ -285,6 +338,12 @@ public class BotController( }; } + /// + /// Get the max number of bots allowed on a map + /// Looks up location player is entering when getting cap value + /// + /// The map location cap was requested for + /// bot cap for map public int GetBotCap(string location) { var botCap = _botConfig.MaxBotCap.FirstOrDefault(x => @@ -299,6 +358,10 @@ public class BotController( return botCap.Value; } + /// + /// Get weights for what each bot type should use as a brain - used by client + /// + /// public AiBotBrainTypes GetAiBotBrainTypes() { return new AiBotBrainTypes diff --git a/Libraries/Core/Controllers/BuildController.cs b/Libraries/Core/Controllers/BuildController.cs index 11346266..54d23fdf 100644 --- a/Libraries/Core/Controllers/BuildController.cs +++ b/Libraries/Core/Controllers/BuildController.cs @@ -29,7 +29,7 @@ public class BuildController( /// /// Handle client/handbook/builds/my/list /// - /// + /// Session/player id /// public UserBuilds? GetUserBuilds(string sessionID) { @@ -86,7 +86,7 @@ public class BuildController( /// /// Handle client/builds/weapon/save /// - /// + /// Session/Player id /// public void SaveWeaponBuild(string sessionId, PresetBuildActionRequestData body) { @@ -126,7 +126,7 @@ public class BuildController( /// /// Handle client/builds/equipment/save event /// - /// + /// Session/player id /// public void SaveEquipmentBuild(string sessionID, PresetBuildActionRequestData request) { @@ -169,7 +169,7 @@ public class BuildController( /// /// Handle client/builds/delete /// - /// + /// Session/Player id /// public void RemoveBuild(string sessionId, RemoveBuildRequestData request) { @@ -182,7 +182,7 @@ public class BuildController( /// /// Handle client/builds/magazine/save /// - /// + /// Session/Player id /// public void CreateMagazineTemplate(string sessionId, SetMagazineRequest request) { @@ -213,10 +213,12 @@ public class BuildController( } /// + /// Handle client/builds/delete + /// Remove build from players profile /// /// - /// - private void RemovePlayerBuild(string idToRemove, string sessionID) + /// Session/Player id + protected void RemovePlayerBuild(string idToRemove, string sessionID) { var profile = _saveServer.GetProfile(sessionID); var weaponBuilds = profile.UserBuildData.WeaponBuilds; diff --git a/Libraries/Core/Controllers/CustomizationController.cs b/Libraries/Core/Controllers/CustomizationController.cs index 5789c035..88fd13f9 100644 --- a/Libraries/Core/Controllers/CustomizationController.cs +++ b/Libraries/Core/Controllers/CustomizationController.cs @@ -120,7 +120,13 @@ public class CustomizationController( return output; } - private bool OutfitAlreadyPurchased(object suitId, string sessionId) + /// + /// Has an outfit been purchased by a player + /// + /// clothing id + /// Session id of profile to check for clothing in + /// true if already purchased + protected bool OutfitAlreadyPurchased(object suitId, string sessionId) { var suits = _saveServer.GetProfile(sessionId).Suits; @@ -132,7 +138,13 @@ public class CustomizationController( return suits.Contains(suitId); } - private Suit? GetTraderClothingOffer(string sessionId, string? offerId) + /// + /// Get clothing offer from trader by suit id + /// + /// Session/Player id + /// + /// Suit + protected Suit? GetTraderClothingOffer(string sessionId, string? offerId) { var foundSuit = GetAllTraderSuits(sessionId).FirstOrDefault(s => s.Id == offerId); if (foundSuit is null) @@ -150,7 +162,7 @@ public class CustomizationController( /// Player profile /// Clothing purchased /// Client response - private void PayForClothingItems(string sessionId, PmcData pmcData, + protected void PayForClothingItems(string sessionId, PmcData pmcData, List? itemsToPayForClothingWith, ItemEventRouterResponse output) { @@ -184,10 +196,11 @@ public class CustomizationController( } /// + /// Get all suits from Traders /// - /// + /// Session/Player id /// - private List GetAllTraderSuits(string sessionId) + protected List GetAllTraderSuits(string sessionId) { var traders = _databaseService.GetTraders(); var result = new List(); @@ -206,7 +219,7 @@ public class CustomizationController( /// /// Handle client/hideout/customization/offer/list /// - /// + /// Session/Player id /// /// public HideoutCustomisation GetHideoutCustomisation(string sessionId, EmptyRequestData info) @@ -217,7 +230,7 @@ public class CustomizationController( /// /// Handle client/customization/storage /// - /// + /// Session/Player id /// /// public List GetCustomisationStorage( @@ -240,9 +253,9 @@ public class CustomizationController( /// /// Handle CustomizationSet event /// - /// + /// Session/Player id /// - /// + /// Players PMC profile /// public ItemEventRouterResponse SetCustomisation(string sessionId, CustomizationSetRequest request, PmcData pmcData) { @@ -270,7 +283,7 @@ public class CustomizationController( /// /// Suit to apply to profile /// Profile to update - private void ApplyClothingItemToProfile(CustomizationSetOption customisation, PmcData pmcData) + protected void ApplyClothingItemToProfile(CustomizationSetOption customisation, PmcData pmcData) { var dbSuit = _databaseService.GetCustomization()[customisation.Id!]; diff --git a/Libraries/Core/Controllers/DialogueController.cs b/Libraries/Core/Controllers/DialogueController.cs index 55f2f06e..cee99f30 100644 --- a/Libraries/Core/Controllers/DialogueController.cs +++ b/Libraries/Core/Controllers/DialogueController.cs @@ -95,7 +95,7 @@ public class DialogueController( }; } - private List GetActiveChatBots() + protected List GetActiveChatBots() { var activeBots = new List(); @@ -234,7 +234,7 @@ public class DialogueController( /// Player profile /// get dialog request /// Dialogue - private Dialogue GetDialogByIdFromProfile( + protected Dialogue GetDialogByIdFromProfile( SptProfile profile, GetMailDialogViewRequestData request) { @@ -279,7 +279,7 @@ public class DialogueController( /// Player profile /// The participants of the mail /// UserDialogInfo list - private List GetProfilesForMail(SptProfile fullProfile, List? userDialogs) + protected List GetProfilesForMail(SptProfile fullProfile, List? userDialogs) { List result = []; if (userDialogs is null) @@ -322,7 +322,7 @@ public class DialogueController( /// Session id /// Dialog id /// Count of messages with attachments - private int GetUnreadMessagesWithAttachmentsCount( + protected int GetUnreadMessagesWithAttachmentsCount( string sessionId, string dialogueId) { @@ -358,7 +358,7 @@ public class DialogueController( /// /// Messages to check /// true if uncollected rewards found - private bool MessagesHaveUncollectedRewards(List messages) + protected bool MessagesHaveUncollectedRewards(List messages) { return messages.Any(message => (message.Items?.Data?.Count ?? 0) > 0); } @@ -399,7 +399,7 @@ public class DialogueController( /// /// /// - /// + /// Session/Player id public virtual void SetDialoguePin(string? dialogueId, bool shouldPin, string sessionId) { var dialog = _dialogueHelper.GetDialogsForProfile(sessionId).GetValueOrDefault(dialogueId); @@ -490,7 +490,7 @@ public class DialogueController( /// /// handle client/mail/msg/send /// - /// + /// Session/Player id /// /// public virtual string SendMessage( @@ -513,7 +513,7 @@ public class DialogueController( /// /// Messages to parse /// messages with items to collect - private List GetMessageWithAttachments(List messages) + protected List GetMessageWithAttachments(List messages) { return messages.Where(message => (message.Items?.Data?.Count ?? 0) > 0).ToList(); } @@ -522,7 +522,7 @@ public class DialogueController( /// Delete expired items from all messages in player profile. triggers when updating traders. /// /// Session id - private void RemoveExpiredItemsFromMessages(string sessionId) + protected void RemoveExpiredItemsFromMessages(string sessionId) { foreach (var dialogueId in _dialogueHelper.GetDialogsForProfile(sessionId)) { @@ -535,7 +535,7 @@ public class DialogueController( /// /// Session id /// Dialog id - private void RemoveExpiredItemsFromMessage(string sessionId, string dialogueId) + protected void RemoveExpiredItemsFromMessage(string sessionId, string dialogueId) { var dialogs = _dialogueHelper.GetDialogsForProfile(sessionId); if (!dialogs.TryGetValue(dialogueId, out var dialog)) @@ -562,6 +562,12 @@ public class DialogueController( return _timeUtil.GetTimeStamp() > message.DateTime + (message.MaxStorageTime ?? 0); } + /// + /// Handle client/friend/request/send + /// + /// Session/player id + /// Sent friend request + /// public virtual FriendRequestSendResponse SendFriendRequest(string sessionID, FriendRequestData request) { // To avoid needing to jump between profiles, auto-accept all friend requests @@ -607,6 +613,11 @@ public class DialogueController( }; } + /// + /// Handle client/friend/delete + /// + /// Session/player id + /// Sent delete friend request public virtual void DeleteFriend(string sessionID, DeleteFriendRequest request) { var profile = _saveServer.GetProfile(sessionID); diff --git a/Libraries/Core/Controllers/GameController.cs b/Libraries/Core/Controllers/GameController.cs index 866000ab..3b2154c3 100644 --- a/Libraries/Core/Controllers/GameController.cs +++ b/Libraries/Core/Controllers/GameController.cs @@ -57,7 +57,7 @@ public class GameController( /// /// /// - /// + /// Session/Player id /// public void GameStart(string url, EmptyRequestData info, string? sessionId, long startTimeStampMs) { @@ -158,8 +158,8 @@ public class GameController( /// /// Handle client/game/config /// - /// - /// + /// Session/Player id + /// GameConfigResponse public GameConfigResponse GetGameConfig(string sessionId) { var profile = _profileHelper.GetPmcProfile(sessionId); @@ -204,7 +204,7 @@ public class GameController( /// /// Handle client/game/mode /// - /// + /// Session/Player id /// /// public GameModeResponse GetGameMode( @@ -221,7 +221,7 @@ public class GameController( /// /// Handle client/server/list /// - /// + /// Session/Player id /// public List GetServer(string sessionId) { @@ -238,7 +238,7 @@ public class GameController( /// /// Handle client/match/group/current /// - /// + /// Session/Player id /// public CurrentGroupResponse GetCurrentGroup(string sessionId) { @@ -252,7 +252,7 @@ public class GameController( /// /// Handle client/checkVersion /// - /// + /// Session/Player id /// public CheckVersionResponse GetValidGameVersion(string sessionId) { @@ -266,7 +266,7 @@ public class GameController( /// /// Handle client/game/keepalive /// - /// + /// Session/Player id /// public GameKeepAliveResponse GetKeepAlive(string sessionId) { @@ -281,7 +281,7 @@ public class GameController( /// /// Handle singleplayer/settings/getRaidTime /// - /// + /// Session/Player id /// /// public GetRaidTimeResponse GetRaidTime(string sessionId, GetRaidTimeRequest request) @@ -291,7 +291,7 @@ public class GameController( /// /// - /// + /// Session/Player id /// public SurveyResponseData GetSurvey(string sessionId) { @@ -302,7 +302,7 @@ public class GameController( /// Players set botReload to a high value and don't expect the crazy fast reload speeds, give them a warn about it /// /// Player profile - private void WarnOnActiveBotReloadSkill(PmcData pmcProfile) + protected void WarnOnActiveBotReloadSkill(PmcData pmcProfile) { var botReloadSkill = _profileHelper.GetSkillFromProfile(pmcProfile, SkillTypes.BotReload); if (botReloadSkill?.Progress > 0) @@ -315,7 +315,7 @@ public class GameController( /// When player logs in, iterate over all active effects and reduce timer /// /// Profile to adjust values for - private void UpdateProfileHealthValues(PmcData pmcProfile) + protected void UpdateProfileHealthValues(PmcData pmcProfile) { var healthLastUpdated = pmcProfile.Health?.UpdateTime; var currentTimeStamp = _timeUtil.GetTimeStamp(); @@ -431,7 +431,7 @@ public class GameController( /// Send starting gifts to profile after x days /// /// Profile to add gifts to - private void SendPraporGiftsToNewProfiles(PmcData pmcProfile) + protected void SendPraporGiftsToNewProfiles(PmcData pmcProfile) { var timeStampProfileCreated = pmcProfile.Info?.RegistrationDate; var oneDaySeconds = _timeUtil.GetHoursAsSeconds(24); @@ -463,7 +463,7 @@ public class GameController( /// Get a list of installed mods and save their details to the profile being used /// /// Profile to add mod details to - private void SaveActiveModsToProfile(SptProfile fullProfile) + protected void SaveActiveModsToProfile(SptProfile fullProfile) { fullProfile.SptData!.Mods ??= []; var mods = _applicationContext?.GetLatestValue(ContextVariableType.LOADED_MOD_ASSEMBLIES).GetValue>(); @@ -498,7 +498,7 @@ public class GameController( /// Add the logged in players name to PMC name pool /// /// Profile of player to get name from - private void AddPlayerToPmcNames(PmcData pmcProfile) + protected void AddPlayerToPmcNames(PmcData pmcProfile) { var playerName = pmcProfile.Info?.Nickname; if (playerName is not null) @@ -534,7 +534,7 @@ public class GameController( /// Check for a dialog with the key 'undefined', and remove it /// /// Profile to check for dialog in - private void CheckForAndRemoveUndefinedDialogues(SptProfile fullProfile) + protected void CheckForAndRemoveUndefinedDialogues(SptProfile fullProfile) { if (fullProfile.DialogueRecords!.TryGetValue("undefined", out _)) { @@ -545,7 +545,7 @@ public class GameController( /// /// /// - private void LogProfileDetails(SptProfile fullProfile) + protected void LogProfileDetails(SptProfile fullProfile) { if (_logger.IsLogEnabled(LogLevel.Debug)) { diff --git a/Libraries/Core/Controllers/HealthController.cs b/Libraries/Core/Controllers/HealthController.cs index 3d8c576f..219aeb9a 100644 --- a/Libraries/Core/Controllers/HealthController.cs +++ b/Libraries/Core/Controllers/HealthController.cs @@ -128,7 +128,7 @@ public class HealthController( /// /// Player profile /// Eat request - /// Session id + /// Session id /// ItemEventRouterResponse public ItemEventRouterResponse OffRaidEat( PmcData pmcData, @@ -200,6 +200,13 @@ public class HealthController( return output; } + /// + /// Apply effects to profile from consumable used + /// + /// Hydration/Energy + /// Properties of consumed item + /// Single use item + /// Client request protected void ApplyEdibleEffect(CurrentMinMax bodyValue, EffectsHealthProps consumptionDetails, bool foodIsSingleUse, OffraidEatRequestData request) { @@ -233,8 +240,8 @@ public class HealthController( /// Occurs on post-raid healing page /// /// player profile - /// Request data from client - /// Session id + /// Request data from client + /// Session id /// public ItemEventRouterResponse HealthTreatment( PmcData pmcData, @@ -299,7 +306,7 @@ public class HealthController( /// applies skills from hideout workout. /// /// Player profile - /// Request data + /// Request data /// session id public void ApplyWorkoutChanges( PmcData? pmcData, diff --git a/Libraries/Core/Controllers/HideoutController.cs b/Libraries/Core/Controllers/HideoutController.cs index 8d8b6aa8..8ade4843 100644 --- a/Libraries/Core/Controllers/HideoutController.cs +++ b/Libraries/Core/Controllers/HideoutController.cs @@ -57,6 +57,14 @@ public class HideoutController( protected HideoutConfig _hideoutConfig = _configServer.GetConfig(); + /// + /// Handle HideoutUpgrade event + /// Start a hideout area upgrade + /// + /// Player profile + /// Start upgrade request + /// Session/player id + /// Client response public void StartUpgrade(PmcData pmcData, HideoutUpgradeRequestData request, string sessionID, ItemEventRouterResponse output) { var items = request.Items.Select( @@ -138,6 +146,14 @@ public class HideoutController( } } + /// + /// Handle HideoutUpgradeComplete event + /// Complete a hideout area upgrade + /// + /// Player profile + /// Completed upgrade request + /// Session/player id + /// Client response public void UpgradeComplete(PmcData pmcData, HideoutUpgradeCompleteRequestData request, string sessionID, ItemEventRouterResponse output) { var hideout = _databaseService.GetHideout(); @@ -215,7 +231,11 @@ public class HideoutController( ); } - private void SetWallVisibleIfPrereqsMet(PmcData pmcData) + /// + /// Upgrade wall status to visible in profile if medstation/water collector are both level 1 + /// + /// Player profile + protected void SetWallVisibleIfPrereqsMet(PmcData pmcData) { var medStation = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.MEDSTATION); var waterCollector = pmcData.Hideout.Areas.FirstOrDefault(area => area.Type == HideoutAreas.WATER_COLLECTOR); @@ -229,7 +249,16 @@ public class HideoutController( } } - private void AddContainerImprovementToProfile(ItemEventRouterResponse output, string sessionID, PmcData pmcData, BotHideoutArea profileParentHideoutArea, + /// + /// Add a stash upgrade to profile + /// + /// Client response + /// + /// Players PMC profile + /// + /// + /// + protected void AddContainerImprovementToProfile(ItemEventRouterResponse output, string sessionID, PmcData pmcData, BotHideoutArea profileParentHideoutArea, HideoutArea dbHideoutArea, Stage hideoutStage) { // Add key/value to `hideoutAreaStashes` dictionary - used to link hideout area to inventory stash by its id @@ -281,7 +310,14 @@ public class HideoutController( } } - private void AddUpdateInventoryItemToProfile(string sessionId, PmcData pmcData, HideoutArea dbHideoutArea, Stage hideoutStage) + /// + /// Add an inventory item to profile from a hideout area stage data + /// + /// Session/Player id + /// Players PMC profile + /// Hideout area from db being upgraded + /// Stage area upgraded to + protected void AddUpdateInventoryItemToProfile(string sessionId, PmcData pmcData, HideoutArea dbHideoutArea, Stage hideoutStage) { var existingInventoryItem = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == dbHideoutArea.Id); if (existingInventoryItem is not null) @@ -301,7 +337,15 @@ public class HideoutController( pmcData.Inventory.Items.Add(newContainerItem); } - private void AddContainerUpgradeToClientOutput(string sessionID, HideoutAreas? areaType, HideoutArea hideoutDbData, Stage hideoutStage, + /// + /// Include container upgrade in client response + /// + /// + /// + /// + /// + /// Client response + protected void AddContainerUpgradeToClientOutput(string sessionID, HideoutAreas? areaType, HideoutArea hideoutDbData, Stage hideoutStage, ItemEventRouterResponse output) { if (output.ProfileChanges[sessionID].ChangedHideoutStashes is null) @@ -317,6 +361,14 @@ public class HideoutController( }; } + /// + /// Handle HideoutPutItemsInAreaSlots + /// Create item in hideout slot item array, remove item from player inventory + /// + /// Players PMC profile + /// request from client to place item in area slot + /// + /// ItemEventRouterResponse public ItemEventRouterResponse PutItemsInAreaSlots(PmcData pmcData, HideoutPutItemInRequestData addItemToHideoutRequest, string sessionID) { var output = _eventOutputHolder.GetOutput(sessionID); @@ -395,6 +447,14 @@ public class HideoutController( return output; } + /// + /// Handle HideoutTakeItemsFromAreaSlots event + /// Remove item from hideout area and place into player inventory + /// + /// Players PMC profile + /// Take item out of area request + /// + /// ItemEventRouterResponse public ItemEventRouterResponse TakeItemsFromAreaSlots(PmcData pmcData, HideoutTakeItemOutRequestData request, string sessionID) { var output = _eventOutputHolder.GetOutput(sessionID); @@ -431,7 +491,16 @@ public class HideoutController( ); } - private ItemEventRouterResponse RemoveResourceFromArea(string sessionID, PmcData pmcData, HideoutTakeItemOutRequestData removeResourceRequest, + /// + /// Find resource item in hideout area, add copy to player inventory, remove Item from hideout slot + /// + /// + /// Players PMC profile + /// client request + /// Client response + /// Area fuel is being removed from + /// ItemEventRouterResponse + protected ItemEventRouterResponse RemoveResourceFromArea(string sessionID, PmcData pmcData, HideoutTakeItemOutRequestData removeResourceRequest, ItemEventRouterResponse output, BotHideoutArea hideoutArea) { var slotIndexToRemove = removeResourceRequest?.Slots.FirstOrDefault(); @@ -475,6 +544,14 @@ public class HideoutController( return output; } + /// + /// Handle HideoutToggleArea event + /// Toggle area on/off + /// + /// Players PMC profile + /// Toggle area request + /// + /// ItemEventRouterResponse public ItemEventRouterResponse ToggleArea(PmcData pmcData, HideoutToggleAreaRequestData request, string sessionID) { var output = _eventOutputHolder.GetOutput(sessionID); @@ -494,15 +571,22 @@ public class HideoutController( return output; } - public ItemEventRouterResponse SingleProductionStart(PmcData pmcData, HideoutSingleProductionStartRequestData body, string sessionID) + /// + /// Handle HideoutSingleProductionStart event + /// + /// Players PMC profile + /// + /// + /// ItemEventRouterResponse + public ItemEventRouterResponse SingleProductionStart(PmcData pmcData, HideoutSingleProductionStartRequestData request, string sessionID) { // Start production - _hideoutHelper.RegisterProduction(pmcData, body, sessionID); + _hideoutHelper.RegisterProduction(pmcData, request, sessionID); // Find the recipe of the production var recipe = _databaseService .GetHideout() - .Production.Recipes.FirstOrDefault(production => production.Id == body.RecipeId); + .Production.Recipes.FirstOrDefault(production => production.Id == request.RecipeId); // Find the actual amount of items we need to remove because body can send weird data var recipeRequirementsClone = _cloner.Clone( @@ -511,8 +595,8 @@ public class HideoutController( List itemsToDelete = []; var output = _eventOutputHolder.GetOutput(sessionID); - itemsToDelete.AddRange(body.Tools); - itemsToDelete.AddRange(body.Items); + itemsToDelete.AddRange(request.Tools); + itemsToDelete.AddRange(request.Items); foreach (var itemToDelete in itemsToDelete) { @@ -540,11 +624,19 @@ public class HideoutController( return output; } - public ItemEventRouterResponse ScavCaseProductionStart(PmcData pmcData, HideoutScavCaseStartRequestData body, string sessionID) + /// + /// Handle HideoutScavCaseProductionStart event + /// Handles event after clicking 'start' on the scav case hideout page + /// + /// Players PMC profile + /// + /// + /// ItemEventRouterResponse + public ItemEventRouterResponse ScavCaseProductionStart(PmcData pmcData, HideoutScavCaseStartRequestData request, string sessionID) { var output = _eventOutputHolder.GetOutput(sessionID); - foreach (var requestedItem in body.Items) + foreach (var requestedItem in request.Items) { var inventoryItem = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == requestedItem.Id); if (inventoryItem is null) @@ -568,11 +660,11 @@ public class HideoutController( } } - var recipe = _databaseService.GetHideout().Production?.ScavRecipes?.FirstOrDefault(r => r.Id == body.RecipeId); + var recipe = _databaseService.GetHideout().Production?.ScavRecipes?.FirstOrDefault(r => r.Id == request.RecipeId); if (recipe is null) { _logger.Error( - _localisationService.GetText("hideout-unable_to_find_scav_case_recipie_in_database", body.RecipeId) + _localisationService.GetText("hideout-unable_to_find_scav_case_recipie_in_database", request.RecipeId) ); return _httpResponseUtil.AppendErrorToOutput(output); @@ -592,17 +684,23 @@ public class HideoutController( var modifiedScavCaseTime = GetScavCaseTime(pmcData, adjustedCraftTime); - pmcData.Hideout.Production[body.RecipeId] = _hideoutHelper.InitProduction( - body.RecipeId, + pmcData.Hideout.Production[request.RecipeId] = _hideoutHelper.InitProduction( + request.RecipeId, (int) (_profileHelper.IsDeveloperAccount(sessionID) ? 40 : modifiedScavCaseTime), false ); - pmcData.Hideout.Production[body.RecipeId].SptIsScavCase = true; + pmcData.Hideout.Production[request.RecipeId].SptIsScavCase = true; return output; } - private double? GetScavCaseTime(PmcData pmcData, double? productionTime) + /// + /// Adjust scav case time based on fence standing + /// + /// Players PMC profile + /// Time to complete scav case in seconds + /// Adjusted scav case time in seconds + protected double? GetScavCaseTime(PmcData pmcData, double? productionTime) { var fenceLevel = _fenceService.GetFenceInfo(pmcData); if (fenceLevel is null) @@ -613,6 +711,12 @@ public class HideoutController( return productionTime * fenceLevel.ScavCaseTimeModifier; } + /// + /// Add generated scav case rewards to player profile + /// + /// Players PMC profile + /// reward items to add to profile + /// recipe id to save into Production dict public void AddScavCaseRewardsToProfile(PmcData pmcData, List rewards, string recipeId) { pmcData.Hideout.Production[$"ScavCase{recipeId}"] = new Production @@ -622,6 +726,13 @@ public class HideoutController( }; } + /// + /// Start production of continuously created item + /// + /// Players PMC profile + /// Continuous production request + /// + /// ItemEventRouterResponse public ItemEventRouterResponse ContinuousProductionStart(PmcData pmcData, HideoutContinuousProductionStartRequestData request, string sessionID) { _hideoutHelper.RegisterProduction(pmcData, request, sessionID); @@ -629,6 +740,14 @@ public class HideoutController( return _eventOutputHolder.GetOutput(sessionID); } + /// + /// Handle HideoutTakeProduction event + /// Take completed item out of hideout area and place into player inventory + /// + /// Players PMC profile + /// Remove production from area request + /// + /// public ItemEventRouterResponse TakeProduction(PmcData pmcData, HideoutTakeProductionRequestData request, string sessionID) { var output = _eventOutputHolder.GetOutput(sessionID); @@ -669,7 +788,15 @@ public class HideoutController( return _httpResponseUtil.AppendErrorToOutput(output); } - private void HandleRecipe(string sessionID, HideoutProduction recipe, PmcData pmcData, HideoutTakeProductionRequestData request, + /// + /// Take recipe-type production out of hideout area and place into player inventory + /// + /// + /// Completed recipe of item + /// Players PMC profile + /// Remove production from area request + /// Client response + protected void HandleRecipe(string sessionID, HideoutProduction recipe, PmcData pmcData, HideoutTakeProductionRequestData request, ItemEventRouterResponse output) { // Validate that we have a matching production @@ -873,6 +1000,12 @@ public class HideoutController( } } + /// + /// Ensure non-stackable items are 'unstacked' + /// + /// + /// + /// Reward is a preset protected void HandleStackableState(HideoutProduction recipe, List> itemAndChildrenToSendToPlayer, bool rewardIsPreset) { var rewardIsStackable = _itemHelper.IsItemTplStackable(recipe.EndProduct); @@ -922,6 +1055,11 @@ public class HideoutController( } } + /// + /// + /// + /// + /// protected List> HandlePresetReward(HideoutProduction recipe) { var defaultPreset = _presetHelper.GetDefaultPreset(recipe.EndProduct); @@ -935,7 +1073,13 @@ public class HideoutController( return [presetAndMods]; } - private TaskConditionCounter GetHoursCraftingTaskConditionCounter(PmcData pmcData, HideoutProduction recipe) + /// + /// Get the "CounterHoursCrafting" TaskConditionCounter from a profile + /// + /// Profile to get counter from + /// Recipe being crafted + /// TaskConditionCounter + protected TaskConditionCounter GetHoursCraftingTaskConditionCounter(PmcData pmcData, HideoutProduction recipe) { if (!pmcData.TaskConditionCounters.TryGetValue(NameTaskConditionCountersCraftingId, out _)) // Doesn't exist, create @@ -952,7 +1096,14 @@ public class HideoutController( return pmcData.TaskConditionCounters[NameTaskConditionCountersCraftingId]; } - private void HandleScavCase(string sessionID, PmcData pmcData, HideoutTakeProductionRequestData request, ItemEventRouterResponse output) + /// + /// Handles generating scav case rewards and sending to player inventory + /// + /// + /// Players PMC profile + /// Get rewards from scavcase craft request + /// Client response + protected void HandleScavCase(string sessionID, PmcData pmcData, HideoutTakeProductionRequestData request, ItemEventRouterResponse output) { var ongoingProductions = pmcData.Hideout.Production; string? prodId = null; @@ -1007,6 +1158,14 @@ public class HideoutController( pmcData.Hideout.Production[prodId].InProgress = false; } + /// + /// Handle HideoutQuickTimeEvent on client/game/profile/items/moving + /// Called after completing workout at gym + /// + /// Session/Player id + /// Players PMC profile + /// QTE result object + /// Client response public void HandleQTEEventOutcome(string sessionId, PmcData pmcData, HandleQTEEventRequestData request, ItemEventRouterResponse output) { // { @@ -1050,7 +1209,12 @@ public class HideoutController( HandleMusclePain(pmcData, relevantQte.Results[QteEffectType.finishEffect]); } - private void HandleMusclePain(PmcData pmcData, QteResult finishEffect) + /// + /// Apply mild/severe muscle pain after gym use + /// + /// Players PMC profile + /// Effect data to apply after completing QTE gym event + protected void HandleMusclePain(PmcData pmcData, QteResult finishEffect) { var hasMildPain = pmcData.Health.BodyParts["Chest"].Effects?.ContainsKey("MildMusclePain"); var hasSeverePain = pmcData.Health.BodyParts["Chest"].Effects?.ContainsKey("SevereMusclePain"); @@ -1080,6 +1244,12 @@ public class HideoutController( } } + /// + /// Record a high score from the shooting range into a player profiles `overallcounters` + /// + /// Session/Player id + /// Players PMC profile + /// shooting range score request> public void RecordShootingRangePoints(string sessionId, PmcData pmcData, RecordShootingRangePoints request) { const string shootingRangeKey = "ShootingRangePoints"; @@ -1103,11 +1273,18 @@ public class HideoutController( shootingRangeHighScore.Value = request.Points; } + /// + /// Handle client/game/profile/items/moving - HideoutImproveArea + /// + /// Session/Player id + /// Players PMC profile + /// Improve area request + /// ItemEventRouterResponse public ItemEventRouterResponse ImproveArea(string sessionId, PmcData pmcData, HideoutImproveAreaRequestData request) { var output = _eventOutputHolder.GetOutput(sessionId); - // Create mapping of required item with corrisponding item from player inventory + // Create mapping of required item with corresponding item from player inventory var items = request.Items.Select( reqItem => { @@ -1187,6 +1364,13 @@ public class HideoutController( return output; } + /// + /// Handle client/game/profile/items/moving HideoutCancelProductionCommand + /// + /// Session/Player id + /// Players PMC profile + /// Cancel production request data + /// ItemEventRouterResponse public ItemEventRouterResponse CancelProduction(string sessionId, PmcData pmcData, HideoutCancelProductionRequestData request) { var output = _eventOutputHolder.GetOutput(sessionId); @@ -1213,6 +1397,13 @@ public class HideoutController( return _circleOfCultistService.StartSacrifice(sessionId, pmcData, request); } + /// + /// Handle HideoutDeleteProductionCommand event + /// + /// Session/Player id + /// Players PMC profile + /// Delete production request + /// ItemEventRouterResponse public ItemEventRouterResponse HideoutDeleteProductionCommand(string sessionId, PmcData pmcData, HideoutDeleteProductionRequestData request) { var output = _eventOutputHolder.GetOutput(sessionId); @@ -1223,6 +1414,13 @@ public class HideoutController( return output; } + /// + /// Handle HideoutCustomizationApply event + /// + /// Session/Player id + /// Players PMC profile + /// Apply hideout customisation request + /// ItemEventRouterResponse public ItemEventRouterResponse HideoutCustomizationApply(string sessionId, PmcData pmcData, HideoutCustomizationApplyRequestData request) { var output = _eventOutputHolder.GetOutput(sessionId); @@ -1242,7 +1440,12 @@ public class HideoutController( return output; } - private string? GetHideoutCustomisationType(string? type) + /// + /// Map an internal customisation type to a client hideout customisation type + /// + /// + /// hideout customisation type + protected string? GetHideoutCustomisationType(string? type) { switch (type) { @@ -1262,7 +1465,15 @@ public class HideoutController( } } - private void AddMissingPresetStandItemsToProfile(string sessionId, Stage equipmentPresetStage, PmcData pmcData, HideoutArea equipmentPresetHideoutArea, + /// + /// Add stand1/stand2/stand3 inventory items to profile, depending on passed in hideout stage + /// + /// Session/Player id + /// Current EQUIPMENT_PRESETS_STAND stage data + /// Players PMC profile + /// + /// Client response + protected void AddMissingPresetStandItemsToProfile(string sessionId, Stage equipmentPresetStage, PmcData pmcData, HideoutArea equipmentPresetHideoutArea, ItemEventRouterResponse output) { // Each slot is a single Mannequin @@ -1330,6 +1541,12 @@ public class HideoutController( return _eventOutputHolder.GetOutput(sessionId); } + /// + /// Handle client/hideout/qte/list + /// Get quick time event list for hideout + /// + /// Session/Player id + /// public List GetQteList(string sessionId) { return _databaseService.GetHideout().Qte; diff --git a/Libraries/Core/Controllers/InRaidController.cs b/Libraries/Core/Controllers/InRaidController.cs index 0bf7f8b7..10ac5cd1 100644 --- a/Libraries/Core/Controllers/InRaidController.cs +++ b/Libraries/Core/Controllers/InRaidController.cs @@ -35,7 +35,7 @@ public class InRaidController( /// Handles pmc/pscav /// /// - /// + /// Session/Player id public void SavePostRaidProfileForScav(ScavSaveRequestData offRaidProfileData, string sessionId) { var serverScavProfile = _profileHelper.GetScavProfile(sessionId); @@ -57,9 +57,10 @@ public class InRaidController( } /// + /// Get a % chance a scav will be hostile to the player when they're also a scav /// /// - /// + /// Session/Player id /// public double GetTraitorScavHostileChance(string url, string sessionId) { @@ -70,7 +71,7 @@ public class InRaidController( /// Get all boss role types e.g. bossTagilla /// /// - /// + /// Session/Player id /// string array of boss types public List GetBossTypes(string url, string sessionId) { diff --git a/Libraries/Core/Controllers/InsuranceController.cs b/Libraries/Core/Controllers/InsuranceController.cs index 9439f9ac..acc0b31b 100644 --- a/Libraries/Core/Controllers/InsuranceController.cs +++ b/Libraries/Core/Controllers/InsuranceController.cs @@ -45,11 +45,9 @@ public class InsuranceController( { protected InsuranceConfig _insuranceConfig = _configServer.GetConfig(); - /** - * Process insurance items of all profiles prior to being given back to the player through the mail service. - * - * @returns void - */ + /// + /// Process insurance items of all profiles prior to being given back to the player through the mail service + /// public void ProcessReturn() { // Process each installed profile. @@ -77,13 +75,12 @@ public class InsuranceController( ProcessInsuredItems(insuranceDetails, sessionId); } - /** - * Get all insured items that are ready to be processed in a specific profile. - * - * @param sessionID Session ID of the profile to check. - * @param time The time to check ready status against. Current time by default. - * @returns All insured items that are ready to be processed. - */ + /// + /// Get all insured items that are ready to be processed in a specific profile + /// + /// Session/Player id + /// The time to check ready status against. Current time by default + /// All insured items that are ready to be processed protected List FilterInsuredItems(string sessionId, long? time = null) { // Use the current time by default. @@ -101,13 +98,11 @@ public class InsuranceController( return profileInsuranceDetails.Where(insured => insuranceTime >= insured.ScheduledTime).ToList(); } - /** - * This method orchestrates the processing of insured items in a profile. - * - * @param insuranceDetails The insured items to process. - * @param sessionID The session ID that should receive the processed items. - * @returns void - */ + /// + /// This method orchestrates the processing of insured items in a profile + /// + /// The insured items to process + /// session ID that should receive the processed items protected void ProcessInsuredItems(List insuranceDetails, string sessionId) { if (_logger.IsLogEnabled(LogLevel.Debug)) @@ -146,12 +141,12 @@ public class InsuranceController( } } - /** - * Count all items in all insurance packages. - * @param insurance - * @returns - */ - protected double CountAllInsuranceItems(List insuranceDetails) + /// + /// Count all items in all insurance packages + /// + /// + /// Count of insured items + protected int CountAllInsuranceItems(List insuranceDetails) { return insuranceDetails.Select(ins => ins.Items.Count).Count(); } @@ -179,13 +174,12 @@ public class InsuranceController( } } - /** - * Finds the items that should be deleted based on the given Insurance object. - * - * @param rootItemParentID - The ID that should be assigned to all "hideout"/root items. - * @param insured - The insurance object containing the items to evaluate for deletion. - * @returns A Set containing the IDs of items that should be deleted. - */ + /// + /// Finds the items that should be deleted based on the given Insurance object + /// + /// The ID that should be assigned to all "hideout"/root items + /// The insurance object containing the items to evaluate for deletion + /// A Set containing the IDs of items that should be deleted protected HashSet FindItemsToDelete(string rootItemParentId, Insurance insured) { var toDelete = new HashSet(); @@ -228,16 +222,15 @@ public class InsuranceController( return toDelete; } - /** - * Initialize a Map object that holds main-parents to all of their attachments. Note that "main-parent" in this - * context refers to the parent item that an attachment is attached to. For example, a suppressor attached to a gun, - * not the backpack that the gun is located in (the gun's parent). - * - * @param rootItemParentID - The ID that should be assigned to all "hideout"/root items. - * @param insured - The insurance object containing the items to evaluate. - * @param itemsMap - A Map object for quick item look-up by item ID. - * @returns A Map object containing parent item IDs to arrays of their attachment items. - */ + /// + /// Initialize a dictionary that holds main-parents to all of their attachments. Note that "main-parent" in this + /// context refers to the parent item that an attachment is attached to. For example, a suppressor attached to a gun, + /// not the backpack that the gun is located in (the gun's parent). + /// + /// The ID that should be assigned to all "hideout"/root items + /// The insurance object containing the items to evaluate + /// A Dictionary for quick item look-up by item ID + /// A dictionary containing parent item IDs to arrays of their attachment items protected Dictionary> PopulateParentAttachmentsMap(string rootItemParentID, Insurance insured, Dictionary itemsMap) { var mainParentToAttachmentsMap = new Dictionary>(); @@ -324,14 +317,13 @@ public class InsuranceController( return mainParentToAttachmentsMap; } - /** - * Remove attachments that can not be moddable in-raid from the parentAttachmentsMap. If no moddable attachments - * remain, the parent is removed from the map as well. - * - * @param parentAttachmentsMap - A Map object containing parent item IDs to arrays of their attachment items. - * @param itemsMap - A Map object for quick item look-up by item ID. - * @returns A Map object containing parent item IDs to arrays of their attachment items which are not moddable in-raid. - */ + /// + /// Remove attachments that can not be moddable in-raid from the parentAttachmentsMap. If no moddable attachments + /// remain, the parent is removed from the map as well + /// + /// Dictionary containing parent item IDs to arrays of their attachment items + /// Hashset containing parent item IDs to arrays of their attachment items which are not moddable in-raid + /// protected Dictionary> RemoveNonModdableAttachments(Dictionary> parentAttachmentsMap, Dictionary itemsMap) { var updatedMap = new Dictionary>(); @@ -372,16 +364,14 @@ public class InsuranceController( return updatedMap; } - /** - * Process "regular" insurance items. Any insured item that is not an attached, attachment is considered a "regular" - * item. This method iterates over them, preforming item deletion rolls to see if they should be deleted. If so, - * they (and their attached, attachments, if any) are marked for deletion in the toDelete Set. - * - * @param insured The insurance object containing the items to evaluate. - * @param toDelete A Set to keep track of items marked for deletion. - * @param parentAttachmentsMap A Map object containing parent item IDs to arrays of their attachment items. - * @returns void - */ + /// + /// Process "regular" insurance items. Any insured item that is not an attached, attachment is considered a "regular" + /// item. This method iterates over them, preforming item deletion rolls to see if they should be deleted. If so, + /// they (and their attached, attachments, if any) are marked for deletion in the toDelete Dictionary + /// + /// Insurance object containing the items to evaluate + /// Hashset to keep track of items marked for deletion + /// Dictionary containing parent item IDs to arrays of their attachment items protected void ProcessRegularItems(Insurance insured, HashSet toDelete, Dictionary> parentAttachmentsMap) { foreach (var insuredItem in insured.Items) @@ -423,14 +413,13 @@ public class InsuranceController( } } - /** - * Process parent items and their attachments, updating the toDelete Set accordingly. - * - * @param mainParentToAttachmentsMap A Map object containing parent item IDs to arrays of their attachment items. - * @param itemsMap A Map object for quick item look-up by item ID. - * @param traderId The trader ID from the Insurance object. - * @param toDelete A Set object to keep track of items marked for deletion. - */ + /// + /// Process parent items and their attachments, updating the toDelete Set accordingly + /// + /// Dictionary containing parent item IDs to arrays of their attachment items + /// Dictionary for quick item look-up by item ID + /// Trader ID from the Insurance object + /// Tracked attachment ids to be removed protected void ProcessAttachments(Dictionary> mainParentToAttachmentsMap, Dictionary itemsMap, string? insuredTraderId, HashSet toDelete) { @@ -456,17 +445,16 @@ public class InsuranceController( } } - /** - * Takes an array of attachment items that belong to the same main-parent item, sorts them in descending order by - * their maximum price. For each attachment, a roll is made to determine if a deletion should be made. Once the - * number of deletions has been counted, the attachments are added to the toDelete Set, starting with the most - * valuable attachments first. - * - * @param attachments The array of attachment items to sort, filter, and roll. - * @param traderId The ID of the trader to that has ensured these items. - * @param toDelete The array that accumulates the IDs of the items to be deleted. - * @returns void - */ + + /// + /// Takes an array of attachment items that belong to the same main-parent item, sorts them in descending order by + /// their maximum price. For each attachment, a roll is made to determine if a deletion should be made. Once the + /// number of deletions has been counted, the attachments are added to the toDelete Set, starting with the most + /// valuable attachments first + /// + /// Array of attachment items to sort, filter, and roll + /// ID of the trader to that has ensured these items + /// array that accumulates the IDs of the items to be deleted protected void ProcessAttachmentByParent(List attachments, string? traderId, HashSet toDelete) { // Create dict of item ids + their flea/handbook price (highest is chosen) @@ -499,6 +487,12 @@ public class InsuranceController( } } + /// + /// Write out attachments being removed + /// + /// + /// + /// protected void LogAttachmentsBeingRemoved(List attachmentIdsToRemove, List attachments, Dictionary attachmentPrices) { var index = 1; @@ -516,6 +510,11 @@ public class InsuranceController( } } + /// + /// Get dictionary of items with their corresponding price + /// + /// Item attachments + /// protected Dictionary WeightAttachmentsByPrice(List attachments) { var result = new Dictionary(); @@ -535,6 +534,12 @@ public class InsuranceController( return result; } + /// + /// Get count of items to remove from weapon (take into account trader + price of attachment) + /// + /// Dict of item Tpls and their rouble price + /// Trader the attachment is insured against + /// Attachment count to remove protected double GetAttachmentCountToRemove(Dictionary weightedAttachmentByPrice, string? traderId) { var removeCount = 0; @@ -550,18 +555,21 @@ public class InsuranceController( .Count(_ => RollForDelete(traderId) ?? false); } + /// + /// Remove items from the insured items that should not be returned to the player + /// + /// The insured items to process + /// The items that should be deleted protected void RemoveItemsFromInsurance(Insurance insured, HashSet toDelete) { insured.Items = insured.Items.Where(item => !toDelete.Contains(item.Id)).ToList(); } - /** - * Handle sending the insurance message to the user that potentially contains the valid insurance items. - * - * @param sessionID The session ID that should receive the insurance message. - * @param insurance The context of insurance to use. - * @returns void - */ + /// + /// Handle sending the insurance message to the user that potentially contains the valid insurance items + /// + /// Profile that should receive the insurance message + /// context of insurance to use protected void SendMail(string sessionId, Insurance insurance) { // If there are no items remaining after the item filtering, the insurance has @@ -596,15 +604,23 @@ public class InsuranceController( ); } + /// + /// Edge case - labs doesn't allow for insurance returns unless location config is edited + /// + /// The insured items to process + /// OPTIONAL - id of labs location + /// protected bool IsMapLabsAndInsuranceDisabled(Insurance insurance, string labsId = "laboratory") { return string.Equals(insurance.SystemData?.Location, labsId, StringComparison.OrdinalIgnoreCase) && !(_databaseService.GetLocation(labsId)?.Base?.Insurance.GetValueOrDefault(false) ?? false); } - /** - * Update IInsurance object with new messageTemplateId and wipe out items array data - */ + /// + /// Update IInsurance object with new messageTemplateId and wipe out items array data + /// + /// + /// protected void HandleLabsInsurance(Dictionary?>? traderDialogMessages, Insurance insurance) { // Use labs specific messages if available, otherwise use default @@ -620,6 +636,12 @@ public class InsuranceController( } + /// + /// Roll for chance of item being 'lost' + /// + /// Trader item was insured with + /// Item being rolled on + /// Should item be deleted protected bool? RollForDelete(string traderId, Item? insuredItem = null) { var trader = _traderHelper.GetTraderById(traderId); @@ -646,26 +668,24 @@ public class InsuranceController( return roll; } - /** - * Handle Insure event - * Add insurance to an item - * - * @param pmcData Player profile - * @param body Insurance request - * @param sessionID Session id - * @returns IItemEventRouterResponse object to send to client - */ - public ItemEventRouterResponse Insure(PmcData pmcData, InsureRequestData body, string sessionId) + /// + /// Handle Insure event, Add insurance to an item + /// + /// Players PMC profile + /// Insurance request + /// Session/Player id + /// ItemEventRouterResponse object to send to client + public ItemEventRouterResponse Insure(PmcData pmcData, InsureRequestData request, string sessionId) { var output = _eventOutputHolder.GetOutput(sessionId); - var itemsToInsureCount = body.Items.Count; + var itemsToInsureCount = request.Items.Count; List itemsToPay = []; // Create hash of player inventory items (keyed by item id) var inventoryItemsHash = pmcData.Inventory.Items.ToDictionary(item => item.Id); // Get price of all items being insured, add to 'itemsToPay' - foreach (var key in body.Items) + foreach (var key in request.Items) { itemsToPay.Add( new IdWithCount @@ -674,7 +694,7 @@ public class InsuranceController( Count = _insuranceService.GetRoublePriceToInsureItemWithTrader( pmcData, inventoryItemsHash[key], - body.TransactionId + request.TransactionId ) } ); @@ -683,7 +703,7 @@ public class InsuranceController( var options = new ProcessBuyTradeRequestData { SchemeItems = itemsToPay, - TransactionId = body.TransactionId, + TransactionId = request.TransactionId, Action = "SptInsure", Type = "", ItemId = "", @@ -700,19 +720,19 @@ public class InsuranceController( // add items to InsuredItems list once money has been paid pmcData.InsuredItems ??= []; - foreach (var key in body.Items) + foreach (var key in request.Items) { pmcData.InsuredItems.Add( new InsuredItem { - TId = body.TransactionId, + TId = request.TransactionId, ItemId = inventoryItemsHash[key].Id } ); // If Item is Helmet or Body Armour -> Handle insurance of soft inserts if (_itemHelper.ArmorItemHasRemovableOrSoftInsertSlots(inventoryItemsHash[key].Template)) { - InsureSoftInserts(inventoryItemsHash[key], pmcData, body); + InsureSoftInserts(inventoryItemsHash[key], pmcData, request); } } @@ -721,14 +741,13 @@ public class InsuranceController( return output; } - /** - * Ensure soft inserts of Armor that has soft insert slots - * Allows armors to come back after being lost correctly - * @param item Armor item to be insured - * @param pmcData Player profile - * @param body Insurance request data - */ - public void InsureSoftInserts(Item itemWithSoftInserts, PmcData pmcData, InsureRequestData body) + /// + /// Ensure soft inserts of Armor that has soft insert slots, Allows armors to come back after being lost correctly + /// + /// Armor item to be insured + /// Players PMC profile + /// Insurance request data + public void InsureSoftInserts(Item itemWithSoftInserts, PmcData pmcData, InsureRequestData request) { var softInsertSlots = pmcData.Inventory.Items.Where( item => item.ParentId == itemWithSoftInserts.Id && _itemHelper.IsSoftInsertId(item.SlotId.ToLower()) @@ -744,21 +763,20 @@ public class InsuranceController( pmcData.InsuredItems.Add( new InsuredItem { - TId = body.TransactionId, + TId = request.TransactionId, ItemId = softInsertSlot.Id } ); } } - /** - * Handle client/insurance/items/list/cost - * Calculate insurance cost - * - * @param request request object - * @param sessionID session id - * @returns IGetInsuranceCostResponseData object to send to client - */ + /// + /// Handle client/insurance/items/list/cost + /// Calculate insurance cost + /// + /// request object + /// Session/Player id + /// GetInsuranceCostResponseData object to send to client public GetInsuranceCostResponseData Cost(GetInsuranceCostRequestData request, string sessionId) { var response = new GetInsuranceCostResponseData(); diff --git a/Libraries/Core/Controllers/InventoryController.cs b/Libraries/Core/Controllers/InventoryController.cs index bbb0328f..e41d5a70 100644 --- a/Libraries/Core/Controllers/InventoryController.cs +++ b/Libraries/Core/Controllers/InventoryController.cs @@ -41,6 +41,14 @@ public class InventoryController( ICloner _cloner ) { + /// + /// Move Item - change location of item with parentId and slotId, transfers items from one profile to another if fromOwner/toOwner is set in the body. + /// Otherwise, move is contained within the same profile_f + /// + /// Players PMC profile + /// Move request data + /// Session/Player id + /// Client response public void MoveItem(PmcData pmcData, InventoryMoveRequestData moveRequest, string sessionId, ItemEventRouterResponse output) { @@ -85,7 +93,7 @@ public class InventoryController( // Item is moving into or out of place of fame dog tag slot if (moveRequest.To?.Container != null && - (moveRequest.To.Container.StartsWith("dogtag") || originalLocationSlotId.StartsWith("dogtag"))) + (moveRequest.To.Container.StartsWith("dogtag", StringComparison.OrdinalIgnoreCase) || originalLocationSlotId.StartsWith("dogtag", StringComparison.OrdinalIgnoreCase))) { _hideoutHelper.ApplyPlaceOfFameDogtagBonus(pmcData); } @@ -100,7 +108,11 @@ public class InventoryController( } } - private void AppendTraderExploitErrorResponse(ItemEventRouterResponse output) + /// + /// Get an event router response with inventory trader message + /// + /// Item event router response + protected void AppendTraderExploitErrorResponse(ItemEventRouterResponse output) { _httpResponseUtil.AppendErrorToOutput( output, @@ -109,6 +121,14 @@ public class InventoryController( ); } + /// + /// Handle /client/game/profile/items/moving - PinLock + /// Requires no response to client, only server change + /// + /// Players PMC profile + /// Pin/Lock request data + /// Session/Player id + /// Client response public void PinOrLock(PmcData pmcData, PinOrLockItemRequest request, string sessionId, ItemEventRouterResponse output) { @@ -126,6 +146,12 @@ public class InventoryController( itemToAdjust.Upd.PinLockState = request.State; } + /// + /// Handle /client/game/profile/items/moving SetFavoriteItems + /// + /// Players PMC profile + /// + /// Session/Player id public void SetFavoriteItem(PmcData pmcData, SetFavoriteItems request, string sessionId) { // The client sends the full list of favorite items, so clear the current favorites @@ -133,6 +159,12 @@ public class InventoryController( pmcData.Inventory.FavoriteItems.AddRange(request.Items); } + /// + /// Handle /client/game/profile/items/moving RedeemProfileReward + /// + /// Players PMC profile + /// + /// Session/Player id public void RedeemProfileReward(PmcData pmcData, RedeemProfileRequestData request, string sessionId) { var fullProfile = _profileHelper.GetFullProfile(sessionId); @@ -217,11 +249,11 @@ public class InventoryController( } } - /** - * Flag an item as seen in profiles encyclopedia + add inspect xp to profile - * @param itemTpls Inspected item tpls - * @param fullProfile Profile to add xp to - */ + /// + /// Flag an item as seen in profiles encyclopedia + add inspect xp to profile + /// + /// Inspected item tpls + /// Profile to add xp to protected void FlagItemsAsInspectedAndRewardXp(IEnumerable itemTpls, SptProfile fullProfile) { foreach (var itemTpl in itemTpls) @@ -251,6 +283,14 @@ public class InventoryController( ); } + /// + /// Handle OpenRandomLootContainer event + /// Handle event fired when a container is unpacked (e.g. halloween pumpkin) + /// + /// Players PMC profile + /// + /// Session/Player id + /// Client response public void OpenRandomLootContainer(PmcData pmcData, OpenRandomLootContainerRequestData request, string sessionId, ItemEventRouterResponse output) { @@ -317,6 +357,13 @@ public class InventoryController( _inventoryHelper.RemoveItem(pmcData, request.Item, sessionId, output); } + /// + /// Edit an existing map marker + /// + /// Players PMC profile + /// Edit marker request + /// Session/Player id + /// Client response public void EditMapMarker(PmcData pmcData, InventoryEditMarkerRequestData request, string sessionId, ItemEventRouterResponse output) { @@ -326,6 +373,13 @@ public class InventoryController( output.ProfileChanges[sessionId].Items.ChangedItems.Add(mapItem); } + /// + /// Delete a map marker + /// + /// Players PMC profile + /// Delete marker request + /// Session/Player id + /// Client response public void DeleteMapMarker(PmcData pmcData, InventoryDeleteMarkerRequestData request, string sessionId, ItemEventRouterResponse output) { @@ -344,6 +398,13 @@ public class InventoryController( output.ProfileChanges[sessionId].Items.ChangedItems.Add(adjustedMapItem); } + /// + /// Add note to a map + /// + /// Players PMC profile + /// Add marker request + /// Session/Player id + /// Client response public void SortInventory(PmcData pmcData, InventorySortRequestData request, string sessionId, ItemEventRouterResponse output) { @@ -372,10 +433,17 @@ public class InventoryController( } } - public ItemEventRouterResponse ReadEncyclopedia(PmcData pmcData, InventoryReadEncyclopediaRequestData body, + /// + /// Flag item as 'seen' by player in profile + /// + /// Players PMC profile + /// + /// Session/Player id + /// + public ItemEventRouterResponse ReadEncyclopedia(PmcData pmcData, InventoryReadEncyclopediaRequestData request, string sessionId) { - foreach (var id in body.Ids) + foreach (var id in request.Ids) { pmcData.Encyclopedia[id] = true; } @@ -383,6 +451,13 @@ public class InventoryController( return _eventOutputHolder.GetOutput(sessionId); } + /// + /// Handle examining an item + /// + /// Players PMC profile + /// Examine item request + /// Session/Player id + /// Client response public void ExamineItem(PmcData pmcData, InventoryExamineRequestData request, string sessionId, ItemEventRouterResponse output) { @@ -425,6 +500,12 @@ public class InventoryController( } } + /// + /// Get the tplid of an item from the examine request object + /// + /// + /// Session/Player id + /// Item tpl protected string? GetExaminedItemTpl(InventoryExamineRequestData request, string? sessionId) { if (_presetHelper.IsPreset(request.Item)) @@ -501,6 +582,14 @@ public class InventoryController( return null; } + /// + /// Unbind an inventory item from quick access menu at bottom of player screen + /// Handle unbind event + /// + /// Players PMC profile + /// + /// Session/Player id + /// Client response public void UnBindItem(PmcData pmcData, InventoryBindRequestData request, string sessionId, ItemEventRouterResponse output) { @@ -510,6 +599,14 @@ public class InventoryController( pmcData.Inventory.FastPanel.Remove(request.Index); } + /// + /// Handle bind event + /// Bind an inventory item to the quick access menu at bottom of player screen + /// + /// Players PMC profile + /// + /// Session/Player id + /// Client response public void BindItem(PmcData pmcData, InventoryBindRequestData bindRequest, string sessionId, ItemEventRouterResponse output) { @@ -524,6 +621,13 @@ public class InventoryController( pmcData.Inventory.FastPanel[bindRequest.Index] = bindRequest.Item; } + /// + /// Add a tag to an inventory item + /// + /// Profile with item to add tag to + /// + /// Session/Player id + /// ItemEventRouterResponse public ItemEventRouterResponse TagItem(PmcData pmcData, InventoryTagRequestData request, string sessionId) { var itemToTag = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == request.Item); @@ -551,6 +655,13 @@ public class InventoryController( return _eventOutputHolder.GetOutput(sessionId); } + /// + /// Toggles "Toggleable" items like night vision goggles and face shields. + /// + /// Players PMC profile + /// Toggle request + /// Session/Player id + /// ItemEventRouterResponse public ItemEventRouterResponse ToggleItem(PmcData pmcData, InventoryToggleRequestData request, string sessionId) { // May need to reassign to scav profile @@ -586,6 +697,13 @@ public class InventoryController( }; } + /// + /// Handles folding of Weapons + /// + /// Players PMC profile + /// Fold item request + /// Session/Player id + /// ItemEventRouterResponse public ItemEventRouterResponse FoldItem(PmcData pmcData, InventoryFoldRequestData request, string sessionId) { // May need to reassign to scav profile @@ -622,11 +740,15 @@ public class InventoryController( return _eventOutputHolder.GetOutput(sessionId); } - /** - * Swap Item - * its used for "reload" if you have weapon in hands and magazine is somewhere else in rig or backpack in equipment - * Also used to swap items using quick selection on character screen - */ + /// + /// Swap Item + /// used for "reload" if you have weapon in hands and magazine is somewhere else in rig or backpack in equipment + /// Also used to swap items using quick selection on character screen + /// + /// Players PMC profile + /// Swap item request + /// Session/Player id + /// ItemEventRouterResponse public ItemEventRouterResponse SwapItem(PmcData pmcData, InventorySwapRequestData request, string sessionId) { // During post-raid scav transfer, the swap may be in the scav inventory @@ -697,16 +819,15 @@ public class InventoryController( return _eventOutputHolder.GetOutput(sessionId); } - /** - * TODO: Adds no data to output to send to client, is this by design? - * Transfer items from one stack into another while keeping original stack - * Used to take items from scav inventory into stash or to insert ammo into mags (shotgun ones) and reloading weapon by clicking "Reload" - * @param pmcData Player profile - * @param body Transfer request - * @param sessionID Session id - * @param output Client response - * @returns IItemEventRouterResponse - */ + /// + /// TODO: Adds no data to output to send to client, is this by design? + /// Transfer items from one stack into another while keeping original stack + /// Used to take items from scav inventory into stash or to insert ammo into mags (shotgun ones) and reloading weapon by clicking "Reload" + /// + /// Players PMC profile + /// Transfer item request + /// Session/Player id + /// Client response public void TransferItem(PmcData pmcData, InventoryTransferRequestData request, string sessionId, ItemEventRouterResponse output) { @@ -761,17 +882,25 @@ public class InventoryController( destinationItem.Upd.StackObjectsCount = destinationStackCount + request.Count; } - public void MergeItem(PmcData pmcData, InventoryMergeRequestData body, string sessionID, + /// + /// Fully merge 2 inventory stacks together into one stack (merging where both stacks remain is called 'transfer') + /// Deletes item from `body.item` and adding number of stacks into `body.with` + /// + /// Players PMC profile + /// Merge stacks request + /// + /// Client response + public void MergeItem(PmcData pmcData, InventoryMergeRequestData request, string sessionID, ItemEventRouterResponse output) { // Changes made to result apply to character inventory - var inventoryItems = _inventoryHelper.GetOwnerInventoryItems(body, body.Item, sessionID); + var inventoryItems = _inventoryHelper.GetOwnerInventoryItems(request, request.Item, sessionID); // Get source item (can be from player or trader or mail) - var sourceItem = inventoryItems.From.FirstOrDefault(x => x.Id == body.Item); + var sourceItem = inventoryItems.From.FirstOrDefault(x => x.Id == request.Item); if (sourceItem is null) { - var errorMessage = $"Unable to merge stacks as source item: {body.With} cannot be found"; + var errorMessage = $"Unable to merge stacks as source item: {request.With} cannot be found"; _logger.Error(errorMessage); _httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -780,10 +909,10 @@ public class InventoryController( } // Get item being merged into - var destinationItem = inventoryItems.To.FirstOrDefault(x => x.Id == body.With); + var destinationItem = inventoryItems.To.FirstOrDefault(x => x.Id == request.With); if (destinationItem is null) { - var errorMessage = $"Unable to merge stacks as destination item: {body.With} cannot be found"; + var errorMessage = $"Unable to merge stacks as destination item: {request.With} cannot be found"; _logger.Error(errorMessage); _httpResponseUtil.AppendErrorToOutput(output, errorMessage); @@ -844,6 +973,13 @@ public class InventoryController( inventoryItems.From.RemoveAt(indexOfItemToRemove); // Remove source item from 'from' inventory } + /// + /// Split Item stack - 1 stack into 2 + /// + /// (unused, getOwnerInventoryItems() gets profile) + /// Split stack request + /// + /// Client response public void SplitItem(PmcData pmcData, InventorySplitRequestData request, string sessionID, ItemEventRouterResponse output) { @@ -901,7 +1037,15 @@ public class InventoryController( ); } - public void RemoveItem(PmcData pmcData, InventoryRemoveRequestData request, string sessionId, + /// + /// Implements "Discard" functionality from Main menu (Stash etc.) + /// Removes item from PMC Profile + /// + /// Players PMC profile + /// Discard item request + /// Session/Player id + /// Client response + public void DiscardItem(PmcData pmcData, InventoryRemoveRequestData request, string sessionId, ItemEventRouterResponse output) { if (request.FromOwner?.Type == "Mail") diff --git a/Libraries/Core/Controllers/LauncherController.cs b/Libraries/Core/Controllers/LauncherController.cs index 2fe8f827..6d1097c4 100644 --- a/Libraries/Core/Controllers/LauncherController.cs +++ b/Libraries/Core/Controllers/LauncherController.cs @@ -32,6 +32,10 @@ public class LauncherController( { protected CoreConfig _coreConfig = _configServer.GetConfig(); + /// + /// + /// + /// public ConnectResponse Connect() { // Get all possible profile types + filter out any that are blacklisted @@ -75,11 +79,21 @@ public class LauncherController( return result; } + /// + /// + /// + /// + /// public Info? Find(string? sessionId) { return sessionId is not null && _saveServer.GetProfiles().TryGetValue(sessionId, out var profile) ? profile.ProfileInfo : null; } + /// + /// + /// + /// + /// public string? Login(LoginRequestData? info) { foreach (var kvp in _saveServer.GetProfiles()) @@ -94,6 +108,11 @@ public class LauncherController( return null; } + /// + /// + /// + /// + /// public string Register(RegisterData info) { foreach (var kvp in _saveServer.GetProfiles()) @@ -107,6 +126,11 @@ public class LauncherController( return CreateAccount(info); } + /// + /// + /// + /// + /// protected string CreateAccount(RegisterData info) { var profileId = GenerateProfileId(); @@ -129,6 +153,10 @@ public class LauncherController( return profileId; } + /// + /// + /// + /// protected string GenerateProfileId() { var timestamp = _timeUtil.GetTimeStamp(); @@ -136,6 +164,12 @@ public class LauncherController( return FormatID(timestamp, timestamp * _randomUtil.GetInt(1, 1000000)); } + /// + /// + /// + /// + /// + /// protected string FormatID(long timeStamp, long counter) { var timeStampStr = Convert.ToString(timeStamp, 16).PadLeft(8, '0'); @@ -144,6 +178,11 @@ public class LauncherController( return timeStampStr.ToLower() + counterStr.ToLower(); } + /// + /// + /// + /// + /// public string? ChangeUsername(ChangeRequestData info) { var sessionID = Login(info); @@ -156,6 +195,11 @@ public class LauncherController( return sessionID; } + /// + /// + /// + /// + /// public string? ChangePassword(ChangeRequestData info) { var sessionID = Login(info); @@ -192,6 +236,10 @@ public class LauncherController( return sessionID; } + /// + /// + /// + /// public string GetCompatibleTarkovVersion() { return _coreConfig.CompatibleTarkovVersion; @@ -231,6 +279,11 @@ public class LauncherController( return []; } + /// + /// + /// + /// + /// public List GetProfileModsGroupedByModName(List profileMods) { // Group all mods used by profile by name diff --git a/Libraries/Core/Controllers/MatchController.cs b/Libraries/Core/Controllers/MatchController.cs index ddd3077f..ba625205 100644 --- a/Libraries/Core/Controllers/MatchController.cs +++ b/Libraries/Core/Controllers/MatchController.cs @@ -45,7 +45,7 @@ public class MatchController( /// Handle match/group/start_game /// /// - /// + /// Session/Player id /// public ProfileStatusResponse JoinMatch(MatchGroupStartGameRequest info, string sessionId) { @@ -94,7 +94,7 @@ public class MatchController( /// Handle /client/raid/configuration /// /// - /// + /// Session/Player id public void ConfigureOfflineRaid(GetRaidConfigurationRequestData request, string sessionId) { // Store request data for access during bot generation @@ -116,7 +116,7 @@ public class MatchController( /// /// dropdown difficulty value /// bot difficulty - private string ConvertDifficultyDropdownIntoBotDifficulty(string botDifficulty) + protected string ConvertDifficultyDropdownIntoBotDifficulty(string botDifficulty) { // Edge case medium - must be altered if (string.Equals(botDifficulty, "medium", StringComparison.OrdinalIgnoreCase)) @@ -130,7 +130,7 @@ public class MatchController( /// /// Handle client/match/local/start /// - /// + /// Session/Player id /// /// public StartLocalRaidResponseData StartLocalRaid(string sessionId, StartLocalRaidRequestData request) @@ -141,7 +141,7 @@ public class MatchController( /// /// Handle client/match/local/end /// - /// + /// Session/Player id /// public void EndLocalRaid(string sessionId, EndLocalRaidRequestData request) { diff --git a/Libraries/Core/Controllers/NoteController.cs b/Libraries/Core/Controllers/NoteController.cs index 621ecd4b..126ad533 100644 --- a/Libraries/Core/Controllers/NoteController.cs +++ b/Libraries/Core/Controllers/NoteController.cs @@ -13,9 +13,9 @@ public class NoteController( { /// /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse AddNote( PmcData pmcData, @@ -34,9 +34,9 @@ public class NoteController( /// /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse EditNote( PmcData pmcData, @@ -52,9 +52,9 @@ public class NoteController( /// /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse DeleteNote( PmcData pmcData, diff --git a/Libraries/Core/Controllers/NotifierController.cs b/Libraries/Core/Controllers/NotifierController.cs index 5c358d51..8515b798 100644 --- a/Libraries/Core/Controllers/NotifierController.cs +++ b/Libraries/Core/Controllers/NotifierController.cs @@ -22,7 +22,7 @@ public class NotifierController( /// one or more appear or when a timeout expires. /// If no notifications are available after the timeout, use a default message. /// - /// + /// Session/Player id public Task> NotifyAsync(string sessionId) { return Task.Factory.StartNew(() => { @@ -52,7 +52,7 @@ public class NotifierController( /// /// Handle client/notifier/channel/create /// - /// + /// Session/Player id /// public NotifierChannel GetChannel(string sessionId) { @@ -68,7 +68,7 @@ public class NotifierController( /// /// - /// + /// Session/Player id /// public string GetServer(string sessionId) { diff --git a/Libraries/Core/Controllers/PrestigeController.cs b/Libraries/Core/Controllers/PrestigeController.cs index fe697839..b3a5ae5b 100644 --- a/Libraries/Core/Controllers/PrestigeController.cs +++ b/Libraries/Core/Controllers/PrestigeController.cs @@ -21,7 +21,7 @@ public class PrestigeController( /// /// Handle /client/prestige/list /// - /// + /// Session/Player id /// /// public Prestige GetPrestige( diff --git a/Libraries/Core/Controllers/QuestController.cs b/Libraries/Core/Controllers/QuestController.cs index bf9da9f7..bef72dff 100644 --- a/Libraries/Core/Controllers/QuestController.cs +++ b/Libraries/Core/Controllers/QuestController.cs @@ -113,7 +113,7 @@ public class QuestController( return acceptQuestResponse; } - private void AddTaskConditionCountersToProfile(List? questConditions, PmcData pmcData, string questId) + protected void AddTaskConditionCountersToProfile(List? questConditions, PmcData pmcData, string questId) { foreach (var condition in questConditions) { @@ -177,7 +177,7 @@ public class QuestController( return response; } - private RepeatableQuest GetRepeatableQuestFromProfile(PmcData pmcData, AcceptQuestRequestData acceptedQuest) + protected RepeatableQuest GetRepeatableQuestFromProfile(PmcData pmcData, AcceptQuestRequestData acceptedQuest) { foreach (var repeatableQuest in pmcData.RepeatableQuests) { @@ -350,7 +350,7 @@ public class QuestController( return output; } - private ItemEventRouterResponse ShowRepeatableQuestInvalidConditionError(HandoverQuestRequestData handoverQuestRequest, ItemEventRouterResponse output) + protected ItemEventRouterResponse ShowRepeatableQuestInvalidConditionError(HandoverQuestRequestData handoverQuestRequest, ItemEventRouterResponse output) { var errorMessage = _localisationService.GetText( "repeatable-quest_handover_failed_condition_invalid", @@ -365,7 +365,7 @@ public class QuestController( return _httpResponseUtil.AppendErrorToOutput(output, errorMessage); } - private ItemEventRouterResponse ShowQuestItemHandoverMatchError(HandoverQuestRequestData handoverQuestRequest, Item? itemHandedOver, + protected ItemEventRouterResponse ShowQuestItemHandoverMatchError(HandoverQuestRequestData handoverQuestRequest, Item? itemHandedOver, QuestCondition? handoverRequirements, ItemEventRouterResponse output) { var errorMessage = _localisationService.GetText( @@ -382,7 +382,7 @@ public class QuestController( return _httpResponseUtil.AppendErrorToOutput(output, errorMessage); } - private void UpdateProfileTaskConditionCounterValue(PmcData pmcData, string conditionId, string questId, double counterValue) + protected void UpdateProfileTaskConditionCounterValue(PmcData pmcData, string conditionId, string questId, double counterValue) { if (pmcData.TaskConditionCounters.GetValueOrDefault(conditionId) != null) { diff --git a/Libraries/Core/Controllers/RagfairController.cs b/Libraries/Core/Controllers/RagfairController.cs index 755b3c0f..c96da33a 100644 --- a/Libraries/Core/Controllers/RagfairController.cs +++ b/Libraries/Core/Controllers/RagfairController.cs @@ -22,32 +22,32 @@ namespace Core.Controllers; [Injectable] public class RagfairController { - private readonly ConfigServer _configServer; - private readonly DatabaseService _databaseService; - private readonly EventOutputHolder _eventOutputHolder; - private readonly HandbookHelper _handbookHelper; - private readonly HttpResponseUtil _httpResponseUtil; - private readonly InventoryHelper _inventoryHelper; - private readonly ItemHelper _itemHelper; - private readonly JsonUtil _jsonUtil; - private readonly LocalisationService _localisationService; - private readonly ISptLogger _logger; - private readonly PaymentHelper _paymentHelper; - private readonly PaymentService _paymentService; - private readonly ProfileHelper _profileHelper; + protected ConfigServer _configServer; + protected DatabaseService _databaseService; + protected EventOutputHolder _eventOutputHolder; + protected HandbookHelper _handbookHelper; + protected HttpResponseUtil _httpResponseUtil; + protected InventoryHelper _inventoryHelper; + protected ItemHelper _itemHelper; + protected JsonUtil _jsonUtil; + protected LocalisationService _localisationService; + protected ISptLogger _logger; + protected PaymentHelper _paymentHelper; + protected PaymentService _paymentService; + protected ProfileHelper _profileHelper; - private readonly RagfairConfig _ragfairConfig; - private readonly RagfairHelper _ragfairHelper; - private readonly RagfairOfferGenerator _ragfairOfferGenerator; - private readonly RagfairOfferHelper _ragfairOfferHelper; - private readonly RagfairOfferService _ragfairOfferService; - private readonly RagfairPriceService _ragfairPriceService; - private readonly RagfairSellHelper _ragfairSellHelper; - private readonly RagfairServer _ragfairServer; - private readonly RagfairSortHelper _ragfairSortHelper; - private readonly RagfairTaxService _ragfairTaxService; - private readonly TimeUtil _timeUtil; - private readonly TraderHelper _traderHelper; + protected RagfairConfig _ragfairConfig; + protected RagfairHelper _ragfairHelper; + protected RagfairOfferGenerator _ragfairOfferGenerator; + protected RagfairOfferHelper _ragfairOfferHelper; + protected RagfairOfferService _ragfairOfferService; + protected RagfairPriceService _ragfairPriceService; + protected RagfairSellHelper _ragfairSellHelper; + protected RagfairServer _ragfairServer; + protected RagfairSortHelper _ragfairSortHelper; + protected RagfairTaxService _ragfairTaxService; + protected TimeUtil _timeUtil; + protected TraderHelper _traderHelper; public RagfairController( ISptLogger logger, @@ -260,7 +260,7 @@ public class RagfairController * Add index to all offers passed in (0-indexed) * @param offers Offers to add index value to */ - private void AddIndexValueToOffers(List offers) + protected void AddIndexValueToOffers(List offers) { var counter = 0; @@ -276,7 +276,7 @@ public class RagfairController * @param offers Ragfair offers to get categories for * @returns record with templates + counts */ - private Dictionary? GetSpecificCategories(PmcData pmcProfile, SearchRequestData searchRequest, + protected Dictionary GetSpecificCategories(PmcData pmcProfile, SearchRequestData searchRequest, List offers) { // Linked/required search categories @@ -311,7 +311,7 @@ public class RagfairController * @param info Search request * @returns True if it is a 'linked' search type */ - private bool IsLinkedSearch(SearchRequestData searchRequest) + protected bool IsLinkedSearch(SearchRequestData searchRequest) { return !string.IsNullOrEmpty(searchRequest.LinkedSearchId); } @@ -321,7 +321,7 @@ public class RagfairController * @param info Search request * @returns True if it is a 'required' search type */ - private bool IsRequiredSearch(SearchRequestData searchRequest) + protected bool IsRequiredSearch(SearchRequestData searchRequest) { return !string.IsNullOrEmpty(searchRequest.NeededSearchId); } @@ -334,7 +334,7 @@ public class RagfairController * @param pmcProfile Player profile * @returns array of offers */ - private List GetOffersForSearchType(SearchRequestData searchRequest, List itemsToAdd, + protected List GetOffersForSearchType(SearchRequestData searchRequest, List itemsToAdd, Dictionary traderAssorts, PmcData pmcProfile) { @@ -398,7 +398,7 @@ public class RagfairController }; } - private double GetAveragePriceFromOffers(List offers, MinMax minMax, bool ignoreTraderOffers) + protected double GetAveragePriceFromOffers(List offers, MinMax minMax, bool ignoreTraderOffers) { var sum = 0d; var totalOfferCount = 0; @@ -494,7 +494,7 @@ public class RagfairController * @param errorMessage message to show to player when offer is invalid * @returns Is offer valid */ - private bool IsValidPlayerOfferRequest(AddOfferRequestData offerRequest, string validationMessage) + protected bool IsValidPlayerOfferRequest(AddOfferRequestData offerRequest, string validationMessage) { if (offerRequest?.Items is null || offerRequest.Items.Count == 0) { @@ -519,7 +519,7 @@ public class RagfairController * @param offerRequest Client request * @returns FleaOfferType */ - private FleaOfferType GetOfferType(AddOfferRequestData offerRequest) + protected FleaOfferType GetOfferType(AddOfferRequestData offerRequest) { var sellInOncePiece = offerRequest.SellInOnePiece.GetValueOrDefault(false); @@ -554,7 +554,7 @@ public class RagfairController * @param output Response to send to client * @returns IItemEventRouterResponse */ - private ItemEventRouterResponse CreateMultiOffer(string sessionID, AddOfferRequestData offerRequest, + protected ItemEventRouterResponse CreateMultiOffer(string sessionID, AddOfferRequestData offerRequest, SptProfile fullProfile, ItemEventRouterResponse output) { var pmcData = fullProfile.CharacterData.PmcData; @@ -666,7 +666,7 @@ public class RagfairController * @param output Response to send to client * @returns IItemEventRouterResponse */ - private ItemEventRouterResponse CreatePackOffer(string sessionID, AddOfferRequestData offerRequest, + protected ItemEventRouterResponse CreatePackOffer(string sessionID, AddOfferRequestData offerRequest, SptProfile fullProfile, ItemEventRouterResponse output) { var pmcData = fullProfile.CharacterData.PmcData; @@ -775,7 +775,7 @@ public class RagfairController * @param output Response to send to client * @returns IItemEventRouterResponse */ - private ItemEventRouterResponse CreateSingleOffer(string sessionID, AddOfferRequestData offerRequest, + protected ItemEventRouterResponse CreateSingleOffer(string sessionID, AddOfferRequestData offerRequest, SptProfile fullProfile, ItemEventRouterResponse output) { @@ -874,7 +874,7 @@ public class RagfairController * @param output IItemEventRouterResponse * @returns True if charging tax to player failed */ - private bool ChargePlayerTaxFee( + protected bool ChargePlayerTaxFee( string sessionId, Item rootItem, PmcData pmcData, @@ -917,7 +917,7 @@ public class RagfairController return false; } - private RagfairOffer CreatePlayerOffer(string sessionId, List requirements, List items, + protected RagfairOffer CreatePlayerOffer(string sessionId, List requirements, List items, bool sellInOnePiece) { const int loyalLevel = 1; @@ -962,7 +962,7 @@ public class RagfairController * @param requirements * @returns Rouble price */ - private double CalculateRequirementsPriceInRub(List requirements) + protected double CalculateRequirementsPriceInRub(List requirements) { return requirements.Sum(requirement => { @@ -978,7 +978,7 @@ public class RagfairController ); } - private GetItemsToListOnFleaFromInventoryResult GetItemsToListOnFleaFromInventory(PmcData pmcData, + protected GetItemsToListOnFleaFromInventoryResult GetItemsToListOnFleaFromInventory(PmcData pmcData, List itemIdsFromFleaOfferRequest) { List> itemsToReturn = []; @@ -1157,7 +1157,7 @@ public class RagfairController * @param value Amount of currency * @returns IProcessBuyTradeRequestData */ - private ProcessBuyTradeRequestData CreateBuyTradeRequestObject(CurrencyType currency, double value) + protected ProcessBuyTradeRequestData CreateBuyTradeRequestObject(CurrencyType currency, double value) { return new ProcessBuyTradeRequestData { diff --git a/Libraries/Core/Controllers/RepeatableQuestController.cs b/Libraries/Core/Controllers/RepeatableQuestController.cs index 6c930a58..b3c9fd79 100644 --- a/Libraries/Core/Controllers/RepeatableQuestController.cs +++ b/Libraries/Core/Controllers/RepeatableQuestController.cs @@ -223,7 +223,7 @@ public class RepeatableQuestController( * @param repeatablesOfTypeInProfile The repeatables that have the replaced and new quest * @param replacedQuestId Id of the replaced quest */ - private void CleanUpRepeatableChangeRequirements(PmcDataRepeatableQuest repeatablesOfTypeInProfile, + protected void CleanUpRepeatableChangeRequirements(PmcDataRepeatableQuest repeatablesOfTypeInProfile, string replacedQuestId) { if (repeatablesOfTypeInProfile.ActiveQuests.Count == 1) @@ -239,7 +239,7 @@ public class RepeatableQuestController( } } - private RepeatableQuest? AttemptToGenerateRepeatableQuest(string sessionId, PmcData pmcData, + protected RepeatableQuest? AttemptToGenerateRepeatableQuest(string sessionId, PmcData pmcData, QuestTypePool questTypePool, RepeatableQuestConfig repeatableConfig) { const int maxAttempts = 10; @@ -272,7 +272,7 @@ public class RepeatableQuestController( return newRepeatableQuest; } - private void RemoveQuestFromProfile(SptProfile? fullProfile, string questToReplaceId) + protected void RemoveQuestFromProfile(SptProfile? fullProfile, string questToReplaceId) { // Find quest we're replacing in pmc profile quests array and remove it _questHelper.FindAndRemoveQuestFromArrayIfExists(questToReplaceId, fullProfile.CharacterData.PmcData.Quests); @@ -446,7 +446,7 @@ public class RepeatableQuestController( return returnData; } - private PmcDataRepeatableQuest GetRepeatableQuestSubTypeFromProfile(RepeatableQuestConfig repeatableConfig, + protected PmcDataRepeatableQuest GetRepeatableQuestSubTypeFromProfile(RepeatableQuestConfig repeatableConfig, PmcData pmcData) { // Get from profile, add if missing @@ -475,7 +475,7 @@ public class RepeatableQuestController( return repeatableQuestDetails; } - private bool CanProfileAccessRepeatableQuests(RepeatableQuestConfig repeatableConfig, PmcData pmcData) + protected bool CanProfileAccessRepeatableQuests(RepeatableQuestConfig repeatableConfig, PmcData pmcData) { // PMC and daily quests not unlocked yet if (repeatableConfig.Side == "Pmc" && !PlayerHasDailyPmcQuestsUnlocked(pmcData, repeatableConfig)) @@ -503,7 +503,7 @@ public class RepeatableQuestController( * @param repeatableConfig Config of daily type to check * @returns True if unlocked */ - private bool PlayerHasDailyPmcQuestsUnlocked(PmcData pmcData, RepeatableQuestConfig repeatableConfig) + protected static bool PlayerHasDailyPmcQuestsUnlocked(PmcData pmcData, RepeatableQuestConfig repeatableConfig) { return pmcData.Info.Level >= repeatableConfig.MinPlayerLevel; } @@ -513,14 +513,14 @@ public class RepeatableQuestController( * @param pmcData Player profile to check * @returns True if unlocked */ - private bool PlayerHasDailyScavQuestsUnlocked(PmcData pmcData) + protected bool PlayerHasDailyScavQuestsUnlocked(PmcData pmcData) { return pmcData?.Hideout?.Areas?.FirstOrDefault(hideoutArea => hideoutArea.Type == HideoutAreas.INTEL_CENTER) ?.Level >= 1; } - private void ProcessExpiredQuests(PmcDataRepeatableQuest generatedRepeatables, PmcData pmcData) + protected void ProcessExpiredQuests(PmcDataRepeatableQuest generatedRepeatables, PmcData pmcData) { var questsToKeep = new List(); foreach (var activeQuest in generatedRepeatables.ActiveQuests) @@ -558,7 +558,7 @@ public class RepeatableQuestController( generatedRepeatables.ActiveQuests = questsToKeep; } - private QuestTypePool GenerateQuestPool(RepeatableQuestConfig repeatableConfig, int? pmcLevel) + protected QuestTypePool GenerateQuestPool(RepeatableQuestConfig repeatableConfig, int? pmcLevel) { var questPool = CreateBaseQuestPool(repeatableConfig); @@ -617,7 +617,7 @@ public class RepeatableQuestController( return questPool; } - private QuestTypePool CreateBaseQuestPool(RepeatableQuestConfig repeatableConfig) + protected QuestTypePool CreateBaseQuestPool(RepeatableQuestConfig repeatableConfig) { return new QuestTypePool { @@ -640,7 +640,7 @@ public class RepeatableQuestController( }; } - private Dictionary> GetAllowedLocationsForPmcLevel( + protected Dictionary> GetAllowedLocationsForPmcLevel( Dictionary> locations, int pmcLevel) { var allowedLocation = new Dictionary>(); @@ -694,7 +694,7 @@ public class RepeatableQuestController( /// /// Player profile /// Quest count - private int GetQuestCount(RepeatableQuestConfig repeatableConfig, PmcData pmcData) + protected int GetQuestCount(RepeatableQuestConfig repeatableConfig, PmcData pmcData) { var questCount = repeatableConfig.NumQuests.GetValueOrDefault(0); if (questCount == 0) diff --git a/Libraries/Core/Controllers/TradeController.cs b/Libraries/Core/Controllers/TradeController.cs index bc533351..06169e1e 100644 --- a/Libraries/Core/Controllers/TradeController.cs +++ b/Libraries/Core/Controllers/TradeController.cs @@ -43,9 +43,9 @@ public class TradeController( /// /// Handle TradingConfirm event /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse ConfirmTrading( PmcData pmcData, @@ -82,9 +82,9 @@ public class TradeController( /// /// Handle RagFairBuyOffer event /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse ConfirmRagfairTrading( PmcData pmcData, @@ -141,7 +141,7 @@ public class TradeController( /// Offer being purchased /// request data from client /// Output to send back to client - private void BuyTraderItemFromRagfair( + protected void BuyTraderItemFromRagfair( string sessionId, PmcData pmcData, RagfairOffer fleaOffer, @@ -187,7 +187,7 @@ public class TradeController( /// Offer being purchased /// request data from client /// Output to send back to client - private void BuyPmcItemFromRagfair( + protected void BuyPmcItemFromRagfair( string sessionId, PmcData pmcData, RagfairOffer fleaOffer, @@ -234,11 +234,11 @@ public class TradeController( /// id of the offer /// Owner id /// true if offer was made by a player - private bool IsPlayerOffer( + protected bool IsPlayerOffer( string offerId, string? offerOwnerId) { - // No ownerid, not player offer + // No ownerId, not player offer if (offerOwnerId is null) { return false; @@ -261,7 +261,7 @@ public class TradeController( /// Flea offer being bought /// Player profile /// True if player can buy offer - private bool PlayerLacksTraderLoyaltyLevelToBuyOffer( + protected bool PlayerLacksTraderLoyaltyLevelToBuyOffer( RagfairOffer fleaOffer, PmcData pmcData) { @@ -271,9 +271,9 @@ public class TradeController( /// /// Handle SellAllFromSavage event /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse SellScavItemsToFence( PmcData pmcData, @@ -293,7 +293,7 @@ public class TradeController( /// Session id /// amount of roubles to send /// Trader to sell items to - private void MailMoneyToPlayer( + protected void MailMoneyToPlayer( string sessionId, int roublesToSend, string trader) @@ -336,7 +336,7 @@ public class TradeController( /// Prices of items from handbook /// Trader being sold to, to perform buy category check against /// Rouble price - private int GetPriceOfItemAndChildren( + protected int GetPriceOfItemAndChildren( string parentItemId, List items, Dictionary handbookPrices, diff --git a/Libraries/Core/Controllers/TraderController.cs b/Libraries/Core/Controllers/TraderController.cs index 5ef5e1e7..0a1b8b7d 100644 --- a/Libraries/Core/Controllers/TraderController.cs +++ b/Libraries/Core/Controllers/TraderController.cs @@ -80,11 +80,16 @@ public class TraderController( } } + /// + /// Adjust trader item prices based on config value multiplier + /// + /// + /// protected void AdjustTraderItemPrices(Trader trader, double multiplier) { foreach (var kvp in trader.Assort?.BarterScheme) { - var barterSchemeItem = kvp.Value[0][0]; + var barterSchemeItem = kvp.Value?.FirstOrDefault()?.FirstOrDefault(); if (barterSchemeItem != null && _paymentHelper.IsMoneyTpl(barterSchemeItem.Template)) { barterSchemeItem.Count += Math.Round( @@ -100,7 +105,7 @@ public class TraderController( /// If current time is > nextResupply(expire) time of trader, refresh traders assorts and /// Fence is handled slightly differently /// - /// + /// True if ran successfully public bool Update() { foreach (var (traderId, data) in _databaseService.GetTables().Traders) @@ -157,12 +162,12 @@ public class TraderController( } /// - /// Order traders by their traderId (Ttid) + /// Order traders by their traderId (tid) /// /// First trader to compare /// Second trader to compare /// 1,-1 or 0 - private int SortByTraderId(TraderBase traderA, TraderBase traderB) + protected static int SortByTraderId(TraderBase traderA, TraderBase traderB) { return string.CompareOrdinal(traderA.Id, traderB.Id); } @@ -170,7 +175,7 @@ public class TraderController( /// /// Handle client/trading/api/getTrader /// - /// + /// Session/Player id /// /// public TraderBase GetTrader(string sessionId, string traderId) @@ -181,7 +186,7 @@ public class TraderController( /// /// Handle client/trading/api/getTraderAssort /// - /// + /// Session/Player id /// /// public TraderAssort GetAssort(string sessionId, string traderId) diff --git a/Libraries/Core/Controllers/WeatherController.cs b/Libraries/Core/Controllers/WeatherController.cs index 637dd972..a3ec9e93 100644 --- a/Libraries/Core/Controllers/WeatherController.cs +++ b/Libraries/Core/Controllers/WeatherController.cs @@ -27,7 +27,7 @@ public class WeatherController( /// /// Handle client/weather /// - /// + /// WeatherData public WeatherData Generate() { var result = new WeatherData @@ -48,8 +48,8 @@ public class WeatherController( /// /// Handle client/localGame/weather /// - /// - /// + /// Session/Player id + /// GetLocalWeatherResponseData public GetLocalWeatherResponseData GenerateLocal(string sessionId) { var result = new GetLocalWeatherResponseData diff --git a/Libraries/Core/Controllers/WishlistController.cs b/Libraries/Core/Controllers/WishlistController.cs index 5e98bb4e..28001f29 100644 --- a/Libraries/Core/Controllers/WishlistController.cs +++ b/Libraries/Core/Controllers/WishlistController.cs @@ -14,9 +14,9 @@ public class WishlistController( /// /// Handle AddToWishList /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse AddToWishList( PmcData pmcData, @@ -34,9 +34,9 @@ public class WishlistController( /// /// Handle RemoveFromWishList event /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse RemoveFromWishList( PmcData pmcData, @@ -54,9 +54,9 @@ public class WishlistController( /// /// Handle changeWishlistItemCategory event /// - /// + /// Players PMC profile /// - /// + /// Session/Player id /// public ItemEventRouterResponse ChangeWishListItemCategory( PmcData pmcData, diff --git a/Libraries/Core/Generators/BotEquipmentModGenerator.cs b/Libraries/Core/Generators/BotEquipmentModGenerator.cs index 5e0ca9c5..189377b1 100644 --- a/Libraries/Core/Generators/BotEquipmentModGenerator.cs +++ b/Libraries/Core/Generators/BotEquipmentModGenerator.cs @@ -372,7 +372,7 @@ public class BotEquipmentModGenerator( return result; } - private MinMax GetMinMaxArmorPlateClass(List platePool) + protected static MinMax GetMinMaxArmorPlateClass(List platePool) { platePool.Sort( (x, y) => diff --git a/Libraries/Core/Generators/BotLootGenerator.cs b/Libraries/Core/Generators/BotLootGenerator.cs index 5d7df60a..a2f7d7c7 100644 --- a/Libraries/Core/Generators/BotLootGenerator.cs +++ b/Libraries/Core/Generators/BotLootGenerator.cs @@ -39,7 +39,7 @@ public class BotLootGenerator( /// /// /// - private ItemSpawnLimitSettings GetItemSpawnLimitsForBot(string botRole) + protected ItemSpawnLimitSettings GetItemSpawnLimitsForBot(string botRole) { var limits = GetItemSpawnLimitsForBotType(botRole); @@ -329,7 +329,7 @@ public class BotLootGenerator( } } - private MinMaxLootItemValue? GetSingleItemLootPriceLimits(int botLevel, bool isPmc) + protected MinMaxLootItemValue? GetSingleItemLootPriceLimits(int botLevel, bool isPmc) { // TODO - extend to other bot types if (!isPmc) @@ -351,7 +351,7 @@ public class BotLootGenerator( /// Bots level /// Is the bot a PMC /// int - private double? GetBackpackRoubleTotalByLevel(int botLevel, bool isPmc) + protected double? GetBackpackRoubleTotalByLevel(int botLevel, bool isPmc) { if (!isPmc) { @@ -368,7 +368,7 @@ public class BotLootGenerator( /// /// /// - private HashSet GetAvailableContainersBotCanStoreItemsIn(BotBaseInventory botInventory) + protected HashSet GetAvailableContainersBotCanStoreItemsIn(BotBaseInventory botInventory) { HashSet result = [EquipmentSlots.Pockets]; @@ -390,7 +390,7 @@ public class BotLootGenerator( /// /// Inventory to add items to /// Role of bot (pmcBEAR/pmcUSEC) - private void AddForcedMedicalItemsToPmcSecure(BotBaseInventory botInventory, string botRole) + protected void AddForcedMedicalItemsToPmcSecure(BotBaseInventory botInventory, string botRole) { // surv12 AddLootFromPool( @@ -435,7 +435,7 @@ public class BotLootGenerator( /// /// Total value of loot allowed in roubles /// Is bot being generated for a pmc - private void AddLootFromPool + protected void AddLootFromPool ( Dictionary pool, HashSet equipmentSlots, @@ -663,7 +663,7 @@ public class BotLootGenerator( /// /// Add generated weapons to inventory as loot /// - /// + /// Session/Player id /// Inventory to add preset to /// Slot to place the preset in (backpack) /// Bots template, assault.json @@ -738,7 +738,7 @@ public class BotLootGenerator( /// Bot type /// /// true if item has reached spawn limit - private bool ItemHasReachedSpawnLimit(TemplateItem? itemTemplate, string botRole, ItemSpawnLimitSettings? itemSpawnLimits) + protected bool ItemHasReachedSpawnLimit(TemplateItem? itemTemplate, string botRole, ItemSpawnLimitSettings? itemSpawnLimits) { // PMCs and scavs have different sections of bot config for spawn limits if (itemSpawnLimits is not null && itemSpawnLimits.GlobalLimits?.Count == 0) diff --git a/Libraries/Core/Generators/BotWeaponGenerator.cs b/Libraries/Core/Generators/BotWeaponGenerator.cs index 310bbcd5..efb65a01 100644 --- a/Libraries/Core/Generators/BotWeaponGenerator.cs +++ b/Libraries/Core/Generators/BotWeaponGenerator.cs @@ -40,7 +40,7 @@ public class BotWeaponGenerator( protected PmcConfig _pmcConfig = _configServer.GetConfig(); protected RepairConfig _repairConfig = _configServer.GetConfig(); - private static List MagGenSetUp(IEnumerable components) + protected static List MagGenSetUp(IEnumerable components) { var inventoryMagGens = components.ToList(); inventoryMagGens.Sort((a, b) => a.GetPriority() - b.GetPriority()); diff --git a/Libraries/Core/Generators/LocationLootGenerator.cs b/Libraries/Core/Generators/LocationLootGenerator.cs index 5c19982e..a6193699 100644 --- a/Libraries/Core/Generators/LocationLootGenerator.cs +++ b/Libraries/Core/Generators/LocationLootGenerator.cs @@ -978,7 +978,7 @@ public class LocationLootGenerator( } } - private ContainerItem CreateDynamicLootItem(string? chosenComposedKey, List items, Dictionary> staticAmmoDist) + protected ContainerItem CreateDynamicLootItem(string? chosenComposedKey, List items, Dictionary> staticAmmoDist) { var chosenItem = items.FirstOrDefault(item => item.Id == chosenComposedKey); var chosenTpl = chosenItem?.Template; @@ -1168,7 +1168,7 @@ public class LocationLootGenerator( }; } - private List GetArmorItems(string chosenTpl, Item? rootItem, List items, TemplateItem armorDbTemplate) + protected List GetArmorItems(string chosenTpl, Item? rootItem, List items, TemplateItem armorDbTemplate) { var defaultPreset = _presetHelper.GetDefaultPreset(chosenTpl); if (defaultPreset is not null) @@ -1196,7 +1196,7 @@ public class LocationLootGenerator( return items; } - private Item? CreateWeaponItems(string chosenTpl, Dictionary> staticAmmoDist, string? parentId, ref List items) + protected Item? CreateWeaponItems(string chosenTpl, Dictionary> staticAmmoDist, string? parentId, ref List items) { Item? rootItem; List children = []; @@ -1309,7 +1309,7 @@ public class LocationLootGenerator( return rootItem; } - private void GenerateStaticMagazineItem(Dictionary> staticAmmoDist, Item? rootItem, TemplateItem itemTemplate, + protected void GenerateStaticMagazineItem(Dictionary> staticAmmoDist, Item? rootItem, TemplateItem itemTemplate, List items) { List magazineWithCartridges = [rootItem]; diff --git a/Libraries/Core/Generators/LootGenerator.cs b/Libraries/Core/Generators/LootGenerator.cs index 7777bf12..5fe1f2f4 100644 --- a/Libraries/Core/Generators/LootGenerator.cs +++ b/Libraries/Core/Generators/LootGenerator.cs @@ -299,7 +299,7 @@ public class LootGenerator( /// /// limits as defined in config /// record, key: item tplId, value: current/max item count allowed - private Dictionary InitItemLimitCounter(Dictionary limits) + protected Dictionary InitItemLimitCounter(Dictionary limits) { var itemTypeCounts = new Dictionary(); foreach (var itemTypeId in limits) diff --git a/Libraries/Core/Generators/PMCLootGenerator.cs b/Libraries/Core/Generators/PMCLootGenerator.cs index d9330fc0..a923a028 100644 --- a/Libraries/Core/Generators/PMCLootGenerator.cs +++ b/Libraries/Core/Generators/PMCLootGenerator.cs @@ -106,7 +106,7 @@ public class PMCLootGenerator return _pocketLootPool; } - private HashSet GetLootBlacklist() + protected HashSet GetLootBlacklist() { var blacklist = new HashSet(); blacklist.UnionWith(_pmcConfig.PocketLoot.Blacklist); diff --git a/Libraries/Core/Generators/RepeatableQuestRewardGenerator.cs b/Libraries/Core/Generators/RepeatableQuestRewardGenerator.cs index d4022c46..31c15ecc 100644 --- a/Libraries/Core/Generators/RepeatableQuestRewardGenerator.cs +++ b/Libraries/Core/Generators/RepeatableQuestRewardGenerator.cs @@ -215,7 +215,7 @@ public class RepeatableQuestRewardGenerator( return rewards; } - private QuestRewardValues GetQuestRewardValues(RewardScaling? rewardScaling, double? difficulty, int pmcLevel) + protected QuestRewardValues GetQuestRewardValues(RewardScaling? rewardScaling, double? difficulty, int pmcLevel) { // difficulty could go from 0.2 ... -> for lowest difficulty receive 0.2*nominal reward var levelsConfig = rewardScaling.Levels; @@ -264,7 +264,7 @@ public class RepeatableQuestRewardGenerator( }; } - private double GetRewardXp(double? effectiveDifficulty, int pmcLevel, List? levelsConfig, + protected double GetRewardXp(double? effectiveDifficulty, int pmcLevel, List? levelsConfig, List? xpConfig, double? rewardSpreadConfig) { return Math.Floor( @@ -275,7 +275,7 @@ public class RepeatableQuestRewardGenerator( ); } - private double GetGpCoinRewardCount(double? effectiveDifficulty, int pmcLevel, List? levelsConfig, + protected double GetGpCoinRewardCount(double? effectiveDifficulty, int pmcLevel, List? levelsConfig, List? gpCoinConfig, double? rewardSpreadConfig) { @@ -287,7 +287,7 @@ public class RepeatableQuestRewardGenerator( ); } - private double GetRewardRep(double? effectiveDifficulty, int pmcLevel, List? levelsConfig, + protected double GetRewardRep(double? effectiveDifficulty, int pmcLevel, List? levelsConfig, List? reputationConfig, double? rewardSpreadConfig) { @@ -301,12 +301,12 @@ public class RepeatableQuestRewardGenerator( 100; } - private int GetRewardNumItems(int pmcLevel, List? levelsConfig, List? itemsConfig) + protected int GetRewardNumItems(int pmcLevel, List? levelsConfig, List? itemsConfig) { return _randomUtil.RandInt(1, (int) Math.Round(_mathUtil.Interp1(pmcLevel, levelsConfig, itemsConfig) ?? 0) + 1); } - private double GetRewardRoubles(double? effectiveDifficulty, int pmcLevel, List? levelsConfig, + protected double GetRewardRoubles(double? effectiveDifficulty, int pmcLevel, List? levelsConfig, List? roublesConfig, double? rewardSpreadConfig) { @@ -318,7 +318,7 @@ public class RepeatableQuestRewardGenerator( ); } - private Dictionary GetRewardableItemsFromPoolWithinBudget(List itemPool, + protected Dictionary GetRewardableItemsFromPoolWithinBudget(List itemPool, int maxItemCount, double itemRewardBudget, RepeatableQuestConfig repeatableConfig) { var itemsToReturn = new Dictionary(); @@ -404,7 +404,7 @@ public class RepeatableQuestRewardGenerator( * @param rewardNumItems * @returns Count that fits budget (min 1) */ - private int CalculateAmmoStackSizeThatFitsBudget(TemplateItem itemSelected, double roublesBudget, + protected int CalculateAmmoStackSizeThatFitsBudget(TemplateItem itemSelected, double roublesBudget, int rewardNumItems) { // Calculate budget per reward item @@ -422,7 +422,7 @@ public class RepeatableQuestRewardGenerator( return (int) Math.Max(1, Math.Min(stackSizeThatFitsBudget, stackMaxCount)); } - private bool CanIncreaseRewardItemStackSize(TemplateItem item, int maxRoublePriceToStack, + protected bool CanIncreaseRewardItemStackSize(TemplateItem item, int maxRoublePriceToStack, int randomChanceToPass = 100) { var isEligibleForStackSizeIncrease = @@ -445,7 +445,7 @@ public class RepeatableQuestRewardGenerator( * @param item Reward item to get stack size for * @returns matching stack size for the passed in items price */ - private int GetRandomisedRewardItemStackSizeByPrice(TemplateItem item) + protected int GetRandomisedRewardItemStackSizeByPrice(TemplateItem item) { var rewardItemPrice = _presetHelper.GetDefaultPresetOrItemPrice(item.Id); @@ -474,7 +474,7 @@ public class RepeatableQuestRewardGenerator( * @param traderId Id of the trader who will give player reward * @returns Array of reward items that fit budget */ - private List ChooseRewardItemsWithinBudget(RepeatableQuestConfig repeatableConfig, + protected List ChooseRewardItemsWithinBudget(RepeatableQuestConfig repeatableConfig, double? roublesBudget, string traderId) { // First filter for type and baseclass to avoid lookup in handbook for non-available items @@ -515,7 +515,7 @@ public class RepeatableQuestRewardGenerator( * @param minPrice The minimum priced item to include * @returns True if any items remain in `rewardItems`, false otherwise */ - private List FilterRewardPoolWithinBudget(List rewardItems, double roublesBudget, + protected List FilterRewardPoolWithinBudget(List rewardItems, double roublesBudget, double minPrice) { return rewardItems.Where( @@ -528,7 +528,7 @@ public class RepeatableQuestRewardGenerator( .ToList(); } - private KeyValuePair? GetRandomWeaponPresetWithinBudget(double roublesBudget, int rewardIndex) + protected KeyValuePair? GetRandomWeaponPresetWithinBudget(double roublesBudget, int rewardIndex) { // Add a random default preset weapon as reward var defaultPresetPool = new ExhaustableArray( @@ -652,7 +652,7 @@ public class RepeatableQuestRewardGenerator( return questRewardItem; } - private Reward GetMoneyReward(string traderId, double rewardRoubles, int rewardIndex) + protected Reward GetMoneyReward(string traderId, double rewardRoubles, int rewardIndex) { // Determine currency based on trader // PK and Fence use Euros, everyone else is Roubles @@ -720,7 +720,7 @@ public class RepeatableQuestRewardGenerator( * @param {string} tpl template id of item to check * @returns True if item is valid reward */ - private bool IsValidRewardItem(string tpl, RepeatableQuestConfig repeatableQuestConfig, + protected bool IsValidRewardItem(string tpl, RepeatableQuestConfig repeatableQuestConfig, List? itemBaseWhitelist = null) { // Return early if not valid item to give as reward diff --git a/Libraries/Core/Helpers/BotGeneratorHelper.cs b/Libraries/Core/Helpers/BotGeneratorHelper.cs index 88ead939..ba4622bf 100644 --- a/Libraries/Core/Helpers/BotGeneratorHelper.cs +++ b/Libraries/Core/Helpers/BotGeneratorHelper.cs @@ -193,7 +193,7 @@ public class BotGeneratorHelper( /// Max resource value of medical items /// Value provided from config /// Randomized value from maxHpResource - private double GetRandomizedResourceValue(double maxResource, RandomisedResourceValues? randomizationValues) + protected double GetRandomizedResourceValue(double maxResource, RandomisedResourceValues? randomizationValues) { if (randomizationValues is null) { @@ -218,7 +218,7 @@ public class BotGeneratorHelper( /// the setting of the weapon attachment/helmet equipment to be activated /// default value for the chance of activation if the botrole or bot equipment role is undefined /// Percent chance to be active - private double? GetBotEquipmentSettingFromConfig(string? botRole, string setting, double defaultValue) + protected double? GetBotEquipmentSettingFromConfig(string? botRole, string setting, double defaultValue) { if (botRole is null) { @@ -273,7 +273,7 @@ public class BotGeneratorHelper( /// weapon object being generated for /// type of bot being generated for /// Repairable object - private UpdRepairable GenerateWeaponRepairableProperties(TemplateItem itemTemplate, string? botRole = null) + protected UpdRepairable GenerateWeaponRepairableProperties(TemplateItem itemTemplate, string? botRole = null) { var maxDurability = _durabilityLimitsHelper.GetRandomizedMaxWeaponDurability(itemTemplate, botRole); var currentDurability = _durabilityLimitsHelper.GetRandomizedWeaponDurability( @@ -295,7 +295,7 @@ public class BotGeneratorHelper( /// weapon object being generated for /// type of bot being generated for /// Repairable object - private UpdRepairable GenerateArmorRepairableProperties(TemplateItem itemTemplate, string? botRole = null) + protected UpdRepairable GenerateArmorRepairableProperties(TemplateItem itemTemplate, string? botRole = null) { double maxDurability; double currentDurability; @@ -724,7 +724,7 @@ public class BotGeneratorHelper( /// Items sub-grid we want to place item inside /// Item tpl being placed /// True if allowed - private bool ItemAllowedInContainer(Grid? slotGrid, string? itemTpl) + protected bool ItemAllowedInContainer(Grid? slotGrid, string? itemTpl) { var propFilters = slotGrid?.Props?.Filters; var excludedFilter = propFilters?.FirstOrDefault()?.ExcludedFilter ?? []; diff --git a/Libraries/Core/Helpers/ContainerHelper.cs b/Libraries/Core/Helpers/ContainerHelper.cs index 7b943bb0..98ca55a6 100644 --- a/Libraries/Core/Helpers/ContainerHelper.cs +++ b/Libraries/Core/Helpers/ContainerHelper.cs @@ -66,7 +66,7 @@ public class ContainerHelper return new FindSlotResult(false); } - private bool ItemBiggerThan1X1(int itemWidth, int itemHeight) + protected static bool ItemBiggerThan1X1(int itemWidth, int itemHeight) { return itemWidth * itemHeight > 1; } diff --git a/Libraries/Core/Helpers/Dialogue/AbstractDialogChatBot.cs b/Libraries/Core/Helpers/Dialogue/AbstractDialogChatBot.cs index badecb68..798a05a1 100644 --- a/Libraries/Core/Helpers/Dialogue/AbstractDialogChatBot.cs +++ b/Libraries/Core/Helpers/Dialogue/AbstractDialogChatBot.cs @@ -50,7 +50,7 @@ public abstract class AbstractDialogChatBot( return null; } - private string? SendPlayerHelpMessage(string sessionId, SendMessageRequest request) + protected string? SendPlayerHelpMessage(string sessionId, SendMessageRequest request) { _mailSendService.SendUserMessageToPlayer( sessionId, diff --git a/Libraries/Core/Helpers/Dialogue/SptDialogueChatBot.cs b/Libraries/Core/Helpers/Dialogue/SptDialogueChatBot.cs index 1d82345d..852adb17 100644 --- a/Libraries/Core/Helpers/Dialogue/SptDialogueChatBot.cs +++ b/Libraries/Core/Helpers/Dialogue/SptDialogueChatBot.cs @@ -73,7 +73,7 @@ public class SptDialogueChatBot( return request.DialogId; } - private static List ChatMessageHandlerSetup(IEnumerable components) + protected static List ChatMessageHandlerSetup(IEnumerable components) { var chatMessageHandlers = components.ToList(); chatMessageHandlers.Sort((a, b) => a.GetPriority() - b.GetPriority()); @@ -81,12 +81,12 @@ public class SptDialogueChatBot( return chatMessageHandlers; } - private string GetUnrecognizedCommandMessage() + protected string GetUnrecognizedCommandMessage() { return "Unknown command."; } - private string? SendPlayerHelpMessage(string sessionId, SendMessageRequest request) + protected string? SendPlayerHelpMessage(string sessionId, SendMessageRequest request) { _mailSendService.SendUserMessageToPlayer( sessionId, diff --git a/Libraries/Core/Helpers/DialogueHelper.cs b/Libraries/Core/Helpers/DialogueHelper.cs index 5b605e3b..aac1433a 100644 --- a/Libraries/Core/Helpers/DialogueHelper.cs +++ b/Libraries/Core/Helpers/DialogueHelper.cs @@ -54,7 +54,7 @@ public class DialogueHelper( /// Get the item contents for a particular message. /// /// - /// + /// Session/player id /// Item being moved to inventory /// public List GetMessageItemContents(string messageID, string sessionID, string itemId) diff --git a/Libraries/Core/Helpers/DurabilityLimitsHelper.cs b/Libraries/Core/Helpers/DurabilityLimitsHelper.cs index f7100718..9aa3e8ae 100644 --- a/Libraries/Core/Helpers/DurabilityLimitsHelper.cs +++ b/Libraries/Core/Helpers/DurabilityLimitsHelper.cs @@ -76,11 +76,11 @@ public class DurabilityLimitsHelper( } /// - /// Convert a botrole into a durability role used for looking up durability values with + /// Convert a bots role into a durability role used for looking up durability values with /// /// Role to convert /// - private string GetDurabilityRole(string? botRole) + protected string GetDurabilityRole(string? botRole) { if (botRole is null) { diff --git a/Libraries/Core/Helpers/InventoryHelper.cs b/Libraries/Core/Helpers/InventoryHelper.cs index bbc482b7..d9d64f29 100644 --- a/Libraries/Core/Helpers/InventoryHelper.cs +++ b/Libraries/Core/Helpers/InventoryHelper.cs @@ -366,7 +366,7 @@ public class InventoryHelper( } catch (Exception ex) { - handleContainerPlacementError(ex.Message, output); + HandleContainerPlacementError(ex.Message, output); return; } @@ -408,7 +408,7 @@ public class InventoryHelper( } catch (Exception ex) { - handleContainerPlacementError(ex.Message, output); + HandleContainerPlacementError(ex.Message, output); return; } @@ -433,7 +433,7 @@ public class InventoryHelper( } } - private void handleContainerPlacementError(string errorText, ItemEventRouterResponse output) + protected void HandleContainerPlacementError(string errorText, ItemEventRouterResponse output) { _logger.Error(_localisationService.GetText("inventory-fill_container_failed", errorText)); @@ -1290,7 +1290,7 @@ public class InventoryHelper( return IsParentInStash(itemToCheck.Id, pmcData); } - private bool IsParentInStash(string itemId, PmcData pmcData) + protected static bool IsParentInStash(string itemId, PmcData pmcData) { // Item not found / has no parent var item = pmcData.Inventory.Items.FirstOrDefault(item => item.Id == itemId); diff --git a/Libraries/Core/Helpers/NotificationSendHelper.cs b/Libraries/Core/Helpers/NotificationSendHelper.cs index cf615ff9..ff6c5ed7 100644 --- a/Libraries/Core/Helpers/NotificationSendHelper.cs +++ b/Libraries/Core/Helpers/NotificationSendHelper.cs @@ -21,7 +21,7 @@ public class NotificationSendHelper( /// /// Send notification message to the appropriate channel /// - /// + /// Session/player id /// public void SendMessage(string sessionID, WsNotificationEvent notificationMessage) { diff --git a/Libraries/Core/Helpers/ProfileHelper.cs b/Libraries/Core/Helpers/ProfileHelper.cs index 49649b9a..89691990 100644 --- a/Libraries/Core/Helpers/ProfileHelper.cs +++ b/Libraries/Core/Helpers/ProfileHelper.cs @@ -61,7 +61,7 @@ public class ProfileHelper( /// /// Get the pmc and scav profiles as an array by profile id /// - /// + /// Session/Player id /// Array of PmcData objects public List GetCompleteProfile(string sessionId) { diff --git a/Libraries/Core/Services/NotificationService.cs b/Libraries/Core/Services/NotificationService.cs index 81593563..c4acb587 100644 --- a/Libraries/Core/Services/NotificationService.cs +++ b/Libraries/Core/Services/NotificationService.cs @@ -52,7 +52,7 @@ public class NotificationService /// /// Get message queue for session /// - /// + /// Session/player id public List Get(string sessionID) { if (sessionID is null) diff --git a/Libraries/Core/Services/RepairService.cs b/Libraries/Core/Services/RepairService.cs index f9191348..0dc9aad1 100644 --- a/Libraries/Core/Services/RepairService.cs +++ b/Libraries/Core/Services/RepairService.cs @@ -122,7 +122,7 @@ public class RepairService( /// Repaired item id /// Cost to repair item in roubles /// Id of the trader who repaired the item / who is paid - /// + /// Client response public void PayForRepair( string sessionID, PmcData pmcData,