diff --git a/project/src/helpers/RagfairOfferHelper.ts b/project/src/helpers/RagfairOfferHelper.ts index cf2cc54b..d60e428e 100644 --- a/project/src/helpers/RagfairOfferHelper.ts +++ b/project/src/helpers/RagfairOfferHelper.ts @@ -74,19 +74,25 @@ export class RagfairOfferHelper * @param searchRequest Data from client * @param itemsToAdd ragfairHelper.filterCategories() * @param traderAssorts Trader assorts - * @param pmcProfile Player profile + * @param pmcData Player profile * @returns Offers the player should see */ public getValidOffers( searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, - pmcProfile: IPmcData, + pmcData: IPmcData, ): IRagfairOffer[] { return this.ragfairOfferService.getOffers().filter((offer) => - this.isDisplayableOffer(searchRequest, itemsToAdd, traderAssorts, offer, pmcProfile) - ); + { + if (!this.passesSearchFilterCriteria(searchRequest, offer, pmcData)) + { + return false; + } + + return this.isDisplayableOffer(searchRequest, itemsToAdd, traderAssorts, offer, pmcData); + }); } /** @@ -101,12 +107,8 @@ export class RagfairOfferHelper const requiredOffers = this.ragfairRequiredItemsService.getRequiredItemsById(searchRequest.neededSearchId); return requiredOffers.filter((offer: IRagfairOffer) => { - if ( - pmcData.Info.Level < this.databaseServer.getTables().globals.config.RagFair.minUserLevel - && offer.user.memberType === MemberCategory.DEFAULT - ) + if (!this.passesSearchFilterCriteria(searchRequest, offer, pmcData)) { - // Skip item if player is < global unlock level (default is 15) and item is from a dynamically generated source (non-trader) return false; } @@ -539,30 +541,25 @@ export class RagfairOfferHelper } /** - * Should a ragfair offer be visible to the player - * @param searchRequest Search request - * @param itemsToAdd ? - * @param traderAssorts Trader assort items - * @param offer The flea offer - * @param pmcProfile Player profile - * @returns True = should be shown to player + * Check an offer passes the various search criteria the player requested + * @param searchRequest + * @param offer + * @param pmcData + * @returns True */ - public isDisplayableOffer( + protected passesSearchFilterCriteria( searchRequest: ISearchRequestData, - itemsToAdd: string[], - traderAssorts: Record, offer: IRagfairOffer, - pmcProfile: IPmcData, + pmcData: IPmcData, ): boolean { + const isDefaultUserOffer = offer.user.memberType === MemberCategory.DEFAULT; const offerRootItem = offer.items[0]; - /** Currency offer is sold for */ const moneyTypeTpl = offer.requirements[0]._tpl; const isTraderOffer = offer.user.memberType === MemberCategory.TRADER; - const isDefaultUserOffer = offer.user.memberType === MemberCategory.DEFAULT; if ( - pmcProfile.Info.Level < this.databaseServer.getTables().globals.config.RagFair.minUserLevel + pmcData.Info.Level < this.databaseServer.getTables().globals.config.RagFair.minUserLevel && isDefaultUserOffer ) { @@ -570,30 +567,6 @@ export class RagfairOfferHelper return false; } - // Offer root items tpl not in searched for array - if (!itemsToAdd?.includes(offerRootItem._tpl)) - { - // skip items we shouldn't include - return false; - } - - // Performing a required search and offer doesn't have requirement for item - if (searchRequest.neededSearchId && !offer.requirements.some((x) => x._tpl === searchRequest.neededSearchId)) - { - return false; - } - - // Filter out presets when search request has multiple buildItems - // Assuming 1 build item = single item e.g. gun - if ( - searchRequest.buildCount && this.presetHelper.hasPreset(offerRootItem._tpl) - && Object.keys(searchRequest.buildItems).length > 1 - ) - { - // Don't include preset offer - return false; - } - if (searchRequest.offerOwnerType === OfferOwnerType.TRADEROWNERTYPE && !isTraderOffer) { // don't include player offers @@ -641,14 +614,6 @@ export class RagfairOfferHelper return false; } - // commented out as required search "which is for checking offers that are barters" - // has info.removeBartering as true, this if statement removed barter items. - if (searchRequest.removeBartering && !this.paymentHelper.isMoneyTpl(moneyTypeTpl)) - { - // don't include barter offers - return false; - } - if (searchRequest.currency > 0 && this.paymentHelper.isMoneyTpl(moneyTypeTpl)) { const currencies = ["all", "RUB", "USD", "EUR"]; @@ -672,6 +637,63 @@ export class RagfairOfferHelper return false; } + // Passes above checks, search criteria filters have not filtered offer out + return true; + } + + /** + * Should a ragfair offer be visible to the player + * @param searchRequest Search request + * @param itemsToAdd ? + * @param traderAssorts Trader assort items + * @param offer The flea offer + * @param pmcProfile Player profile + * @returns True = should be shown to player + */ + public isDisplayableOffer( + searchRequest: ISearchRequestData, + itemsToAdd: string[], + traderAssorts: Record, + offer: IRagfairOffer, + pmcProfile: IPmcData, + ): boolean + { + const offerRootItem = offer.items[0]; + /** Currency offer is sold for */ + const moneyTypeTpl = offer.requirements[0]._tpl; + + // Offer root items tpl not in searched for array + if (!itemsToAdd?.includes(offerRootItem._tpl)) + { + // skip items we shouldn't include + return false; + } + + // Performing a required search and offer doesn't have requirement for item + if (searchRequest.neededSearchId && !offer.requirements.some((x) => x._tpl === searchRequest.neededSearchId)) + { + return false; + } + + // Filter out presets when search request has multiple buildItems + // Assuming 1 build item = single item e.g. gun + if ( + searchRequest.buildCount && this.presetHelper.hasPreset(offerRootItem._tpl) + && Object.keys(searchRequest.buildItems).length > 1 + ) + { + // Don't include preset offer + return false; + } + + // commented out as required search "which is for checking offers that are barters" + // has info.removeBartering as true, this if statement removed barter items. + if (searchRequest.removeBartering && !this.paymentHelper.isMoneyTpl(moneyTypeTpl)) + { + // don't include barter offers + return false; + } + if (Number.isNaN(offer.requirementsCost)) { // don't include offers with null or NaN in it