Skip to main content
The Deno 2 Release Candidate is here
Learn more
class RepeatableQuestRewardGenerator
import { RepeatableQuestRewardGenerator } from "https://deno.land/x/sptaki@1.2.0/generators/RepeatableQuestRewardGenerator.d.ts";

Constructors

new
RepeatableQuestRewardGenerator(
logger: ILogger,
randomUtil: RandomUtil,
mathUtil: MathUtil,
jsonUtil: JsonUtil,
databaseServer: DatabaseServer,
itemHelper: ItemHelper,
presetHelper: PresetHelper,
handbookHelper: HandbookHelper,
localisationService: LocalisationService,
objectId: ObjectId,
itemFilterService: ItemFilterService,
seasonalEventService: SeasonalEventService,
configServer: ConfigServer,
)

Properties

protected
configServer: ConfigServer
protected
databaseServer: DatabaseServer
protected
handbookHelper: HandbookHelper
protected
itemFilterService: ItemFilterService
protected
itemHelper: ItemHelper
protected
jsonUtil: JsonUtil
protected
localisationService: LocalisationService
protected
logger: ILogger
protected
mathUtil: MathUtil
protected
objectId: ObjectId
protected
presetHelper: PresetHelper
protected
questConfig: IQuestConfig
protected
randomUtil: RandomUtil
protected
seasonalEventService: SeasonalEventService

Methods

protected
addMoneyReward(
traderId: string,
rewards: IQuestRewards,
rewardRoubles: number,
rewardIndex: number,
): void
protected
calculateAmmoStackSizeThatFitsBudget(
itemSelected: ITemplateItem,
roublesBudget: number,
rewardNumItems: number,
): number
protected
canIncreaseRewardItemStackSize(item: ITemplateItem, maxRoublePriceToStack: number): boolean

Should reward item have stack size increased (25% chance)

protected
chooseRewardItemsWithinBudget(
repeatableConfig: IRepeatableQuestConfig,
roublesBudget: number,
traderId: string,
): ITemplateItem[]

Select a number of items that have a colelctive value of the passed in parameter

protected
filterRewardPoolWithinBudget(
rewardItems: ITemplateItem[],
roublesBudget: number,
minPrice: number,
): ITemplateItem[]
protected
generateRewardItem(
tpl: string,
value: number,
index: number,
preset?: Item[],
): IQuestReward

Helper to create a reward item structured as required by the client

Get a randomised number a reward items stack size should be based on its handbook price

protected
isValidRewardItem(
tpl: string,
repeatableQuestConfig: IRepeatableQuestConfig,
itemBaseWhitelist: string[],
): boolean

Checks if an id is a valid item. Valid meaning that it's an item that may be a reward or content of bot loot. Items that are tested as valid may be in a player backpack or stash.

generateReward(
pmcLevel: number,
difficulty: number,
traderId: string,
repeatableConfig: IRepeatableQuestConfig,
questConfig: IBaseQuestConfig,
): IQuestRewards

Generate the reward for a mission. A reward can consist of

  • Experience
  • Money
  • Items
  • Trader Reputation

The reward is dependent on the player level as given by the wiki. The exact mapping of pmcLevel to experience / money / items / trader reputation can be defined in QuestConfig.js

There's also a random variation of the reward the spread of which can be also defined in the config.

Additionally, a scaling factor w.r.t. quest difficulty going from 0.2...1 can be used

getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig, traderId: string): [string, ITemplateItem][]

Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable)