Server/project/src/models/spt/config/IQuestConfig.ts

170 lines
3.7 KiB
TypeScript

import { MinMax } from "@spt-aki/models/common/MinMax";
import { ELocationName } from "@spt-aki/models/enums/ELocationName";
import { SeasonalEventType } from "@spt-aki/models/enums/SeasonalEventType";
import { IBaseConfig } from "@spt-aki/models/spt/config/IBaseConfig";
export interface IQuestConfig extends IBaseConfig
{
kind: "aki-quest"
// Hours to get/redeem items from quest mail
redeemTime: number
questTemplateIds: IPlayerTypeQuestIds
/** Show non-seasonal quests be shown to player */
showNonSeasonalEventQuests: boolean
eventQuests: Record<string, IEventQuestData>
repeatableQuests: IRepeatableQuestConfig[]
locationIdMap: Record<string, string>
bearOnlyQuests: string[]
usecOnlyQuests: string[]
}
export interface IPlayerTypeQuestIds
{
pmc: IQuestTypeIds
scav: IQuestTypeIds
}
export interface IQuestTypeIds
{
Elimination: string
Completion: string
Exploration: string
}
export interface IEventQuestData
{
name: string
season: SeasonalEventType
startTimestamp: number
endTimestamp: number
yearly: boolean
}
export interface IRepeatableQuestConfig
{
id: string;
name: string
side: string
types: string[]
resetTime: number
numQuests: number
minPlayerLevel: number
rewardScaling: IRewardScaling
locations: Record<ELocationName, string[]>
traderWhitelist: ITraderWhitelist[]
questConfig: IRepeatableQuestTypesConfig
/** Item base types to block when generating rewards */
rewardBaseTypeBlacklist: string[]
/** Item tplIds to ignore when generating rewards */
rewardBlacklist: string[]
rewardAmmoStackMinSize: number;
}
export interface IRewardScaling
{
levels: number[]
experience: number[]
roubles: number[]
items: number[]
reputation: number[]
rewardSpread: number
}
export interface ITraderWhitelist
{
traderId: string
questTypes: string[]
}
export interface IRepeatableQuestTypesConfig
{
Exploration: IExploration
Completion: ICompletion
Pickup: IPickup;
Elimination: IEliminationConfig[]
}
export interface IExploration
{
maxExtracts: number
specificExits: ISpecificExits
}
export interface ISpecificExits
{
probability: number
passageRequirementWhitelist: string[]
}
export interface ICompletion
{
minRequestedAmount: number
maxRequestedAmount: number
minRequestedBulletAmount: number
maxRequestedBulletAmount: number
useWhitelist: boolean
useBlacklist: boolean
}
export interface IPickup
{
ItemTypeToFetchWithMaxCount: IPickupTypeWithMaxCount[]
}
export interface IPickupTypeWithMaxCount
{
itemType: string
maxPickupCount: number
minPickupCount: number
}
export interface IEliminationConfig
{
levelRange: MinMax
targets: ITarget[]
bodyPartProb: number
bodyParts: IBodyPart[]
specificLocationProb: number
distLocationBlacklist: string[]
distProb: number
maxDist: number
minDist: number
maxKills: number
minKills: number
minBossKills: number
maxBossKills: number
minPmcKills: number
maxPmcKills: number
weaponCategoryRequirementProb: number
weaponCategoryRequirements: IWeaponRequirement[]
weaponRequirementProb: number
weaponRequirements: IWeaponRequirement[]
}
export interface ITarget extends IProbabilityObject
{
data: IBossInfo
}
export interface IBossInfo
{
isBoss: boolean
isPmc: boolean
}
export interface IBodyPart extends IProbabilityObject
{
data: string[]
}
export interface IWeaponRequirement extends IProbabilityObject
{
data: string[]
}
export interface IProbabilityObject
{
key: string
relativeProbability: number
data?: any
}