Update types

This commit is contained in:
Dev 2023-07-18 16:59:04 +01:00
parent 91636817ae
commit 57b1a22381
37 changed files with 650 additions and 566 deletions

View File

@ -1,6 +1,7 @@
import { GameController } from "../controllers/GameController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse";
import { ICurrentGroupResponse } from "../models/eft/game/ICurrentGroupResponse";
import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
import { IGameEmptyCrcRequestData } from "../models/eft/game/IGameEmptyCrcRequestData";
import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
@ -48,7 +49,7 @@ declare class GameCallbacks {
/**
* Handle client/match/group/current
*/
getCurrentGroup(url: string, info: IEmptyRequestData, sessionID: string): any;
getCurrentGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ICurrentGroupResponse>;
/**
* Handle client/checkVersion
*/

View File

@ -44,6 +44,7 @@ export declare class MatchCallbacks {
transferGroup(url: string, info: ITransferGroupRequest, sessionID: string): IGetBodyResponseData<boolean>;
/** Handle client/match/group/invite/cancel-all */
cancelAllGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
/** @deprecated - not called on raid start/end or game start/exit */
putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData;
/** Handle raid/profile/list */
getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
@ -53,6 +54,7 @@ export declare class MatchCallbacks {
/** Handle client/getMetricsConfig */
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>;
/**
* @deprecated - not called on raid start/end or game start/exit
* Handle client/match/group/status
* @returns
*/

View File

@ -51,6 +51,7 @@ export declare class GameController {
* Handle client/game/start
*/
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void;
protected adjustMapBotLimits(): void;
/**
* Handle client/game/config
*/

View File

@ -60,7 +60,7 @@ export declare class MatchController {
/** Handle client/match/offline/end */
endOfflineRaid(info: IEndOfflineRaidRequestData, sessionId: string): void;
/**
* Is extract by car
* Was extract by car
* @param extractName name of extract
* @returns true if car extract
*/

View File

@ -1,6 +1,6 @@
import { MinMax } from "../models/common/MinMax";
import { IRandomisedBotLevelResult } from "../models/eft/bot/IRandomisedBotLevelResult";
import { ExpTable } from "../models/eft/common/IGlobals";
import { IExpTable } from "../models/eft/common/IGlobals";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails";
import { ILogger } from "../models/spt/utils/ILogger";
@ -25,5 +25,5 @@ export declare class BotLevelGenerator {
* @param relativeDeltaMax max delta above player level to go
* @returns highest level possible for bot
*/
protected getHighestRelativeBotLevel(playerLevel: number, relativeDeltaMax: number, levelDetails: MinMax, expTable: ExpTable[]): number;
protected getHighestRelativeBotLevel(playerLevel: number, relativeDeltaMax: number, levelDetails: MinMax, expTable: IExpTable[]): number;
}

View File

@ -2,7 +2,7 @@ import { InventoryHelper } from "../helpers/InventoryHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { Preset } from "../models/eft/common/IGlobals";
import { IPreset } from "../models/eft/common/IGlobals";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { AddItem } from "../models/eft/inventory/IAddItemRequestData";
import { ISealedAirdropContainerSettings, RewardDetails } from "../models/spt/config/IInventoryConfig";
@ -71,7 +71,7 @@ export declare class LootGenerator {
* @param result array to add found preset to
* @returns true if preset was valid and added to pool
*/
protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record<string, {
protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, IPreset][], itemTypeCounts: Record<string, {
current: number;
max: number;
}>, itemBlacklist: string[], result: LootItem[]): boolean;
@ -95,7 +95,7 @@ export declare class LootGenerator {
* @param chosenWeaponPreset The weapon preset given to player as reward
* @returns AddItem array
*/
protected getSealedContainerWeaponModRewards(containerSettings: ISealedAirdropContainerSettings, linkedItemsToWeapon: ITemplateItem[], chosenWeaponPreset: Preset): AddItem[];
protected getSealedContainerWeaponModRewards(containerSettings: ISealedAirdropContainerSettings, linkedItemsToWeapon: ITemplateItem[], chosenWeaponPreset: IPreset): AddItem[];
/**
* Handle event-related loot containers - currently just the halloween jack-o-lanterns that give food rewards
* @param rewardContainerDetails

View File

@ -1,5 +1,5 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { Preset } from "../models/eft/common/IGlobals";
import { IPreset } from "../models/eft/common/IGlobals";
import { Item } from "../models/eft/common/tables/IItem";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ConfigServer } from "../servers/ConfigServer";
@ -36,12 +36,12 @@ export declare class RagfairAssortGenerator {
* Get presets from globals.json
* @returns Preset object array
*/
protected getPresets(): Preset[];
protected getPresets(): IPreset[];
/**
* Get default presets from globals.json
* @returns Preset object array
*/
protected getDefaultPresets(): Preset[];
protected getDefaultPresets(): IPreset[];
/**
* Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true
* @param tplId tplid to add to item

View File

@ -1,5 +1,6 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { Product } from "../models/eft/common/tables/IBotBase";
import { Upd } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
import { IScavCaseConfig } from "../models/spt/config/IScavCaseConfig";
@ -78,7 +79,7 @@ export declare class ScavCaseRewardGenerator {
protected addStackCountToAmmoAndMoney(item: ITemplateItem, resultItem: {
_id: string;
_tpl: string;
upd: any;
upd: Upd;
}, rarity: string): void;
/**
*

View File

@ -53,5 +53,7 @@ export declare class HealthHelper {
* @param duration How long the effect has left in seconds (-1 by default, no duration).
*/
protected addEffect(pmcData: IPmcData, effectBodyPart: string, effectType: string, duration?: number): void;
protected isEmpty(map: any): boolean;
protected isEmpty(map: Record<string, {
Time: number;
}>): boolean;
}

View File

@ -1,18 +1,18 @@
import { Preset } from "../models/eft/common/IGlobals";
import { IPreset } from "../models/eft/common/IGlobals";
import { DatabaseServer } from "../servers/DatabaseServer";
import { JsonUtil } from "../utils/JsonUtil";
export declare class PresetHelper {
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected lookup: Record<string, string[]>;
protected defaultPresets: Record<string, Preset>;
protected defaultPresets: Record<string, IPreset>;
constructor(jsonUtil: JsonUtil, databaseServer: DatabaseServer);
hydratePresetStore(input: Record<string, string[]>): void;
getDefaultPresets(): Record<string, Preset>;
getDefaultPresets(): Record<string, IPreset>;
isPreset(id: string): boolean;
hasPreset(templateId: string): boolean;
getPreset(id: string): Preset;
getPresets(templateId: string): Preset[];
getDefaultPreset(templateId: string): Preset;
getPreset(id: string): IPreset;
getPresets(templateId: string): IPreset[];
getDefaultPreset(templateId: string): IPreset;
getBaseItemTpl(presetId: string): string;
}

View File

@ -68,6 +68,10 @@ export declare class ProfileHelper {
getFullProfile(sessionID: string): IAkiProfile;
getPmcProfile(sessionID: string): IPmcData;
getScavProfile(sessionID: string): IPmcData;
/**
* Get baseline counter values for a fresh profile
* @returns Stats
*/
getDefaultCounters(): Stats;
protected isWiped(sessionID: string): boolean;
protected getServerVersion(): string;

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,5 @@
import { MinMax } from "../../../models/common/MinMax";
import { Ixyz } from "./Ixyz";
export interface ILocationBase {
AccessKeys: string[];
AirdropParameters: AirdropParameter[];
@ -81,9 +83,7 @@ export interface ILocationBase {
users_summon_seconds: number;
waves: Wave[];
}
export interface ILimit {
min: number;
max: number;
export interface ILimit extends MinMax {
items: any[];
}
export interface AirdropParameter {
@ -140,10 +140,8 @@ export interface BotLocationModifier {
Scattering: number;
VisibleDistance: number;
}
export interface MinMaxBot {
WildSpawnType: WildSpawnType;
max: number;
min: number;
export interface MinMaxBot extends MinMax {
WildSpawnType: WildSpawnType | string;
}
export interface Preview {
path: string;
@ -160,7 +158,7 @@ export interface SpawnPointParam {
DelayToCanSpawnSec: number;
Id: string;
Infiltration: string;
Position: xyz;
Position: Ixyz;
Rotation: number;
Sides: string[];
}
@ -169,14 +167,9 @@ export interface ColliderParams {
_props: Props;
}
export interface Props {
Center: xyz;
Center: Ixyz;
Radius: number;
}
export interface xyz {
x: number;
y: number;
z: number;
}
export interface Exit {
Chance: number;
Count: number;
@ -211,5 +204,6 @@ export interface Wave {
}
export declare enum WildSpawnType {
ASSAULT = "assault",
MARKSMAN = "marksman"
MARKSMAN = "marksman",
PMCBOT = "pmcbot"
}

View File

@ -1,3 +1,4 @@
import { Ixyz } from "./Ixyz";
import { Item } from "./tables/IItem";
export interface ILooseLoot {
spawnpointCount: SpawnpointCount;
@ -18,11 +19,11 @@ export interface SpawnpointTemplate {
IsStatic: boolean;
useGravity: boolean;
randomRotation: boolean;
Position: Xyz;
Rotation: Xyz;
Position: Ixyz;
Rotation: Ixyz;
IsGroupPosition: boolean;
GroupPositions: any[];
Root: any;
Root: string;
Items: Item[];
}
export interface Spawnpoint {
@ -31,11 +32,6 @@ export interface Spawnpoint {
template: SpawnpointTemplate;
itemDistribution: ItemDistribution[];
}
export interface Xyz {
x: number;
y: number;
z: number;
}
export interface ItemDistribution {
composedKey: ComposedKey;
relativeProbability: number;

View File

@ -0,0 +1,5 @@
export interface Ixyz {
x: number;
y: number;
z: number;
}

View File

@ -1,3 +1,4 @@
import { Ixyz } from "../Ixyz";
export interface ICustomizationItem {
_id: string;
_name: string;
@ -19,15 +20,10 @@ export interface Props {
Prefab: Prefab;
WatchPrefab: Prefab;
IntegratedArmorVest: boolean;
WatchPosition: Xyz;
WatchRotation: Xyz;
WatchPosition: Ixyz;
WatchRotation: Ixyz;
}
export interface Prefab {
path: string;
rcid: string;
}
export interface Xyz {
x: number;
y: number;
z: number;
}

View File

@ -1,3 +1,4 @@
import { Ixyz } from "../Ixyz";
import { Item } from "./IItem";
export interface ILootBase {
staticAmmo: Record<string, IStaticAmmoDetails[]>;
@ -18,8 +19,8 @@ export interface IStaticWeaponProps {
IsStatic: boolean;
useGravity: boolean;
randomRotation: boolean;
Position: Xyz;
Rotation: Xyz;
Position: Ixyz;
Rotation: Ixyz;
IsGroupPosition: boolean;
GroupPositions: any[];
Root: string;
@ -30,20 +31,15 @@ export interface IStaticContainerProps {
IsStatic: boolean;
useGravity: boolean;
randomRotation: boolean;
Position: Xyz;
Rotation: Xyz;
Position: Ixyz;
Rotation: Ixyz;
IsGroupPosition: boolean;
GroupPositions: any[];
Root: any;
Root: string;
Items: StaticItem[];
}
export interface Xyz {
x: number;
y: number;
z: number;
}
export interface StaticItem {
_id: any;
_id: string;
_tpl: string;
}
export interface IStaticForcedProps {

View File

@ -1,7 +1,9 @@
import { QuestRewardType } from "../../../enums/QuestRewardType";
import { QuestStatus } from "../../../enums/QuestStatus";
import { QuestTypeEnum } from "../../../enums/QuestTypeEnum";
import { Item } from "./IItem";
export interface IQuest {
/** SPT addition - human readable quest name */
QuestName?: string;
_id: string;
canShowNotificationsInGame: boolean;
@ -13,9 +15,10 @@ export interface IQuest {
traderId: string;
location: string;
image: string;
type: string;
type: QuestTypeEnum;
isKey: boolean;
questStatus: any;
/** @deprecated - Likely not used, use 'status' instead */
questStatus: QuestStatus;
restartable: boolean;
instantComplete: boolean;
secretQuest: boolean;
@ -23,9 +26,11 @@ export interface IQuest {
successMessageText: string;
templateId: string;
rewards: Rewards;
/** Becomes 'AppearStatus' inside client */
status: string | number;
KeyQuest: boolean;
changeQuestMessageText: string;
/** "Pmc" or "Scav" */
side: string;
}
export interface Conditions {

View File

@ -1,3 +1,4 @@
import { Ixyz } from "../Ixyz";
export interface ITemplateItem {
_id: string;
_name: string;
@ -201,11 +202,11 @@ export interface Props {
CameraSnap?: number;
ReloadMode?: string;
AimPlane?: number;
TacticalReloadStiffnes?: Xyz;
TacticalReloadStiffnes?: Ixyz;
TacticalReloadFixation?: number;
RecoilCenter?: Xyz;
RotationCenter?: Xyz;
RotationCenterNoStock?: Xyz;
RecoilCenter?: Ixyz;
RotationCenter?: Ixyz;
RotationCenterNoStock?: Ixyz;
FoldedSlot?: string;
CompactHandling?: boolean;
MinRepairDegradation?: number;
@ -247,7 +248,7 @@ export interface Props {
FaceShieldComponent?: boolean;
FaceShieldMask?: string;
MaterialType?: string;
RicochetParams?: Xyz;
RicochetParams?: Ixyz;
DeafStrength?: string;
BlindnessProtection?: number;
Distortion?: number;
@ -283,12 +284,12 @@ export interface Props {
PrimaryConsumption?: number;
SecondryConsumption?: number;
DeflectionConsumption?: number;
AppliedTrunkRotation?: Xyz;
AppliedHeadRotation?: Xyz;
AppliedTrunkRotation?: Ixyz;
AppliedHeadRotation?: Ixyz;
DisplayOnModel?: boolean;
AdditionalAnimationLayer?: number;
StaminaBurnRate?: number;
ColliderScaleMultiplier?: Xyz;
ColliderScaleMultiplier?: Ixyz;
ConfigPathStr?: string;
MaxMarkersCount?: number;
scaleMin?: number;
@ -353,9 +354,9 @@ export interface Props {
ShowHitEffectOnExplode?: boolean;
ExplosionType?: string;
AmmoLifeTimeSec?: number;
Contusion?: Xyz;
ArmorDistanceDistanceDamage?: Xyz;
Blindness?: Xyz;
Contusion?: Ixyz;
ArmorDistanceDistanceDamage?: Ixyz;
Blindness?: Ixyz;
IsLightAndSoundShot?: boolean;
LightAndSoundShotAngle?: number;
LightAndSoundShotSelfContusionTime?: number;
@ -427,11 +428,6 @@ export interface SlotFilter {
Filter: string[];
AnimationIndex?: number;
}
export interface Xyz {
x: number;
y: number;
z: number;
}
export interface StackSlot {
_name?: string;
_id: string;

View File

@ -1,6 +1,6 @@
import { Message } from "../profile/IAkiProfile";
import { IUserDialogInfo, Message } from "../profile/IAkiProfile";
export interface IGetMailDialogViewResponseData {
messages: Message[];
profiles: any[];
profiles: IUserDialogInfo[];
hasMessagesWithRewards: boolean;
}

View File

@ -1,5 +1,4 @@
export interface IGetItemPriceResult {
import { MinMax } from "../../../models/common/MinMax";
export interface IGetItemPriceResult extends MinMax {
avg: number;
min: number;
max: number;
}

View File

@ -5,5 +5,7 @@ export declare enum QuestRewardType {
TRADER_UNLOCK = "TraderUnlock",
ITEM = "Item",
ASSORTMENT_UNLOCK = "AssortmentUnlock",
PRODUCTIONS_SCHEME = "ProductionScheme"
PRODUCTIONS_SCHEME = "ProductionScheme",
TRADER_STANDING_RESET = "TraderStandingReset",
TRADER_STANDING_RESTORE = "TraderStandingRestore"
}

View File

@ -0,0 +1,15 @@
export declare enum QuestTypeEnum {
PICKUP = "PickUp",
ELIMINATION = "Elimination",
DISCOVER = "Discover",
COMPLETION = "Completion",
EXPLORATION = "Exploration",
LEVELLING = "Levelling",
EXPERIENCE = "Experience",
STANDING = "Standing",
LOYALTY = "Loyalty",
MERCHANT = "Merchant",
SKILL = "Skill",
MULTI = "Multi",
WEAPON_ASSEMBLY = "WeaponAssembly"
}

View File

@ -5,16 +5,26 @@ export interface IAirdropConfig extends IBaseConfig {
kind: "aki-airdrop";
airdropChancePercent: AirdropChancePercent;
airdropTypeWeightings: Record<AirdropTypeEnum, number>;
/** Lowest point plane will fly at */
planeMinFlyHeight: number;
/** Highest point plane will fly at */
planeMaxFlyHeight: number;
/** Loudness of plane engine */
planeVolume: number;
/** Speed plane flies overhead */
planeSpeed: number;
/** Speed loot crate falls after being dropped */
crateFallSpeed: number;
/** Container tpls to use when spawning crate - affects container size, keyed by drop type e.g. mixed/weaponArmor/foodMedical/barter */
containerIds: Record<string, string>;
/** Earliest time aircraft will spawn in raid */
airdropMinStartTimeSeconds: number;
/** Latest time aircraft will spawn in raid */
airdropMaxStartTimeSeconds: number;
/** What rewards will the loot crate contain, keyed by drop type e.g. mixed/weaponArmor/foodMedical/barter */
loot: Record<string, AirdropLoot>;
}
/** Chance map will have an airdrop occur out of 100 - locations not included count as 0% */
export interface AirdropChancePercent {
bigmap: number;
woods: number;
@ -24,14 +34,22 @@ export interface AirdropChancePercent {
reserve: number;
tarkovStreets: number;
}
/** Loot inside crate */
export interface AirdropLoot {
/** Min/max of weapons inside crate */
presetCount?: MinMax;
/** Min/max of items inside crate */
itemCount: MinMax;
/** Min/max of sealed weapon boxes inside crate */
weaponCrateCount: MinMax;
/** Items to never allow - tpls */
itemBlacklist: string[];
/** Item type (parentId) to allow inside crate */
itemTypeWhitelist: string[];
/** key: item base type: value: max count */
/** Item type/ item tpls to limit count of inside crate - key: item base type: value: max count */
itemLimits: Record<string, number>;
/** Items to limit stack size of key: item tpl value: min/max stack size */
itemStackLimits: Record<string, MinMax>;
/** Armor levels to allow inside crate e.g. [4,5,6] */
armorLevelWhitelist?: number[];
}

View File

@ -32,6 +32,7 @@ export interface IBotConfig extends IBaseConfig {
/** Batch generation size when type not available in cache */
botGenerationBatchSizePerType: number;
}
/** Number of bots to generate and store in cache on raid start per bot type */
export interface PresetBatch {
assault: number;
bossBully: number;
@ -67,7 +68,9 @@ export interface LootNvalue {
pmc: number;
}
export interface EquipmentFilters {
/** Limits for mod types per weapon .e.g. scopes */
weaponModLimits: ModLimits;
/** Whitelsit for weapons allowed per gun */
weaponSightWhitelist: Record<string, string[]>;
faceShieldIsActiveChancePercent?: number;
lightIsActiveDayChancePercent?: number;
@ -75,10 +78,14 @@ export interface EquipmentFilters {
laserIsActiveChancePercent?: number;
nvgIsActiveChanceDayPercent?: number;
nvgIsActiveChanceNightPercent?: number;
/** Adjust weighting/chances of items on bot by level of bot */
randomisation: RandomisationDetails[];
/** Blacklist equipment by level of bot */
blacklist: EquipmentFilterDetails[];
/** Whitelist equipment by level of bot */
whitelist: EquipmentFilterDetails[];
clothing: WeightingAdjustmentDetails[];
/** Adjust clothing choice weighting by level of bot */
weightingAdjustments: WeightingAdjustmentDetails[];
}
export interface ModLimits {
@ -88,24 +95,34 @@ export interface ModLimits {
lightLaserLimit?: number;
}
export interface RandomisationDetails {
/** Between what levels do these randomisation setting apply to */
levelRange: MinMax;
generation?: Record<string, MinMaxWithWhitelist>;
/** Mod slots that should be fully randomisate -ignores mods from bottype.json */
randomisedWeaponModSlots?: string[];
/** Armor slots that should be randomised e.g. 'Headwear, Armband' */
randomisedArmorSlots?: string[];
/** Equipment chances */
equipment?: Record<string, number>;
/** Modc chances */
/** Mod chances */
mods?: Record<string, number>;
}
export interface EquipmentFilterDetails {
/** Between what levels do these equipment filter setting apply to */
levelRange: MinMax;
/** Key: mod slot name e.g. mod_magazine, value: item tpls */
equipment: Record<string, string[]>;
/** Key: cartridge type e.g. Caliber23x75, value: item tpls */
cartridge: Record<string, string[]>;
}
export interface WeightingAdjustmentDetails {
/** Between what levels do these weight settings apply to */
levelRange: MinMax;
/** Key: ammo type e.g. Caliber556x45NATO, value: item tpl + weight */
ammo?: AdjustmentDetails;
/** Key: equipment slot e.g. TacticalVest, value: item tpl + weight */
equipment?: AdjustmentDetails;
/** Key: clothing slor e.g. feet, value: item tpl + weight */
clothing?: AdjustmentDetails;
}
export interface AdjustmentDetails {

View File

@ -2,10 +2,15 @@ import { IBaseConfig } from "./IBaseConfig";
export interface IInRaidConfig extends IBaseConfig {
kind: "aki-inraid";
MIAOnRaidEnd: boolean;
/** Overrides to apply to the pre-raid settings screen */
raidMenuSettings: RaidMenuSettings;
/** What effects should be saved post-raid */
save: Save;
/** Names of car extracts */
carExtracts: string[];
/** Fene rep gain from a single car extract */
carExtractBaseStandingGain: number;
/** Fence rep gain when successfully extracting as pscav */
scavExtractGain: number;
}
export interface RaidMenuSettings {
@ -17,6 +22,7 @@ export interface RaidMenuSettings {
enablePve: boolean;
}
export interface Save {
/** Should loot gained from raid be saved */
loot: boolean;
durability: boolean;
}

View File

@ -1,10 +1,16 @@
import { IBaseConfig } from "./IBaseConfig";
export interface IInsuranceConfig extends IBaseConfig {
kind: "aki-insurance";
/** Insurance price multiplier */
insuranceMultiplier: Record<string, number>;
/** Chance item is returned as insurance, keyed by trader id */
returnChancePercent: Record<string, number>;
/** Item slots that should never be returned as insurance */
blacklistedEquipment: string[];
/** Names of equipment slots that could not be returned as insurance */
slotIdsWithChanceOfNotReturning: string[];
/** Override to control how quickly insurance is processed/returned in second */
returnTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */
runIntervalSeconds: number;
}

View File

@ -2,6 +2,7 @@ import { MinMax } from "../../../models/common/MinMax";
import { IBaseConfig } from "./IBaseConfig";
export interface IInventoryConfig extends IBaseConfig {
kind: "aki-inventory";
/** Should new items purchased by flagged as found in raid */
newItemsMarkedFound: boolean;
randomLootContainers: Record<string, RewardDetails>;
sealedAirdropContainer: ISealedAirdropContainerSettings;
@ -17,6 +18,7 @@ export interface RewardDetails {
export interface ISealedAirdropContainerSettings {
weaponRewardWeight: Record<string, number>;
defaultPresetsOnly: boolean;
/** Should contents be flagged as found in raid when opened */
foundInRaid: boolean;
weaponModRewardLimits: Record<string, MinMax>;
rewardTypeLimits: Record<string, MinMax>;

View File

@ -1,12 +1,17 @@
import { MinMax } from "../../../models/common/MinMax";
import { BossLocationSpawn, Wave } from "../../../models/eft/common/ILocationBase";
import { IBaseConfig } from "./IBaseConfig";
export interface ILocationConfig extends IBaseConfig {
kind: "aki-location";
/** Waves with a min/max of the same value don't spawn any bots, bsg only spawn the difference between min and max */
fixEmptyBotWavesSettings: IFixEmptyBotWavesSettings;
/** Rogues are classified as bosses and spawn immediatly, this can result in no scavs spawning, delay rogues spawning to allow scavs to spawn first */
rogueLighthouseSpawnTimeSettings: IRogueLighthouseSpawnTimeSettings;
/** When a map has hit max alive bots, any wave that should spawn will be reduced to 1 bot in size and placed in a spawn queue, this splits waves into smaller sizes to reduce the impact of this behaviour */
splitWaveIntoSingleSpawnsSettings: ISplitWaveSettings;
looseLootMultiplier: LootMultiplier;
staticLootMultiplier: LootMultiplier;
/** Custom bot waves to add to a locations base json on game start if addCustomBotWavesToMaps is true */
customWaves: CustomWaves;
/** Open zones to add to map */
openZones: Record<string, string[]>;
@ -18,6 +23,10 @@ export interface ILocationConfig extends IBaseConfig {
addOpenZonesToAllMaps: boolean;
/** Allow addition of custom bot waves designed by SPT to be added to maps - defined in configs/location.json.customWaves*/
addCustomBotWavesToMaps: boolean;
/** Should the limits defined inside botTypeLimits to appled to locations on game start */
enableBotTypeLimits: boolean;
/** Add limits to a locations base.MinMaxBots array if enableBotTypeLimits is true*/
botTypeLimits: Record<string, IBotTypeLimit[]>;
}
export interface IFixEmptyBotWavesSettings {
enabled: boolean;
@ -33,9 +42,14 @@ export interface ISplitWaveSettings {
waveSizeThreshold: number;
}
export interface CustomWaves {
/** Bosses spawn on raid start */
boss: Record<string, BossLocationSpawn[]>;
normal: Record<string, Wave[]>;
}
export interface IBotTypeLimit extends MinMax {
type: string;
}
/** Multiplier to apply to the loot count for a given map */
export interface LootMultiplier {
bigmap: number;
develop: number;

View File

@ -1,8 +1,11 @@
import { IBaseConfig } from "./IBaseConfig";
export interface ILostOnDeathConfig extends IBaseConfig {
kind: "aki-lostondeath";
/** What equipment in each slot should be lost on death */
equipment: Equipment;
/** Should special slot items be removed from quest inventory on death e.g. wifi camera/markers */
specialSlotItems: boolean;
/** Should quest items be removed from quest inventory on death */
questItems: boolean;
}
export interface Equipment {

View File

@ -12,21 +12,31 @@ export interface IPmcConfig {
/** Global whitelist/blacklist of backpack loot for PMCs */
backpackLoot: SlotLootSettings;
dynamicLoot: DynamicLoot;
/** Use difficulty defined in config/bot.json/difficulty instead of chosen difficulty dropdown value */
useDifficultyOverride: boolean;
/** Difficulty override e.g. "AsOnline/Hard" */
difficulty: string;
/** Chance out of 100 to have a complete gun in backpack */
looseWeaponInBackpackChancePercent: number;
/** MinMax count of weapons to have in backpack */
looseWeaponInBackpackLootMinMax: MinMax;
/** Percentage chance PMC will be USEC */
isUsec: number;
/** WildSpawnType enum value USEC PMCs use */
usecType: string;
/** WildSpawnType enum value BEAR PMCs use */
bearType: string;
chanceSameSideIsHostilePercent: number;
/** key: location, value: type for usec/bear */
/** What 'brain' does a PMC use, keyed by map and side (USEC/BEAR) key: map location, value: type for usec/bear */
pmcType: Record<string, Record<string, Record<string, number>>>;
maxBackpackLootTotalRub: number;
maxPocketLootTotalRub: number;
maxVestLootTotalRub: number;
/** Percentage chance a bot from a wave is converted into a PMC, key = bot wildspawn tpye (assault/exusec), value: min+max chance to be converted */
convertIntoPmcChance: Record<string, MinMax>;
/** WildSpawnType bots PMCs should see as hostile */
enemyTypes: string[];
/** How many levels above player level can a PMC be */
botRelativeLevelDeltaMax: number;
}
export interface PmcTypes {

View File

@ -29,10 +29,8 @@ export interface Chance {
overpriced: number;
underpriced: number;
}
export interface Time {
export interface Time extends MinMax {
base: number;
min: number;
max: number;
}
export interface Reputation {
gain: number;
@ -100,11 +98,9 @@ export interface OfferAdjustment {
/** What is the minimum rouble price to consider adjusting price of item */
priceThreshholdRub: number;
}
export interface Condition {
export interface Condition extends MinMax {
/** Percentage change durability is altered */
conditionChance: number;
min: number;
max: number;
}
export interface Blacklist {
/** Damaged ammo packs */

View File

@ -6,6 +6,7 @@ export interface ITraderConfig extends IBaseConfig {
purchasesAreFoundInRaid: boolean;
updateTimeDefault: number;
traderPriceMultipler: number;
/** Keep track of purchased trader-limited items beyond server restarts to prevent server-restart item scumming */
persistPurchaseDataInProfile: boolean;
fence: FenceConfig;
}

View File

@ -1,5 +1,5 @@
import { Preset } from "../../eft/common/IGlobals";
import { IPreset } from "../../eft/common/IGlobals";
export interface CustomPreset {
key: string;
preset: Preset;
preset: IPreset;
}

View File

@ -1,7 +1,7 @@
import { HandbookHelper } from "../helpers/HandbookHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { FenceLevel, Preset } from "../models/eft/common/IGlobals";
import { IFenceLevel, IPreset } from "../models/eft/common/IGlobals";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Item } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
@ -146,7 +146,7 @@ export declare class FenceService {
* @param assorts object to add presets to
* @param loyaltyLevel loyalty level to requre item at
*/
protected addPresets(desiredPresetCount: number, defaultWeaponPresets: Record<string, Preset>, assorts: ITraderAssort, loyaltyLevel: number): void;
protected addPresets(desiredPresetCount: number, defaultWeaponPresets: Record<string, IPreset>, assorts: ITraderAssort, loyaltyLevel: number): void;
/**
* Randomise items' upd properties e.g. med packs/weapons/armor
* @param itemDetails Item being randomised
@ -176,7 +176,7 @@ export declare class FenceService {
* @param pmcData Player profile
* @returns FenceLevel object
*/
getFenceInfo(pmcData: IPmcData): FenceLevel;
getFenceInfo(pmcData: IPmcData): IFenceLevel;
/**
* Remove an assort from fence by id
* @param assortIdToRemove assort id to remove from fence assorts

View File

@ -3,7 +3,7 @@ import { HandbookHelper } from "../helpers/HandbookHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { Preset } from "../models/eft/common/IGlobals";
import { IPreset } from "../models/eft/common/IGlobals";
import { Item } from "../models/eft/common/tables/IItem";
import { IBarterScheme } from "../models/eft/common/tables/ITrader";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
@ -126,8 +126,8 @@ export declare class RagfairPriceService implements OnLoad {
* @param presets weapon presets to choose from
* @returns Default preset object
*/
protected getWeaponPreset(presets: Preset[], weapon: Item): {
protected getWeaponPreset(presets: IPreset[], weapon: Item): {
isDefault: boolean;
preset: Preset;
preset: IPreset;
};
}

View File

@ -1,5 +1,5 @@
import { BotHelper } from "../helpers/BotHelper";
import { Config } from "../models/eft/common/IGlobals";
import { IConfig } from "../models/eft/common/IGlobals";
import { Inventory } from "../models/eft/common/tables/IBotType";
import { SeasonalEventType } from "../models/enums/SeasonalEventType";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
@ -105,7 +105,7 @@ export declare class SeasonalEventService {
* @param globalConfig globals.json
* @param eventName Name of the event to enable. e.g. Christmas
*/
protected updateGlobalEvents(globalConfig: Config, eventType: SeasonalEventType): void;
protected updateGlobalEvents(globalConfig: IConfig, eventType: SeasonalEventType): void;
/**
* Change trader icons to be more event themed (Halloween only so far)
* @param eventType What event is active